美文网首页
小程序开发的坑

小程序开发的坑

作者: Sanisy | 来源:发表于2018-02-06 12:16 被阅读66次

    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域名,是不能使用明文模式的

    相关文章

      网友评论

          本文标题:小程序开发的坑

          本文链接:https://www.haomeiwen.com/subject/gicgzxtx.html