文章目录
哈喽,大家好!我是「励志前端小黑哥」,我带着最新发布的文章又来了!
老规矩,小手动起来~点赞关注不迷路!
近两天在开发微信公众号的H5开发,这里简单的把流程整理一下,以及用到的相关工具包,供大家参考。
点赞收藏,以后开发微信公众号,参考我这篇文章就够了!
什么是微信网页JS-SDK
官方的解释:
微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
其实,说得直白一点,就是前端开发早期流行的混合开发Hybrid App
接口,是纯粹给前端开发调用的接口。
微信的JSSDK是微信网页
与微信客户端
的一个桥梁,通过它,我们可以调用微信客户端
的很多功能。
接入流程
步骤一:绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
备注:登录后可在“开发者中心”查看对应的接口权限。
官方就这么一句简单的文字描述,对于首次开发公众号的小伙伴,肯定是一脸懵逼的。
下面我这就把步骤拆解一下,配上图文,大家就一目了然了!
首先,登录公众管理平台,https://mp.weixin.qq.com/:
在左边菜单找到“公众号设置”,配置自己网页的安全域名:
图片上的地址是我们公司开发的开山斧问卷服务平台,需要改成你们自己的!
注意,配置的安全域名,腾讯会对你的域名进行验证,验证方法见图:
再次吐槽一下,此处的安全域名,官方也没有解释是用来干什么的,其实就是你前端界面访问地址所在的域名。
只有在此域名下的网页调用微信JSSDK的API,才会成功!
都看到这里,不要忘了点赞收藏哦~本篇篇幅较长,收藏起来慢慢看吧!
步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。
备注:支持使用 AMD/CMD 标准模块加载方法加载
引入JS文件这一步,官方也描述得比较敷衍,现在都是vue/react等框架开发了,文档还是停留在script引入的模式。
下面我们就来看看本人封装的一个加载JS文件的方法:
function remoteLoadScript(url) {
return new Promise((resolve) => {
const scriptElement = document.createElement('script')
scriptElement.src = url
scriptElement.onload = function () {
resolve(true)
}
scriptElement.onerror = function () {
resolve(false)
}
setTimeout(()=>{
resolve(false)
},5000)
document.body.appendChild(scriptElement)
})
}
这个函数返回一个bool
值,若JS文件在5秒内
加载完成,函数返回true
,反之则返回false
调用方式:
const loadResult = await remoteLoadScript('http://res.wx.qq.com/open/js/jweixin-1.6.0.js')
console.log(loadResult?'加载成功':'加载失败')
步骤三:通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
注意,注意,这一步的坑是最多的!
需要注意的点,下面我一一的列举出来:
注意1:wx.config
函数的参数是通过后台签名而来的,需要后端开发同事的支持。
官方对于这个签名算法的实现还是耗费了一些篇幅的,这里就贴个链接,让你们公司后端同事自己去看吧:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
后端同事看不懂?后端同事不配合?没事,你可以使用NodeJS,这里推荐使用官方的NodeJS代码示例,下载链接:https://www.weixinsxy.com/jssdk/sample.zip
注意2:invalid signature签名错误
这个问题,如果你正在开发公众号,你大概率是会遇到的,官方也给出了很多可能引发报错的点,真的很坑:
- 确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign页面工具进行校验。
- 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
- 确认url是页面完整的url(请在当前页面alert(location.href.split(‘#’)[0])确认),包括
http(s)://
部分,以及’?‘后面的GET参数部分,但不包括’#'hash后面的部分。 - 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
- 确保一定缓存access_token和jsapi_ticket。
- 确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去’#‘hash部分的链接(可用location.href.split(’#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。
注意3:本地localhost没办法调试
细心的小伙伴估计已经注意到了,根据腾讯的这套规则,是没办法在本地进行调试的,必须使用生产的安全域名地址
。
常规的做法是配两个安全域名,一个测试、一个生产,但还是绕不过本地调试的问题。
这就导致开发的时候没办法达到优雅的开发流程:开发–>热更新–>F12调试。
只能做到:开发–>打包–>发版到测试–>F12调试,这中间的打包、发版过程,非常的耗时间。
如果你有更好的方法,欢迎评论区留言讨论!
步骤四:通过ready接口处理成功验证
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
这一步没什么解释的,不过封装一下Promise
会更加优雅:
function wxReady(){
return new Promise((resolve) => {
wx.ready(function(){
resolve(true)
});
setTimeout(()=>{
resolve(false)
},5000)
})
}
步骤五:通过error接口处理失败验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
这一步也没什么解释的,报错的时候你可以看看报错信息。
至此,整个初始流程就完成了。
总结
经过上面的五个步骤,你就可以愉快的的使用微信提供的jssdk
接口了。
具体有哪些接口,以及你对哪些接口有权限,就请移步微信的官方文档了:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#63
励志前端小黑哥,全网唯一账号!
关注我,带你了解更多前端知识!