微信 js-sdk 开发踩坑之旅

2,382 阅读4分钟

一、概述

微信JS-SDK是 微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。

通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

二、公众号后台配置

打开微信公众平台官网

image.png

从该页获取 AppID 和 AppSecret

image.png

AppID 前端需要

AppID 和 AppSecret 后端需要

tips:

  • 如果账号主体是服务号,该信息也同样适用!

  • 公众号后台需要添加web开发者权限!

三、JSSDK使用步骤

步骤一:绑定域名

image.png

步骤二:引入JS文件

image.png

步骤三:通过config接口注入权限验证配置

image.png

四、签名算法

1、获取 access_token

参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):developers.weixin.qq.com/doc/offiacc…

image.png

需要服务端处理,前端处理测试环境会跨域。

2、获取 jsapi_ticket

生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):

image.png

3、获取签名

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。即signature=sha1(string1)。 示例:

noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://mp.weixin.qq.com?params=value

步骤1:对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

步骤2:对string1进行sha1签名,得到signature:

0f9de62fce790f9a083d5c99e95740ceb90c27ed

注意事项

  • 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

  • 签名用的url必须是调用JS接口页面的完整URL。

  • 出于安全考虑,开发者必须在服务器端实现签名的逻辑。

如出现invalid signature 等错误详见附录5常见错误及解决办法。

image.png

image.png

微信 JS 接口签名校验工具

image.png

image.png

该项目中signature不需要传,纳米盒封装的js库已做了相关处理。

五、开发调试

使用web开发者工具,公众号网页进行调试。

image.png

配置成功的样例:

image.png

注意事项:

1、不支持127.0.0.1 或 localhost,只支持https协议,需要部署至测试环境才可以录音

2、参考纳米盒:

m.namibox.com/app-all-lib…

3、wxRecordServerProxyUrl 为服务端302跳转接口的路径

image.png

4、media_id 交换代码

image.png

5、获取临时素材

image.png

image.png

服务端代码:

image.png

6、真机调试

m.namibox.com/assets/mini…

m.namibox.com/assets/mini…

image.png

支持在真机模式下复制代码,方便排查问题。

六、整体流程

  • 点击开始录音--->音频上传到微信服务器,此时资源就在微信服务器了(前端无需任何操作)。

  • 点击停止录音--->客户端网页js执行post,提交数据到先声服务器(前端无需任何操作)。

  • 先声服务器解析post数据,拿到 wxRecordServerProxyUrl 的值,然后通过这个url去微信服务器下载录音资源,录音资源保存到先声服务器,先声返回评测数据给客户端网页。

image.png

image.png

(完)