微信二次分享报错invalid signature问题及解决方法


Posted in Javascript onApril 01, 2019

基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享。问题出在用户B收到的分享链接与用户A打开的链接不同

A用户的链接为

http://test.com/test.html

B用户收到的连接

http://test.com/test.html&from=singlemessage

from=singlemessage是微信客户端为了区分分享来源再链接后自动添加的标记,再次分享时,需要在js代码中对自动获取的连接进行encodeURIComponent处理,后台再对收到的url进行urldecode处理。

js与php示例代码如下:

注意ajax,用的post,用get据说不用转义(get方式本人未做测试)

js代码

function share(){
  var nowurl     = window.location.href;
  var nowurlo   = nowurl.split('&')[0];
  $.ajax({
    type     : "post",
    url     : "***********************", //后端接口
    dataType   : "json",
    data     : { 'url': encodeURIComponent(nowurl) }, // 注意此处对nowurl进行encode;
    success   : function (data) {
      wx.config({
            debug    : false,        //调试模式
            appId    : data.appId,      //公众号appid
            timestamp  : data.timestamp,    //时间戳
            nonceStr   : data.noncestr,    //生成签名的随机串
            signature  : data.signature,    //签名
            jsApiList  : [
              'updateAppMessageShareData',
              'updateTimelineShareData',
              'onMenuShareAppMessage',
              'onMenuShareTimeline',
              'chooseWXPay',
              'showOptionMenu',
              "hideMenuItems",
              "showMenuItems",
              "onMenuShareTimeline",
              'onMenuShareAppMessage',
          ] // 必填,需要使用的JS接口列表
      });
      wx.ready(function () {  //需在用户可能点击分享按钮前就先调用
        wx.updateAppMessageShareData({ 
          title  : '', // 分享标题
          desc   : '', // 分享描述
          link   : nowurlo, // 自动获取(上面js代码中)
          imgUrl  : '', // 分享图标
          success : function () {
          }
        });
        wx.updateTimelineShareData({ 
          title   : '', // 分享标题
          link   : nowurlo, 自动获取(上面js代码中)
          imgUrl  : '', // 分享图标
          success  : function () {
          },
        });
      });
      
    }
  });
}

php代码

public function generateSignature(){
    $timestamp           = time();
    $jsapiTicket          = ;//此处获取jsapi_ticket
    $noncestr           = md5(uniqid(microtime(true),true));//我用的noncestr
    $url              = urldecode(I('post.url'));
    $signature           = sha1('jsapi_ticket=' . $jsapiTicket . '&noncestr=' . $noncestr . '×tamp=' . $timestamp . '&url=' . $url);
    $shareConfig['appId']     = '';//此处为appId
    $shareConfig['timestamp']   = $timestamp;
    $shareConfig['noncestr']    = $noncestr;
    $shareConfig['signature']   = $signature;
    $shareConfig['url']      = $url;
    echo json_encode($shareConfig);
  }

总结

以上所述是小编给大家介绍的微信二次分享报错invalid signature问题及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
关于文本限制字数的js代码
Apr 02 Javascript
Javascript中获取出错代码所在文件及行数的代码
Sep 23 Javascript
JS面向对象编程浅析
Aug 28 Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 Javascript
Javascript保存网页为图片借助于html2canvas库实现
Sep 05 Javascript
javascript arguments使用示例
Dec 16 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
jQuery中removeData()方法用法实例
Dec 27 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
js 博客内容进度插件详解
Feb 19 Javascript
react-native之ART绘图方法详解
Aug 08 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
JS中的防抖与节流及作用详解
Apr 01 #Javascript
微信小程序 slot踩坑的解决
Apr 01 #Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 #Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 #Javascript
详解JavaScript中的函数、对象
Apr 01 #Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
Apr 01 #Javascript
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 #Javascript
You might like
PHP 高手之路(二)
2006/10/09 PHP
PHP操作数组相关函数
2011/02/03 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
js实现星星打分效果
2020/07/05 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
儿童python练习实例
2018/05/27 Python
python中的json总结
2018/10/11 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
暑假实习求职信范文
2013/09/22 职场文书
招商经理岗位职责
2013/11/16 职场文书
七年级地理教学反思
2014/01/26 职场文书
党员承诺书范文
2014/05/19 职场文书
工会趣味活动方案
2014/08/18 职场文书
六查六看剖析材料
2014/10/06 职场文书
工作失职检讨书500字
2014/10/17 职场文书
开学典礼致辞
2015/07/29 职场文书