微信二次分享报错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 相关文章推荐
随窗体滑动的小插件sticky源码
Jun 21 Javascript
深入理解Javascript里的依赖注入
Mar 19 Javascript
javascript如何使用bind指定接收者
May 04 Javascript
jQuery层动画定位滑动效果的方法
Apr 30 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
Vue组件之单向数据流的解决方法
Nov 10 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
测试php函数的方法
2013/11/13 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
python中__slots__用法实例
2015/06/04 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python实现宿舍管理系统
2019/11/22 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
门卫人员岗位职责
2013/12/24 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
项目施工员岗位职责
2014/03/09 职场文书
采购意向书范本
2014/03/31 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
预备党员考察意见范文
2015/06/01 职场文书
PHP解决高并发问题
2021/04/01 PHP