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

完美解决微信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的问题)