微信二次分享报错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 相关文章推荐
参考:关于Javascript中实现暂停的几篇文章
Mar 04 Javascript
犀利的js 函数集合
Jun 11 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
js导航栏单击事件背景变换示例代码
Jan 13 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
Mar 07 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
Aug 08 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
Apr 12 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 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_imagick实现复古效果的方法
2016/10/18 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
YII框架关联查询操作示例
2019/04/29 PHP
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
基于Vue制作组织架构树组件
2017/12/06 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
python实现小球弹跳效果
2019/05/10 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
python烟花效果的代码实例
2020/02/25 Python
python实现飞船大战
2020/04/24 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
.NET remoting中对象激活的两种方式
2015/06/08 面试题
关于Java finally的面试题
2016/04/27 面试题
四风存在的原因分析
2014/02/11 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
汽车促销活动方案
2014/03/31 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
导游词之唐山景点
2019/12/18 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python