Vue怒踩微信JS-SDK中配置的坑 - 签名错误

前言

每天领外卖打车红包等

这几天公司需要做微信端h5项目,需要用到微信扫一扫功能,就需要涉及到配置微信JS-SDK的问题,怎么配置怎么生成签名这边就不说了官方文档(概述 | 微信开放文档)都说的比较详细,按照官方使用接口签名校验工具(微信 JS 接口签名校验工具)一步步检查下来发现并没什么错误,结果还是出现了签名错误,让人蛋疼,经过一段时间摸索才发现了问题所在,话不多说看代码

wx.config({
              debug: false, 
              appId: appId,
              timestamp: timestamp, 
              nonceStr: noncestr, 
              signature: signature,
              jsApiList: ['scanQRCode']
});

上面代码主要是配置JS-SDK的代码文档都有说,下面介绍这些参数的功能,和容易引起出错的注意事项

1、debug : 为true开启调试模式,微信每一步执行的回调信息会自动alert出来,方便调试

2、appId : 这个没啥好说的微信的appId,不要和其他参数弄混就好,开发者工具可以查

3、timestamp : 时间戳,和生成签名时候拼接的时间戳一样

//js获取当前时间戳
new Date().getTime();

4、nonceStr : 随机的字符串,这个倒是比较无所谓可以直接copy官网的Wm3WZYTPz0wzccnW,和时间戳一样要和生成签名时候拼接的一样,而且在提交时候nonceStr变量名S要大写

5、(重点,下面会详细讲)signature : 签名, 由后台返回的jsapi_ticket、刚才的随机字符串noncestr、刚才的时间戳timestamp、以及当前页面的url拼接之后通过SHA1方式加密(js的SHA1加密网上一搜很多)

6、jsApiList : 要调用的SDK方法,官网可以查,这里用的是扫码功能

jsApiList: ['scanQRCode']

上面说的签名是最容易出错的地方,大部分出错的地方在拼接的url上,不要误解成回调地址,这边填写的是当前页面的地址这里分为Android和IOS的url规则,附上js代码

//Android的url
let url = location.href;

//IOS的url(IOS比较坑需要去掉锚点)
let url = location.href.replace(location.hash, '');

### 如何在 UniApp 中集成配置微信 JS-SDK 为了在 UniApp 项目中使用微信 JS-SDK 获取用户定位等功能,需先完成 SDK 的安装与基本配置。这步骤涉及引入必要的 JavaScript 文件以及设置应用 ID 和签名验证等操作[^1]。 ```javascript // main.js 或者 app.vue 中全局引入 wx sdk import wepy from 'wepy'; import WXAPI from './utils/wxapi'; // 自定义封装的wx api工具类 wepy.$WXAPI = WXAPI; ``` #### 判断当前环境是否为微信浏览器 考虑到微信 JS-SDK 功能仅能在微信内置浏览器内正常工作,在实际开发过程中应加入检测逻辑来确认运行环境: ```javascript function isWeChat() { const ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) === "micromessenger") { return true; } else { return false; } } if (!isWeChat()) { console.log('非微信环境'); } else { console.log('微信环境'); } ``` #### 初始化 JSSDK 并获取权限列表 当确认处于微信环境中后,则可通过发起 HTTP 请求向服务器端申请所需的接口权限票据(即 `jsapi_ticket`),随后利用该票据生成用于前端调用 API 所必需的安全参数集合,包括但不限于时间戳、随机字符串及签名算法计算得出的结果。这些准备工作完成后即可通过如下方式加载并启用所需的功能模块[^4]。 ```javascript async function initJssdkShare(url) { try { let res = await this.$http.get('/wechat/jssdk', { url }); if (res.code !== 0) throw new Error(res.msg); wx.config({ debug: false, // 开启调试模式, appId: res.data.appId, // 必填,公众号的唯标识 timestamp: res.data.timestamp, // 必填,生成签名的时间戳 nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 signature: res.data.signature,// 必填,签名jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表 }); wx.ready(function () { // config信息验证成功后会执行ready方法 console.log('config success'); // 使用接口 wx.getLocation({ type: 'gcj02', success: function (res) { alert(JSON.stringify(res)); }, cancel: function (res) { alert('用户拒绝授权获取地理位置'); } }) }); wx.error(function (res) { // config信息验证失败会执行error函数 console.warn(`config error:${JSON.stringify(res)}`); }); } catch (err) { console.error(err.message || err); } } ``` 以上代码展示了如何在个具体的页面组件里实现对微信位置服务的支持。需要注意的是,这里假设已经存在了个可以返回正确配置项的服务端接口 `/wechat/jssdk`,并且客户端能够顺利访问此接口获得合法有效的响应数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhzzcc_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值