微信二次分享报错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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
Jun 23 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
Nov 24 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
详解js的作用域、预解析机制
Feb 05 Javascript
微信小程序中使用echarts的实现方法
Apr 24 Javascript
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
JS实现可视化音频效果的实例代码
Jan 16 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
PHP解决中文乱码
2017/04/28 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
原生js实现随机点名
2020/07/05 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python入门篇之字典
2014/10/17 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python开启debug模式的方法
2019/06/27 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
如何解决python多种版本冲突问题
2020/10/13 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
如何利用find命令查找文件
2015/02/07 面试题
《争吵》教学反思
2014/02/15 职场文书
职务说明书范文
2014/05/07 职场文书
目标责任书格式
2014/07/28 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
2014年超市工作总结
2014/11/19 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis
MySQL 十大常用字符串函数详解
2021/06/30 MySQL