微信二次分享报错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 相关文章推荐
DHTML 中的绝对定位
Nov 26 Javascript
jquery tools 系列 scrollable学习
Sep 06 Javascript
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
Nov 01 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
优雅的在React项目中使用Redux的方法
Nov 10 Javascript
js模拟实现烟花特效
Mar 10 Javascript
vue项目中自定义video视频控制条的实现代码
Apr 26 Javascript
vue-cli3 引入 font-awesome的操作
Aug 11 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+mysql一个名片库程序
2006/10/09 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
php新建文件的方法实例
2019/09/26 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
python基础 range的用法解析
2019/08/23 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
几个人围成一圈的问题
2013/09/26 面试题
大专生自我鉴定范文
2013/10/01 职场文书
编辑求职信样本
2013/12/16 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers