微信二次分享报错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实现连续英文字符自动换行兼容ie6 ie7和firefox
Sep 06 Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
Sep 02 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 Javascript
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
介绍Python的@property装饰器的用法
2015/04/28 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
python实现网页自动签到功能
2019/01/21 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
岳父生日宴会答谢词
2014/01/13 职场文书
初三家长会邀请函
2014/01/18 职场文书
运动会100米解说词
2014/01/23 职场文书
新三好学生主要事迹
2014/01/23 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
十佳党员事迹材料
2014/08/28 职场文书
《灰雀》教学反思
2016/02/19 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle