微信 JSSDK 报 config:invalid signature 错误
2016-05-18 00:00
761 查看
在微信公众号开发中遇到自定义分享内容。使用 JSSDK 的时候一直报 config:invalid signature 错误。
大家可以先参考一下腾讯的官方说明。
然后需注意一下几点:
签名要用到的jsapi_ticket需要保存的,2小时有效期。如果在2小时内出现问题需要删除才能工作,一般是自身程序的问题,请检查。
nonceStr和noncestr的大小写,当心!
url一定要当心,如果是"http://x.com/jspay?oid=0&attr=1#wechat"的形式,那么应该保留的是"http://x.com/jspay?oid=0&attr=1"。
据此,url在JavaScript中是location.href.split('#')[0]获取。
据此,url在php中用$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]拼装,
据说会有多余的80端口问题,但是记录者没有遇到过,总之请小心。
url在JavaScript中千万别忘记“encodeURIComponent”!否则后果很诡异,遇到过初始化的时候报invalid
signature,但是API接口又能调用的情况。
1、页面请求的 url 和生成 signature 的 url 必须一致。
2、url 需去除 # 号后面的内容 ( encodeURIComponent(location.href.split('#')[0]) )
我的是通过 ajax 调用生成签名来配置 wx.config({ }) 的
后台php
大家可以先参考一下腾讯的官方说明。
然后需注意一下几点:
签名要用到的jsapi_ticket需要保存的,2小时有效期。如果在2小时内出现问题需要删除才能工作,一般是自身程序的问题,请检查。
nonceStr和noncestr的大小写,当心!
url一定要当心,如果是"http://x.com/jspay?oid=0&attr=1#wechat"的形式,那么应该保留的是"http://x.com/jspay?oid=0&attr=1"。
据此,url在JavaScript中是location.href.split('#')[0]获取。
据此,url在php中用$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]拼装,
据说会有多余的80端口问题,但是记录者没有遇到过,总之请小心。
url在JavaScript中千万别忘记“encodeURIComponent”!否则后果很诡异,遇到过初始化的时候报invalid
signature,但是API接口又能调用的情况。
1、页面请求的 url 和生成 signature 的 url 必须一致。
2、url 需去除 # 号后面的内容 ( encodeURIComponent(location.href.split('#')[0]) )
我的是通过 ajax 调用生成签名来配置 wx.config({ }) 的
<script type="text/javascript"> $.ajax({ type: "Get", data: "url=" + encodeURIComponent(location.href.split('#')[0]), url: "{:U('Index/getSignPackage')}", success: function(res){ var res = eval("(" + res + ")"); // alert(JSON.stringify(res)); // console.log(res); if(res.code != 0){ wx.config({ debug: false, appId: res.appId, timestamp: res.timestamp, nonceStr: res.nonceStr, signature: res.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'hideMenuItems', 'showMenuItems', 'hideOptionMenu', 'showOptionMenu' ] }); wx.ready(function () { // 在这里调用 API wx.onMenuShareTimeline({ title: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享标题 link: 'http://dyyj.vxiaoxiao.cn/index.php?s=/Home/Index/index.html', // 分享链接 imgUrl: 'http://dyyj.vxiaoxiao.cn/Public/Home/images/danyang/logo.jpg', // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享标题 desc: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享描述 link: 'http://dyyj.vxiaoxiao.cn/index.php?s=/Home/Index/index.html', // 分享链接 imgUrl: 'http://dyyj.vxiaoxiao.cn/Public/Home/images/danyang/logo.jpg', // 分享图标 type: '', // 分享类型,music、video或link,不填默认为link dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); } } }) </script>
后台php
//获取微信JSSDK配置信息 function getSignPackage($url){ $jssdk = new JSSDK("addId", "appSecret"); $signPackage = $jssdk->GetSignPackage($url); $signPackage['code']=(empty($signPackage))?0:1; $this->ajaxReturn(json_encode($signPackage)); exit(); }
ps: 具体怎么使用微信自定义的分享功能可以参考 http://www.huceo.com/post/414.html
相关文章推荐
- 怎么使用微信JSSDK的自定义分享功能
- ngrok配置
- 微信分享接口
- 微信公众平台开发入门教程(图文)
- 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(二 、上传图片服务器操作)
- Android ShareSDK 微信,QQ,新浪微博第三方登录
- Android 微信第三方登录系列问题
- WordPress收费下载资源插件 vip会员功能/收费下载/收费查看/联盟推广+前端用户中心 支付宝/财付通/贝宝/网银/微信[更新至v9.0.2]
- 深入理解“HelloWorld”小程序
- 惊心动魄-微信抢红包传播活动
- 打招呼小小程序
- something about saving socket resource(basing on WebChat:微信红包)
- 微信支付集锦
- CodeIgniter框架集成微信扫码支付SDK
- Java小程序:对混杂的字母,按字典顺序输出
- 微信支付多多了解
- 基于Xposed修改微信运动步数
- Android微信支付(二)
- 微信服务器的搭建
- ANDROID微信支付开发源代码_微信支付V3接口DEMO下载