发布网友 发布时间:2022-04-23 07:19
共2个回答
懂视网 时间:2022-04-23 11:41
这次给大家带来前端微信分享jssdk config:invalid signature 签名错误的解决方法,前端微信分享jssdk config:invalid signature签名错误的解决方法注意事项有哪些,下面就是实战案例,一起来看一下。关于前端微信分享jssdk config:invalid signature 签名错误
这几天刚刚把微信写完,说出来你可能不信,我写个微信分享一起用了2个礼拜。中间各种心酸,一开始后台老大哥帮我把后台签证给写好了,不过不起作用,想叫他在改,但是后面公司有个项目急着上线,没有空,产品催的又急,自己没有办法,开始自己处理后台.
好了,话不多说,正文开始
首先微信的的东西看微信SDK文档是肯定的
因为我是前端,就只写关于前端的代码了,后台我也涉及了,在文章的最后我会附上我自己改的后台代码
$.ajax({ type: "post", dataType: 'json', url: '接口链接', data: { url: urld }, success: function(conf) { console.log(conf); configWxAPI(conf); var conf = conf.url; return conf; }, error: function(event, XMLHttpRequest, ajaxOptions, thrownError) { } }); //配置权限 function configWxAPI(conf) { wx.config({ debug: false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端 //打开,参数信息会通过log打出,仅在pc端时才会打印 appId: "唯一的ID", //必填,公众号的唯一标识 timestamp: conf.timestamp, //必填,生成签名的时间戳 nonceStr: conf.nonceStr, //必填,生成签名的随机串 signature: conf.signature, //必填,签名 jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'previewImage', ] //必填,需要使用的JS接口列表,也就是配置你想使用的调用接口 }); // 微信分享 wx.ready(function() { //分享的图片 var imgUrl = "" //分享朋友 wx.onMenuShareAppMessage({ title: "标题", desc: "内容简介", link: "分享链接", imgUrl: imgUrl, success: function() { //分享成功之后执行的回调函数 }, cancel: function() { //取消分享之后执行的回调函数 } }); //分享朋友圈 wx.onMenuShareTimeline({ title: "标题", desc: "内容简介", link: "分享链接", imgUrl: imgUrl, success: function() { //分享成功之后执行的回调函数 }, cancel: function() { //取消分享之后执行的回调函数 } }); }); wx.error(function(conf) { console.log(conf); // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); };
后台部分的代码
public function getSignPackage() { if(IS_POST){ if(!I('post.url')) $this->ajaxReturn(array('status'=>0,'msg'=>'请输入当前的URL')); $jsapiTicket = $this->getJsApiTicket(); //这句代码微信SDK上面没有介绍,但是用来签证的url里面就&后面会自动带有&,所以这里用了php的字符串替换 $url = str_replace("&","&",I('post.url')); $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序
这里的时间还有随机字符串传给和前台的一样,还有url链接是由前台传给后台,在由后台通过这个url进行下面的编码
记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样,
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "jsapiTicket" =>$jsapiTicket, "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); $this->ajaxReturn($signPackage);
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
相关阅读:
前端入门之css3
axios怎样基于Promise的HTTP请求客户端
css的渐变颜色
热心网友 时间:2022-04-23 08:49
确认签名算法正确,可用 t=jsapisign 页面工具进行校验。也就是你自己后台生成签名要和微信校验算法生成的签名一致才可以(可能大小写不同)。注意:签名生成规则如下:参与签名的字段包括有效的 jsapi_ticket(获取方式详见微信 JSSDK 文档), noncestr (随机字符串,由开发者随机生成),timestamp (由开发者生成的当前时间戳), url(当前网页的URL,不包含#及其后面部分。注意:对于没有只有域名没有 path 的 URL ,浏览器会自动加上 / 作为 path,如打开 http://qq.com 则获取到的 URL 为 http://qq.com/)。特别注意:你在利用参数生成签名的时候,要对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串 string1。这里需要注意的是所有参数名均为小写字符。我的最开始的错误就是没有注意到生成签名的那几个参数要按照key=value的样式连接成一个字符串,然后在sha1加密生成。 /****Java写的参数拼接算法***/ String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket, "timestamp=" + timestamp, "noncestr=" + nonce, "url=" + jsurl };...