基于微信公众号开发的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实现微信红包算法及问题解决方法的使用技巧和注意事项,需要的朋友参考一下 专栏停更了很久,向大家说声抱歉。今天的主题是使用JavaScript模拟实现微信抢红包的算法。这个题目看起来很简单,不就是一个随机函数吗?我们一起实现看看。 我们假设有一个100元的红包,要发给10个人。为了保证公平,算法需要保证以下的
本文向大家介绍vue实现微信二次分享以及自定义分享的示例,包括了vue实现微信二次分享以及自定义分享的示例的使用技巧和注意事项,需要的朋友参考一下 微信二次分享/自定义分享 从App中使用App分享(一次分享) 使用微信导航栏的分享(二次分享) --已做处理 使用微信导航栏的分享(二次分享) --未做处理 如上图,如果不做相关处理,页面进行二次分享,用户看到的就是链接+空图,上面显示的文案(考拉阅
h5做微信登录的时候取到了code发请求获取openid,接口一直报code be used,后端那边日志说发了两次请求,但是在我的控制台只有一次,这是怎么回事。 ,
本文向大家介绍appium运行各种坑爹报错问题及解决方法【推荐】,包括了appium运行各种坑爹报错问题及解决方法【推荐】的使用技巧和注意事项,需要的朋友参考一下 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress 之前的会话没有
不太会使用 Env 工具的请先看一遍 《Env 用户手册》(不长的,看完费不了几分钟) 提示 Env 工具和 源码 所处的目录都不能有中文或空格请先检查!! code 是一个命令 点 ‘.’ 是一个参数表示当前目录,中间有一个空格。 romfs ramfs 文件系统中的文件名和c的变量的命名一样,只能由英文字母开头且仅包含数字和下划线。 修改 qemu.bat 里面的参数时,要注意那是一行参数中间
本文向大家介绍mysql 启动错误1067 问题及解决方法,包括了mysql 启动错误1067 问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 本文向码农们介绍mysql服务无法启动报错误1067解决方法。 试了谷歌到的几种方法,都没有解决,然后突然想起在启动apache的时候,iis的端口占用情况(因为我的apache也使用了80端口),所以 打开命令行 netstat -aon|fi