微信二次分享报错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 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
Apr 03 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
Jul 15 Javascript
js实现移动端图片滑块验证功能
Sep 29 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实现文件编码批量转换
2014/03/10 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHPMailer发送邮件
2016/12/28 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
浅析Prototype的模板类 Template
2011/12/07 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
Python实现获取某天是某个月中的第几周
2015/02/11 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL