更新记录

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_tokenticket,并在数据库进行缓存,使用的时候返回加密的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-iduni-config-center,上传云函数

4.上传database

第二部微信公众号配置

公众号设置--功能设置页面,先设置好业务域名,JS接口安全域名,网页授权域名三个地方。 把公众号的appIdappSecret填在uni-config-center自己创建的H5weixin目录config.json配置中,并上传公共函数。 在开发--基本配置--IP白名单,设置白名单,用于获取access_tokenticket配置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中,目的是自动获取微信返回的参数codecode通过云函数获取登录所需的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.测试的时候,不能本地运行,需要打包上传后在微信开发者工具测试。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问