行业动态
小程序webview(H5)调用JSSDK功能指北
2024-06-04

最核心的一个概念:

小程序的webview(H5页面)中调用jssdk中的功能(比如获取位置信息),需要有一个和小程序申请主体一致的公众号账号,在公众号里去配置相关的jssdk信息.

1 小程序账号

因为webview不支持个人类型,所以需要申请一个企业法人及个体工商户类型的小程序账号

2 公众号账号

要求小程序和公众号的账号对应的主体信息必须一致,有两种途径达到此目的:

先申请公众号账号,然后通过公众号的快速生成小程序功能,生成步骤1的小程序账号,这样这两个自然满足同主体资格

登录微信公众号平台,点击小程序管理-添加-快速注册并认证小程序:

用和申请小程序账号完全一致的主体信息去申请公众号(主体类型,主体名称,主体证件号),也能保证两个账号的主体资格一致(目前没有小程序快速生成公众号账号的功能..)

3 域名绑定

这里需要两个账号都配置一下:

业务域名

首先webview指向一个外部网页链接(我们的H5页面)

<web-view src="https://abc.xxx.com.cn/cc/index.html"></web-view>

这个地址要满足:

已经通过ICP备案域名https协议不支持自定义端口不支持ip地址不支持短链域名

那么首先要在小程序中的开发-开发设置的业务域名中,将https://abc.xxx.com.cn配置进去:

JS接口安全域名

在上述h5页面中,因为要调用jssdk的js文件:

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

因此要在公众号设置”的“功能设置”里填写“JS接口安全域名”

注意:以上两个配置地址时,都需要将配置时提供的一个文本文件按照要求上传到H5页面所在服务器并确保能被访问,用于腾讯验证服务器,否则是无法提交相关信息的

4 应用

jssdk提供了很多功能,但是webview中,只支持部分接口,自行查看web-view,这里以获取位置信息为例:

通过config接口注入权限验证配置

所有需要使用JSSDK的页面必须先注入配置信息,否则将无法调用:

wx.config({ appId: , // 必填,公众号的appid,注意不是小程序的appid timestamp: , // 必填,生成签名的时间戳 nonceStr: , // 必填,生成签名的随机串 signature: ,// 必填,签名 debug: true, // 选填,开启调试模式,调用的所有api的返回值会在客户端alert出来。 jsApiList: [getLocation] // 必填,需要使用的JS接口列表,这里为获取位置信息 });

以上参数除了最后两个,建议在后台服务中存储和计算,具体需参考jssdk,主要思路:

利用公众号的appidsecret去获取access_token

利用access_token去获取ticket

利用ticket和自行生成的(timestamp,nonceStr,当前页面的地址)计算出最终的签名

执行getLocation

以上步骤执行成功后,方可执行wx.getLocation:

var success=true // 之所以这里有个success变量,是因为发现wx.error触发也会调用wx.ready(如果有个wx.success就好了) //但其实这并不完美,因为还发现有时候wx.ready先执行,然后触发了wx.error ........ wx.ready(function(){ if(success){ wx.getLocation({ type: wgs84, success(res) { // res为坐标位置信息 }, fail(e) { // 获取失败 } }) } // config信息验证后会执行ready方法 }); wx.error(function(res){ success=false // config信息验证失败会执行error函数 });

吐槽:

wx.config有时候成功,有时候说签名失败

wx.ready代表配置验证完毕了,不代表验证成功了,那他的意义在于什么

reference:

jssdk:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

web-view:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html


1063568276