微信二次分享报错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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
Convert Seconds To Hours
Jun 16 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
Oct 16 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
js检测用户输入密码强度
Oct 22 Javascript
详细AngularJs4的图片剪裁组件的实例
Jul 12 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
vue仿ios列表左划删除
Sep 26 Javascript
uni-app 支持多端第三方地图定位的方法
Jan 03 Javascript
javascript实现倒计时效果
Feb 17 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
import的本质解析
2017/10/30 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python的argparse库使用详解
2018/10/09 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
PyTorch中的Variable变量详解
2020/01/07 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
管理心得体会
2013/12/28 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
生日宴会策划方案
2014/06/03 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
安全保证书格式
2015/02/28 职场文书
银行培训心得体会范文
2016/01/09 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Go 内联优化让程序员爱不释手
2022/06/21 Golang
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers