最近做公众号网页开发,使用微信 jssdk 页面签名时 IOS 中一直报错,这才刚开始就被这只拦路虎拦住了,报错如下:
然而 Android 和开发者工具中好得很,没有任何问题:
既然提示 签名非法 ,那就是签名有问题咯,但是同样的接口,为什么Android没问题?是真是假还是用官方的签名校验工具验证下:
生成的签名完全没有问题,这就奇怪了,按照网上说的 url 改成如下方式也不行:
url = window.location.href.split('#')[0]
突然看到网上有人说是因为 SPA 的原因,经过几番测试,问题锁定在了 SPA 。先来解释下为什么会这样,我们使用 Vue Router 切换页面时,底层使用的是 pushState 技术,这是 H5 的一个新特性,虽然表面上看页面的 path 变了,内容也换了,但是页面是没有刷新的。
现在知道问题出在哪里,再来实际确认一下。首先进入项目的首页,地址是 https://www.abc.com/weixin/quan?rr=234wfwf ,然后点击进入我们要分享的页面,这时候会提示 invalid signature ,这时jssdk是配置失败的,分享出去的就是原始的页面链接,然而问题出现了:
分享后的链接仍然是首页进入的链接,这是微信的BUG啊,原来在微信的网页中不支持 pushState ,这就导致我们在jssdk从配置时传入的 url ( window.location.href 得到)和微信识别到的不一样,这时候在分享的页面刷新一下,配置就会正常。
后面再看官方文档时也提到了这一点:
然而我的Android没这个问题,iOS反而出现了这个问题(IOS版本13.3.1,微信版本7.0.9,jssdk 1.6)
如何解决
在跳转到要分享的页面时,不用 pushState ,在 Vue router 中就是不用 push 方式跳转,方式如下:
window.location.href = 要跳转的链接 // _this.$router.push({ // … // })
既然 SPA 在微信中只认第一个页面的 path ,那我们就在第一次进入页面时记录下 path ,其他页面用这个 path 。我们在 App.vue 或者 main.js 中记录下这个 path :
window.sessionStorage.setItem('firstEntryUrl', window.location.href)
然后在需要分享的页面,使用这个 path :
let url = window.location.href.split('#')[0] if (utils.isIOS() && window.sessionStorage.getItem('firstEntryUrl')) { url = window.sessionStorage.getItem('firstEntryUrl').split('#')[0] }
经测试,上述两种方法都能完美解决。
到此这篇关于微信jssdk踩坑之签名错误invalid signature的文章就介绍到这了,更多相关微信jssdk 签名错误 内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍微信小程序 slot踩坑的解决,包括了微信小程序 slot踩坑的解决的使用技巧和注意事项,需要的朋友参考一下 今天在使用微信小程序 component 里的 slot 时发现,当只用一个 slot 并且将 slot 命名后,页面中调用这个 slot 并不会加载进来。 研究尝试后发现,如果想要使用命名的方式调用单个 slot ,也需要像调用多个 slot 的方式 在 component
本文向大家介绍java学习之JasperReport踩坑,包括了java学习之JasperReport踩坑的使用技巧和注意事项,需要的朋友参考一下 下面进入正题,来介绍下今天的猪脚JasperReport或者叫它ireport亦或jasperstudio,当然后面两个是它的可视化工具。 JasperReport是个什么东西? 这货其实在国内用户也不少,是个国外的产品,而且可以说在JAVA报表领域应
本文向大家介绍微信开发之微信jssdk录音功能开发示例,包括了微信开发之微信jssdk录音功能开发示例的使用技巧和注意事项,需要的朋友参考一下 项目需求简单描述 用户长按录音,松手后直接结束录音,结束录音后,用户可以选择重新录音、播放刚才的录音,上传录音(这里的上传录音指上传到自己服务器,上传步骤是,前端调用wx.uploadVoice,后台再到微信服务器下载音频文件,上传到自己的服务器)。注意,
本文向大家介绍微信小程序组件生命周期的踩坑记录,包括了微信小程序组件生命周期的踩坑记录的使用技巧和注意事项,需要的朋友参考一下 组件生命周期,通常是我们业务逻辑开始的地方。 如果业务场景比较复杂,组件生命周期有不符合预期的表现时, 可能会导致一些诡异的业务bug,它们极难复现和修复。 组件 attached 生命周期执行次数 按照通常的理解,除moved/show/hide等生命周期可能多次执行外
本文向大家介绍ThinkPHP框架下微信支付功能总结踩坑笔记,包括了ThinkPHP框架下微信支付功能总结踩坑笔记的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP框架下微信支付功能总结。分享给大家供大家参考,具体如下: 摘要 此文主要为个人解决 ThinkPHP3.2.3 下微信支付所遇到的一些坑的解决方案,仅供参考 详情请参考 原文 : 微信公众平台开发教程之ThinkP
JavaScript-StepPitGuide《JavaScript踩坑指南》,那些说前端简单的什么的最变态了,可以说 JavaScript 是世界上最复杂的语言。