微信公众号js-sdk使用步骤总结
1. 域名绑定
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
- 可填写三个域名或路径(例:wx.qq.com或wx.qq.com/mp),需使用字母、数字及“-”的组合,不支持IP地址、端口号及短链域名。
- 填写的域名须通过ICP备案的验证。
- 将文件MP_verify_UhBvKrxosbLJmeos.txt(点击下载)上传至填写域名或路径指向的web服务器(或虚拟主机)的目录(若填写域名,将文件放置在域名根目录下,例如wx.qq.com/MP_verify_UhBvKrxosbLJmeos.txt;若填写路径,将文件放置在路径目录下,例如wx.qq.com/mp/MP_verify_UhBvKrxosbLJmeos.txt),并确保可以访问。
- 一个自然月内最多可修改并保存三次
2.引入文件
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
3.通过config接口注入权限验证配置
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,签名生成算法见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
4.通过ready接口处理成功验证
wx.ready(function(){
// 在这里就可以使用微信sdk提供的录音、拍照等功能
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
5.通过error接口处理失败验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
6.扩展signature签名的配置
想生成签名,必须要有jsapi_ticket,也就是想调用微信js接口,他就是门票,那么jsapi_ticket怎么来?可以用access_token获取,那access_token又是什么,是进行授权后接口调用的令牌,那access_token又怎么得来?
公众号可以使用AppID
和AppSecret
调用本接口来获取access_token
举个栗子:
比如你要坐飞机(使用微信jssdk),需要机票(jsapi_tiket),机票怎么来? 如果你想买机票必须要有身份证,身份证(access_token,)怎么来? 身份证是不是通过我们去公安局告诉公安局一些基本信息(AppID,AppSecret,类似于个人的基本信息)
-
所以第一步先获取appid和appsecret,在公众号号里可以直接看见
-
然后通过appid和appsecret获取access_token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
-
然后通过上个接口得到的access_token在获取jsapi_ticket
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=jsapi
-
最终得到jsapi_ticket
-
最终利用jsapi_ticket、noncestr、timestamp、url生成了 signature
最后代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button id="btn-record">录音</button>
<button id="btn-stop-record">停止录音</button>
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="./node_modules/js-sha1/build/sha1.min.js"></script>
<script>
var signature = res.data. signature ;
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: 'wx20397873b70ac874', // 必填,公众号的唯一标识
timestamp: option.timestamp, // 必填,生成签名的时间戳
nonceStr: option.noncestr, // 必填,生成签名的随机串
signature: signature,// 必填,签名,签名生成算法见附录1
jsApiList: ['checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'onMenuShareQZone',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onVoiceRecordEnd',
'playVoice',
'onVoicePlayEnd',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard']
});
wx.ready(function () {
//录音接口的使用
document.getElementById("btn-record").onclick = function () {
wx.startRecord();
}
document.getElementById("btn-stop-record").onclick = function () {
wx.stopRecord({
success: function (res) {
// res.localId 就是你刚才录音的标识
var localId = res.localId;
//停止录音之后,直接播放
wx.playVoice({
localId:localId // 需要播放的音频的本地ID
});
}
});
}
//设置分享给朋友的内容
wx.onMenuShareAppMessage({
title: '测试', // 分享标题
desc: '测试', // 分享描述
link: 'http://xxxxx', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'http://0.jpg', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
</script>
</body>
</html>