微信分享之SPA的坑
来源:互联网 发布:海森伯格矩阵图片 编辑:程序博客网 时间:2024/05/21 18:45
其实 一切尽在官方文档中……
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
下面是我前面一直报错的写法:(写在列表页中的)请求参数一直是当前页面的URL
this.$ajax.post('/room/loadWeixinSign', {url:location.href}, {baseURL:
this.$ajax.defaults.baseRenterURL}).then((share) => {
let _config = {
debug: false,
appId: share.data.content.appid, // 必填,公众号的唯一标识
timestamp: share.data.content.timestamp, // 必填,生成签名的时间戳
nonceStr: share.data.content.nonceStr, // 必填,生成签名的随机串
signature: share.data.content.signature, // 必填,签名
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
"onMenuShareTimeline", // 分享到朋友圈
"onMenuShareAppMessage" // 分享给朋友
]
}
wx.config(_config)
_this.setShareContent(res.data.body.content);
})
先描述一下我遇到的问题:
微信中点击A链接( https://renter-embed.mgzf.com/mogoroom-renterembed-h5/sign/Ra41wt/jz )进入A页面,A页面跳转至B页面
B页面( https://renter-embed.mgzf.com/mogoroom-renterembed-h5/houseList),
首次进入页面总是会报出无效签名,必现,列表页刷新一下,就会正常。(注:单页面应用,这个问题只发生在手机上,微信开发工具是正常的,不会报这个无效签名的错。这就很奇怪了……)
从结果看,在手机中,刷新之前与刷新之后某个参与生成签名的值发生了变化;而在开发工具中,这个值并没有改变。
而参与生成签名的值包括当前页面的URL,nonceStr,timestamp,排除法之后只可能是URL发生了变化。
然后就是猜测并验证了,我首先把请求参数换成{url:’https://renter-embed.mgzf.com/mogoroom-renterembed-h5/sign/Ra41wt/jz‘},结果却是正确的,刷新之后,会报签名无效。
原来,SPA中,微信只记录了一开始进应用的第一个链接,并用它去参与生成签名,而不是用当前的URL(这个解释了为什么使用location.href首次进入页面是报错的,而换成第一个URL却是对的);
而刷新一次,当前列表页面的链接发生了改变,变成了重定向之后的链接,结果就是对的了。
原谅我没看明白官方文档中的醒目说明!!!
知道原因之后,就开始处理啦,其实只需要改变请求参数的URL即可,在A页面,B页面的mounted里面加上
!window.initUrl && (window.initUrl = window.location.href) 即可,即 将当前URL挂载在全局变量中,啥意思想象大家都可以看得明白~
这样在请求接口时,就只需要 {url: window.initUrl} 就好,也不用做判断。
问题解决~
注:小白一枚,问题出现在工作项目中,有不对的地方,敬请指教,欢迎交流~
- 微信分享之SPA的坑
- 使用vue开发微信公众号下SPA站点的填坑之旅
- VUE开发SPA之较舒服的微信授权登录
- 开发单页应用(SPA)时候遇到的微信支付授权目录的坑
- 开发单页应用(SPA)时候遇到的微信支付授权目录的坑
- 开发单页应用(SPA)时候遇到的微信支付授权目录的坑
- 开发单页应用(SPA)时候遇到的微信支付授权目录的坑
- 填平友盟社会化分享之---微信分享的坑
- android分享之微信分享
- Android之微信分享
- ShareSDK微信分享时的坑
- Android 微信分享的几个坑
- 微信分享的各种坑!!!
- 记录-微信分享的一个坑
- vue2-微信分享踩的坑
- 微信分享遇到的坑
- Android 微信开发之分享收藏的实现
- 微信分享的相关技术分享
- 版本管理工具 svn
- [C/C++] 算法提高 不同单词个数统计
- libevent之事件的创立
- 原码反码补码例子
- bresenham算法
- 微信分享之SPA的坑
- jsp访问本地的图片-tomcat虚拟路径
- spring 自定义注解
- python小练习(一)
- JSTL
- 点评cat-client解析
- Git rebase 和git merge 使用技巧20171119
- 模拟实现strcpy ,strstr,strcat,strcmp,memcpy,memmove
- Netty学习笔记(二) Channel和ChannelFuture