微信二次分享报错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 相关文章推荐
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
JavaScript实现表格快速变色效果代码
Aug 19 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
Sep 09 Javascript
AngularJS内建服务$location及其功能详解
Jul 01 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
整理一些最近经常遇到的前端面试题
Apr 25 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
npm的lock机制解析
Jun 20 Javascript
vue设置动态请求地址的例子
Nov 01 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执行速度全攻略(下)
2006/10/09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
php.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
理解PHP中的stdClass类
2014/04/18 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
Structs界面控制层技术
2013/10/11 面试题
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python