微信二次分享报错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 相关文章推荐
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
May 21 Javascript
javascript中的一些注意事项 更新中
Dec 06 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
详解JavaScript中数组的相关知识
Jul 29 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP里的中文变量说明
2011/07/23 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
javascript smipleChart 简单图标类
2011/01/12 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
python环境下安装opencv库的方法
2020/03/05 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
祖国在我心中演讲稿600字
2014/05/04 职场文书
环境保护建议书
2014/08/26 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server