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

一、解决方案

先说结论再说过程:

(一)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。其中wx.signurl(),系本人增加。

二、问题现象

(一)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保存问题。

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

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

三、解决思路

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

1、试了很多网上的npmjs中的1.6.0版本,包括在head里直接引入。都报document not a function。说明这个版本存在bug。需改正。

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

四、实施步骤

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

你可能感兴趣的:(完美解决微信js-sdk在IOS系统报invalid signature的问题)