微信二次分享报错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压缩利器
Feb 20 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
浅谈checkbox的一些操作(实战经验)
Nov 20 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
浅谈javascript中基本包装类型
Jun 03 Javascript
js实现超酷的照片墙展示效果图附源码下载
Oct 08 Javascript
利用vueJs实现图片轮播实例代码
Jun 03 Javascript
node通过npm写一个cli命令行工具
Oct 12 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
Js利用正则表达式去除字符串的中括号
Nov 23 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 while循环得到循环次数
2013/10/26 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
php数组遍历类与用法示例
2019/05/24 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
简单谈谈Python中函数的可变参数
2016/09/02 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
django框架中间件原理与用法详解
2019/12/10 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python ssh 执行shell命令的示例
2020/09/29 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
结构和类有什么异同
2012/07/16 面试题
中专毕业个人的自荐信格式
2013/09/21 职场文书
土木工程应届生自荐信
2013/09/24 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
党员自我评价范文2015
2015/03/03 职场文书
北大自主招生自荐信
2015/03/04 职场文书
金砖之国观后感
2015/06/11 职场文书
python字符串常规操作大全
2021/05/02 Python