小程序开发的坑
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 = "https://www.it610.com/weixin")
public class WeixinProgramController {@RequestMapping(value = "https://www.it610.com/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域名,是不能使用明文模式的 【小程序开发的坑】
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量