当前位置:首页 > 微信开发 > 公众号 > 完美解决微信js-sdk在IOS系统报invalid signature的问题

完美解决微信js-sdk在IOS系统报invalid signature的问题

DChen1年前 (2021-05-14)公众号8900

一、问题现象

(一)vue开发微信公众号单页应用。自定义图文消息分享好友、群、朋友圈。项目使用了三方封装的weixin-js-sdk。该工具基于微信js-jdk 1.4.0封装,npm安装。


  1. 安卓手机测试正常。

  2. 微信开发者工具正常。

  3. 苹果手机无法分享。

  4. wx.config开启debug模式。苹果手机显示invalid signature。

  5. 使用updateAppMessageShareData。显示offline verifying。


(二)本项目使用history,url没有#符号。 试遍网上主要方法,均无有效解决方案。原因很明确。苹果系统浏览器url保存问题。


本项目单页应用,打开即获取微信授权及用户信息。问题现象是,苹果手机url为带着微信返回code的地址。不符合安全以及业务使用需要。因此使用replace替换为业务地址。如

/?code=xxxx&state=123456

在显示时需要被改为

/?order=123456。

此时苹果手机无法使用正确的地址验证签名。尝试使用所有可能的url写死给config验证签名,均无效。


二、解决思路

(一)方案思路。两个方向,一是升级jdk1.4.0到1.6.0,用新的可能会好。二是找到正确的url,并进行签名验证。


  1. 试了很多网上的npmjs中的1.6.0版本,包括在head里直接引入<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>。都报document  not a function。说明这个版本存在bug。需改正。

  2. 根据print出的地址写死,仍然验证无效。说明验证前后有转码。需让jdk在验证前把地址返回。


三、解决方案

(一)npm i jweixin-1.6.0 。系本人优化封装。修正了微信js-sdk官方1.6.0的bug,并针对iOS系统url验证签名错误进行优化。


(二)在需要分享的页面引入。


import wx from 'jweixin-1.6.0'


正常情况,按官方标准编码即可。


(三)如果IOS系统的分享有问题(请自行编码判断苹果和安卓)。向后台请求的地址:


signLink = decodeURIComponent(wx.signurl())


signLink是wx.config 需要验证签名的url。


四、实施步骤

  1. 自微信官方获取SDK版本https://res.wx.qq.com/open/js/jweixin-1.6.0.js

  2. 测试并修正该版本的bug。

  3. 找到SDK中验证url参数,用signurl:function返回。

  4. 发布到github:https://github.com/luquan22/jweixin-js-sdk。具体改动见github的readme。

  5. 发布到npm。


————————————————

原文链接:https://blog.csdn.net/m0_47565444/article/details/105937191


取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

版权声明:本文由“憨小猪”发布,如需转载请注明出处。

本文链接:https://www.phper.red/post/82.html

标签: 微信jssdk
返回列表

没有更早的文章了...

没有最新的文章了...

相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。