小程序开发的坑

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;
    }

小程序开发的坑_第1张图片
推送服务器设置.png

需要注意的是,如果是非https域名,是不能使用明文模式的

你可能感兴趣的:(小程序开发的坑)