微信 JSSDK (JavaScript Software Development Kit) 为开发者提供了一系列 API,让网页能够在微信浏览器内访问设备的功能,例如拍照、录音、定位、分享等,增强用户体验。
主要内容(分类):
- 基础接口: 判断当前客户端版本、获取网络状态等。
- 界面操作接口: 关闭当前网页、隐藏/显示右上角菜单、显示底部菜单栏等。
- 多媒体接口: 拍照或从手机相册中选图、预览图片、录音、播放/暂停音频等。
- 位置接口: 获取地理位置、查看位置。
- 设备信息接口: 获取网络类型、获取系统信息。
- 分享接口: 分享到朋友圈、分享给朋友、分享到 QQ 和 QQ 空间。
- 微信支付接口: 调起微信支付。
- 扫一扫接口: 调起微信扫一扫。
- 卡券接口: 添加卡券、查看卡券等。
- 智能接口: 语音识别、图像识别等。
接入步骤(前端开发):
-
绑定域名: 在微信公众平台后台的“公众号设置” -> “功能设置” -> “JS 接口安全域名”中配置你的网页域名。注意:必须是备案过的域名,且不支持 IP 地址或 localhost。
-
引入 JS 文件: 在你的网页 HTML 文件中引入微信 JSSDK 文件:
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
(版本号可能更新,请以官方文档为准)
- 通过 config 接口注入权限验证配置: 这是最重要的一步,需要调用
wx.config
方法。
wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在传入参数的函数内打印一下传入的参数。appId: '你的AppId', // 必填,公众号的唯一标识timestamp: '时间戳', // 必填,生成签名的时间戳nonceStr: '随机字符串', // 必填,生成签名的随机串signature: '签名', // 必填,签名,见附录1jsApiList: ['需要使用的JS接口列表'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
获取签名 signature
的步骤:
a. 获取 access_token: 通过公众号的 appid 和 appsecret 获取 access_token。
b. 获取 jsapi_ticket: 使用 access_token 获取 jsapi_ticket。
c. 生成签名: 使用 jsapi_ticket、nonceStr(随机字符串)、timestamp(时间戳)、url(当前网页的URL,不包含#及其后面部分)四个参数进行 SHA1 加密,得到签名。
示例代码 (Node.js 后端生成签名):
const crypto = require('crypto');// ... (获取 access_token 和 jsapi_ticket 的代码) ...function createSignature(jsapi_ticket, noncestr, timestamp, url) {const str = `jsapi_ticket=${jsapi_ticket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}`;const hash = crypto.createHash('sha1').update(str).digest('hex');return hash;
}// ... (调用 createSignature 函数生成签名) ...
- 处理 config 接口注入权限验证的回调结果: 通过
wx.ready
和wx.error
方法处理 config 接口的回调结果。
wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。// 例如:wx.getLocation({type: 'wgs84', // 默认为wgs84的gps坐标,如果需要gcj02的火星坐标,可以传入'gcj02'success: function (res) {// ... 处理获取位置成功的结果 ...}});
});wx.error(function(res){// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式