宝哥软件园

VUE解决微信签名和SPA微信无效签名问题(完善处理)

编辑:宝哥软件园 来源:互联网 时间:2021-08-26

前端菜鸟,因为项目需要对接微信的jssdk,对接需要签名认证,但是安卓和IOS都有自己的坑。本文只讨论签名和一个共享坑。希望大家都能有所收获,解决问题。如果无法解决,请在评论区留言。本文综合调试坑需求前的所有答案:使用微信功能。

原因:

1.该项目基于微信上的网络应用vue

2.要用上传功能(不同系统的兼容性真的是很多bug,最后只能用微信解决)、支付功能、定位.

3.签名总是有错误和问题,所以后面的函数不能被调用(偶尔)

签名

1.有关流程的详细信息,请参见文档。反正能力有限,看不出什么名堂。总结一个句子,你应该用第一个签名

2.打开填坑之路。因为微信的使用会区分IOS和安卓系列,不同的系列会有不同的问题

(公司项目第一版给了微信一个大坑,这次重构要特别注意这一点)

安利可以检测微信下的内核:窗口。__wxjs_is_wkwebview(是否为webview内核),如果是,则变为true

因为SPA应用会出现一些问题,所以路由模式是历史模式(不带#)。由于签名授权是在页面每次进入路由后获得的,所以该方法一般写在路由的模块下

router.afterEach每个((to,From)={//shou当当福利//窗口。_ _ wxjs _ is _ wkwebview//IOS设备如果为真/Android设备如果为假(窗口。_ _ wxjs _ is _ wkwebview){//Iosif(window . entryll==' ' | | window . entryll==undefined){ var URL=` $ { front _ base } $ { to。full path } ` window . entryrl=URL//删除以下参数} Getwxauth (to。fullpath,' IOs ')} else {//androidsettimeout(function(){ getwxauth(to。fullpath,' Android')},500);} })window . entryrol这到底是什么?这是一个自定义的全局属性,在IOS进入页面时第一次存储。如果IOS签名的路径不是第一次进入页面,肯定会失败,所以这个路由应该是第一次存储。为什么要写在router.afterEach每一个,因为页面进入后再申请签字,如果是before每一个,会导致页面仍然是上一页的时候申请签字,但是到达新页面的时候没有登记,或者因为签字路径不同,导致签字无效。为什么在安卓运行的时候需要增加一个延迟,因为安卓系统中有一些情况,就是即使签名成功,它仍然不会调用函数。这似乎是一个相对安全的解决方案。看完路由模式,来逻辑部看看怎么处理

一些学生想知道为什么使用这个encodeURIComponent。其实很简单,因为我们在微信上分享的时候,会自动给我们带来参数(记得告诉我们的后端伙伴要decodeURIComponent),只要我们带来参数就记得转码!

对于IOS系统,将自动添加以下参数:

朋友圈from=timelineisappinstalled=0微信群from=group messageisappinstalled=0好友分享from=singletmessageisaappinstalled=0对于安卓系统,将自动添加以下参数:

朋友圈from=时间轴微信群from=groupmessage好友分享from=singlemessage然后直接去请求签名。写作方法没有深入研究。get微信是打包的axios,只为统一管理而写。每个人都可以写一个正常的请求axios ('xxxx.com/get-wx ',obj)。然后(),也有同样的效果。

到了这一步,基本上是成功的请求签名了,但也有同学怀疑,IOS会不会是每次分享都第一个进入的路由。我的回答是肯定的(需要一点处理)

再次关注这个环节。您需要在每次共享时记录当前路线。如果直接在IOS上读取location.href,将是第一次进入页面。安卓没有问题,所以我用我统一记录的这个参数。这个参数可以直接在方法中传递,路由到afterEach的. fullpage,然后添加自己的域名。最后,我想写几句。希望大家能顺便解决BUG,帮助大家。如果遇到其他问题,欢迎在评论区留言。有时间的话会及时和大家沟通讨论!也希望大家多多支持我们。

更多资讯
游戏推荐
更多+