1. 后端无法获取小程序通过post请求提交的数据
原因:小程序的post请求默认的header['content-type'] 为 application/json
解决办法:在wx.request{}中添加以下代码,将header设置为form格式
header: { 'Content-Type': 'application/x-www-form-urlencoded' }
2. 客服消息服务器设置token错误,无法保存
原因:当在点击保存按钮的时候,微信会发一个请求到你填写的服务器地址,来验证服务器的合法性和安全性。携带的参数有String signature, String timestamp, String nonce, String echostr
,返回echostr表示验证通过。
解决办法:下载微信的demo,选择Java的代码,在WXBizMsgCrypt中加入verifyUrl那段代码,再编写一个接口即可。
@Controller
@Slf4j
@RequestMapping(value = "/weixin")
public class WeixinProgramController {
@RequestMapping(value = "/verifyUrl")
@ResponseBody
public String weixinSignature(String signature, String timestamp, String nonce, String echostr){
log.info("微信小程序校验,signature={},timestamp={}, nonce={}, echostr={}", signature, timestamp, nonce, echostr);
String token = "xiaochengxu";//自定义字段(自己填写3-32个字符)
try {
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt("Token令牌", "EncodingAESKey", "AppId");
boolean verifyResult = wxBizMsgCrypt.verifyUrl(signature, timestamp, nonce);
log.info("微信小程序校验,signature={},timestamp={}, nonce={}, echostr={}, verifyResult={}", signature, timestamp, nonce, echostr, verifyResult);
return echostr;
} catch (AesException e) {
log.error("aes编码格式错误", e);
}
return echostr;
}
}
/**
* 验证URL
* @param msgSignature 签名串,对应URL参数的msg_signature
* @param timeStamp 时间戳,对应URL参数的timestamp
* @param nonce 随机串,对应URL参数的nonce
*
* @return 解密之后的echostr
* @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息
*/
public boolean verifyUrl(String msgSignature, String timeStamp, String nonce)
throws AesException {
String signature = SHA1.signUrl(token, timeStamp, nonce);
if (!signature.equals(msgSignature)) {
return false;
}
return true;
}
推送服务器设置.png
需要注意的是,如果是非https域名,是不能使用明文模式的
网友评论