更新记录
1.3.3(2022-03-30)
去除依赖
1.3.2(2022-03-30)
完善文档
1.3.1(2022-03-30)
完善文档
查看更多平台兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | × | × |
Vue2 | Vue3 |
---|---|
√ | × |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.2.3 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
zetank-H5weixin
功能
1.基于uniapp的云开发,利用微信公众号的接口开发微信H5页面;该插件已集成好了微信公众号开发所需配置和方法,开箱即用,只需要配置好公众号的appid和appSecret;
2.该插件是依赖uni-id来存储用户数据和操作用户登录与注册,如果用户第一次登录,则在uni-id-users进行注册,并返回用户信息、openid等。
3.自动配置微信公众号js-SDK(官方文档),利用云函数在后端获取配置sdk所需的access_token
和ticket
,并在数据库进行缓存,使用的时候返回加密的signature
;只需调用方法即可自动配置,然后通过sdk实现微信的接口操作(所有接口)。
4.实现设置微信H5页面分享样式
5.实现微信公众号模板消息发送
第一步安装与配置
1.安装uni-id插件 如果已安装uni-id,忽略此步骤。配置见uni-id配置
2.下载插件,如果提示js错误:Unexpected character '' (1:0),需要更新HBuilderX正式版请使用3.2.3。
3.在公共函数uni-config-center
里面新增目录H5weixin
,新增文件config.json
,配置参数,同步公共函数,单独上传uni-config-center函数
{
"appId": "微信公众号appId",
"appSecret": "微信公众号appSecret",
"agent":"反向代理网址,例如wxh5.zetank.com,具体说明见下面第二部微信公众号配置"
}
3.云函数(H5weixin、zetank-user-center)依赖公共函数uni-id
和uni-config-center
,上传云函数
4.上传database
第二部微信公众号配置
在公众号设置--功能设置
页面,先设置好业务域名,JS接口安全域名,网页授权域名三个地方。
把公众号的appId
和appSecret
填在uni-config-center
自己创建的H5weixin
目录config.json
配置中,并上传公共函数。
在开发--基本配置--IP白名单
,设置白名单,用于获取access_token
和ticket
配置sdk(如果只调用微信登录,不调用sdk,可以不配置)。因为云函数的IP地址是变化的,所以获取ip目前采用反向代理,可以使用第三方的,也可以自己进行配置。
如果想要自己配置反向代理,手里也刚好有多余的服务器,可以自行百度进行配置,可参考公众号IP白名单配置。
如果不想自己配置反向代理,购买插件后可以添加微信获取免费的反向代理;
第三步插件使用
使用参考示例pages页
微信登录
1.页面引入js,这里需要用到条件编译引入,不然在小程序端会报错
// #ifdef H5
import wxH5 from "@/uni_modules/zetank-H5weixin/js_sdk/wxH5.js"
// #endif
2.调用wxH5LoginSep1方法,可以进行微信登录,目的是跳转到微信链接,获取微信用户的code
;
async login(){
let res =await wxH5.wxH5LoginSep1()
console.log(res);
},
3.把wxH5LoginSep2
方法放在页面onShow中,目的是自动获取微信返回的参数code
,code
通过云函数获取登录所需的openid
和用户信息;获取openid
和用户信息后可以自定义自己的登录注册方法。
async onShow() {
// #ifdef H5
if(wxH5.isWechat()){
let showloading = true //显示登陆中
let res = await wxH5.wxH5LoginSep2(showloading)
//这里写登录后方法
}
// #endif
}
完整示例,可见pages中的示例
页面分享样式
1.页面引入js,调用wxH5.isWechat方法判断是否是微信浏览器环境;然后设置标题、副标题、图片参数和页面链接,调用wxH5.shareSet
方法进行设置
async share(){
if(wxH5.isWechat()){
let imgurl = ''//图片链接
let title = '标题'
let desc = '副标题'
let url = window.location.href
await wxH5.shareSet(title,desc,imgurl,url)
}
},
发送模板信息
1.在微信公众号申请模板信息后,调用wxH5.notice
方法,需要传参:信息跳转链接、模板信息内容(参看微信模板)、模板id(公众号后台获取)、需要通知的所有openid(通过微信登录的用户)
async notice(){
// #ifdef H5
let url = window.location.href.split('#')[0]
let noticedata = {
}
let template_id = "CjyawW7siCW6MCy-bJ3wtcVss5ifYY_YaPJc3Kr-8z0"
let allopenid = ['odC556Cq2f7FR-_2EJZhA0XhG83Q']
let res = await wxH5.notice(allopenid,url,noticedata,template_id)
console.log(res);
if(res.result.success){
uni.showLoading({
title:"成功通知人数:"+res.result.num,
icon:'success',
duration: 2000
})
setTimeout(()=>{
uni.hideLoading()
},2000)
}
// #endif
}
微信扫一扫
async scanQRCode(){
let res = await wxH5.scanQRCode()
console.log(res);
},
隐藏菜单分享按钮
async hideMenuItems(){
let menuList= ["menuItem:share:appMessage","menuItem:share:timeline"]
let res = await wxH5.hideMenuItems(menuList)
},
查看用户是否订阅公众号
1.调用subscribe
方法,传入用户的openid
即可;需要拿到用户openid后执行。
async subscribe(){
let openid = uni.getStorageSync('openid')
if(openid){
// #ifdef H5
let res = await wxH5.subscribe(openid)
console.log(res);
// #endif
}else{
uni.showModal({
content:"请先登录"
})
}
}
参数名称 | 说明 |
---|---|
subscribe | 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。 |
subscribe_time | 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间 |
remark | 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注 |
groupid | 用户所在的分组ID(兼容旧的用户分组接口) |
subscribe_scene | 返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENE_PROFILE_LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_WECHAT_ADVERTISEMENT 微信广告,ADD_SCENE_REPRINT 他人转载 ,ADD_SCENE_LIVESTREAM 视频号直播,ADD_SCENE_CHANNELS 视频号 , ADD_SCENE_OTHERS 其他 |
其他接口自定义调用
可以自己调用微信公众号提供的接口(所有接口),调用其他接口需要先配置sdk
import wx from '@/uni_modules/zetank-H5weixin/js_sdk/jweixin-module/lib/index.js'
import wxH5 from "@/uni_modules/zetank-H5weixin/js_sdk/wxH5.js"
async getsdk(){
let jsApiList=[]/* 放入需要调用的接口 */
let config = await wxH5.getsdk(jsApiList)
wx.config(config);
wx.error(function(res) {
console.log('JS-SDK配置出问题了', res)
});
wx.ready(function() {
/* 执行接口 */
});
}
方法列表
wxH5
方法名称 | 说明 |
---|---|
isWechat | 判断是否在微信中打开网页,返回ture/false |
wxH5LoginSep1 | 用户微信授权登录,跳转授权页面,如果本地已经有了openid,则直接返回openid,避免多次授权登录 |
wxH5LoginSep2 | 主要在页面onshow调用,用于获取code传递给服务端获取openid和用户信息,并存储在本地,避免多次授权登录 |
getsdk | 获取sdk配置信息 |
shareSet | 设置链接分享样式 |
notice | 发送模板信息 |
scanQRCode | 微信扫一扫 |
hideMenuItems | 隐藏菜单分享按钮 |
subscribe | 获取用户订阅公众号情况 |
注意与问题
1.配置公众号JS接口安全域名,不要带http
2.运行的时候如果提示错误:Unexpected character '' (1:0),需要更新HBuilderX正式版请使用3.2.3
3.订阅号不支持,需要服务号;前期可以通过测试账号实现测试;
4.提示openid获取失败:如果公众号配置没问题,请检查登录前的页面链接参数是否携带了code,如果携带了code,将获取失败。
5.测试的时候,不能本地运行,需要打包上传后在微信开发者工具测试。