首页 > 其他分享 >支付刷脸模式

支付刷脸模式

时间:2024-12-25 09:23:23浏览次数:4  
标签:userId 绑定 联系人 模式 管理员 支付 微信 id

校园场景支付刷脸模式

对于部分存量的支付刷脸设备,我们额外支持通过微信支付人脸识别的用户身份来发起通话。

支付刷脸设备的通话存在以下限制:

  • 只支持微信支付刷脸设备使用,具体的开通方式请参考微信支付的相关文档;
  • 只支持安卓设备,WMPF <= 2.0 版本;
  • 只支持设备发起呼叫,不支持手机微信呼叫设备。

1. 发起通话

支付刷脸设备也是通过 initByCaller 接口发起通话,但是在参数上有一些区别。支付刷脸设备请使用下列 businessType:

businessType 业务类型 caller.id listener.id voipToken 最低版本
0 刷脸模式(时长计费) 微信支付刷脸返回的 user_id 微信用户 openId 微信支付刷脸返回的 voip_token
3 刷脸模式(license 计费) 同上 同上 同上 2.3.8
  • 使用前,需要在小程序中提前通过 wx.authorize 让 openId 对应的用户授权 scope.voip,否则会返回 errCode: 8,具体流程请参见第 2 节;
  • listener 必须为 caller 联系人。否则会返回 errCode: 9

2. 联系人管理

2.1 联系人绑定

校园场景下,开发者需要接入插件「联系人绑定关系」功能,只有在家长完成关系绑定操作后,孩子才可以给家长拨打音视频电话。

联系人绑定是 userId(孩子)和 openId(家长)的映射关系,开发者还能够通过相关接口实现联系人管理功能。

管理员绑定

第一个联系人为管理员,需要 wx.authorize 授权 voip.scope,再调用插件接口 wmpfVoip.bindVoipAdminContact 完成绑定。

// 绑定成为管理员
try {
  await wx.authorize({
    scope: 'scope.voip',
  })
  const res = await wmpfVoip.bindVoipAdminContact({
    userId: 'xxxxxx', // 传入微信支付刷脸返回的 user_id
  })
  console.log(`bindVoipAdminContact`, res)
} catch (error) {
  console.error('authorize scope voip', error)
  wx.showToast({
    title: '请前往设置页授权通话提醒',
    icon: 'none',
  })
}

其他联系人绑定

其他联系人由管理员分享页面进行绑定。即管理员在小程序中点击「分享」按钮, 并通过 wmpfVoip.getBindContactPath 获取插件分享页面链接,并在页面的 onShareAppMessage 中设置。

绑定完成后,会跳转到 setVoipEndPagePath 设置的页面。

// 获取插件联系人绑定关系页面路径,用户会在该页面进行关系绑定操作。
// 分享绑定页面:在学生管理员进入页面时,提前获取分享链接
wmpfVoip
  .getBindContactPath({
    userId: 'xxxx', // 学生 id
    userName: 'xxxx', // 学生名字
    userAvatar: 'xxxx', // 学生头像
  })
  .then(path => {
    // 在 onShareAppMessage 中使用 path
    // 可在 path 后拼上参数, 如'&xxx=yyy', 小程序中通过 getPluginEnterOptions 获取
  })

// Page 中
Page({
  onShareAppMessage() {
    return {
      title: `邀请你成为「${userName}」的联系人`,
      path: 'xxxx', // getBindContactPath 获取的 path
    }
  },
})

// app.js
App({
  onl oad() {
    // 设置联系人绑定关系页面操作完成后要跳转的页面路径。
    wmpfVoip.setVoipEndPagePath({
      key: 'BindContact',
      url: 'xxxxxx',
      options: 'param1=xxx&param2=xxx',
    })
  },
})

注意

  • userName 和 userId(微信支付刷脸返回的 user_id)应与拨打方(学生)信息录入时保持一致;
  • 拨打方应能获取接听方联系人的 openId、名字, 用于显示在联系人列表页面;
  • 在完成绑定过程中,会触发相应事件。可通过 onVoipEvent 进行监听。具体参考 bindContact 的 type。

2.2 查询联系人列表

插件接口

wmpfVoip.getVoipBindContactList({ userId: '学生userId' }).then(list => {
  /**
      [{
        user_id: 'xxx',
        is_ad: 0, // 0 普通联系人,1 管理员
        openid_list: [], // 管理员可以获取孩子(user_id)下绑定的所有联系人(openid)列表,包括自己。
      }]
    */
})

后台接口

请求地址

POST https://api.weixin.qq.com/wxa/business/getvoipcontactlist?access_token=ACCESS_TOKEN

请求参数

属性 类型 必填 说明
access_token / cloudbase_access_token string 接口调用凭证
user_id string 学生 userId

返回值

Object

返回的 JSON 数据包

属性 类型 说明
errcode number 错误码
errmsg string 错误信息
contact_list ContactInfo[] 联系人列表

ContactInfo

属性 类型 说明
open_id string 联系人 openid
role number 联系人身份,0 为普通联系人,1 为管理员。

errCode 合法值

errCode 说明
0 成功
1 用户无联系人列表

2.3 删除联系人

只有管理员才能删除学生(user_id)的联系人(openid),管理员不能删除自己。

wmpfVoip.deleteVoipBindContact({
  userId: 'xxx',
  openidList: ['openId1', 'openId2'],
})

2.4 转移管理员

只有管理员才能调用转移接口。

wmpfVoip.transerAdmin({
  userId: 'xxx',
  newAdminOpenid: '新管理员的openid',
})

2.5 监听事件

在绑定联系人的过程中,onVoipEvent 会收到 bindContact 事件,获取分享绑定联系人状态:

data 参数

属性 类型 说明
type string 绑定结果,取值参见下文
errMsg string 错误信息
userId string 学生 user_id

type 取值

type 描述
success 联系人绑定成功
unbind 联系人未绑定该学生
binded 联系人已绑定过该学生
expire 分享链接过期
overload 该学生绑定的联系人已超过限制
invalid 分享链接非法,原因可能是该链接由非管理员分享
auth 联系人授权 scope.voip 失败
cancel 联系人取消绑定

标签:userId,绑定,联系人,模式,管理员,支付,微信,id
From: https://www.cnblogs.com/AtlasLapetos/p/18624096

相关文章

  • Oracle-DG最大可用模式下,dg备库可能对主库有什么影响?
    --查询数据库的保护模式:>selectname,database_role,protection_modefromv$database;NAMEDATABASE_ROLEPROTECTION_MODE---------------------------------------------DINGDINGPHYSICALSTANDBYMAXIMUMAVAILABILITY--验证最高可用性日志传输模式:插入数据:切换......
  • Java设计模式 —— 【结构型模式】组合模式(透明组合模式、安全组合模式)详解
    文章目录一、概述二、结构三、案例实现四、安全组合模式五、优缺点一、概述组合模式又名整体-部分模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形......
  • GitHub与开源社群的项目模式
    早期自由软件运动强调软件应该是自由的,用户有使用、复制、分发、研究、修改和改进软件的自由,这种理念催生了开源软件的诞生。而现代开源模式在早期自由软件运动的基础上有了一些变化。以GitHub为例,它是一个主流的代码托管、协作和社交平台,但本身是闭源的。一方面,它是和大多......
  • 卷轴模式服务端功能架构实例分析
    卷轴模式系统管理端卷轴任务配置详细解析,以下是卷轴任务系统服务端的功能模块:1.会员模块;2.会员等级任务设置;3.签到任务设置;4.会员权益;5.分销体系设置;6.团队分润模块;7.积分模块;8.任务包模型;9.交易体系;10.商城系统;11.广告模块;12.财务模块;13.数据统计;14.投诉处理模块;15.系统基......
  • 【进阶编程】代理模式和适配模式的比较
    代理模式和适配器模式(AdapterPattern)都属于结构型设计模式,它们在某些方面有相似之处,都涉及到为其他对象提供间接访问和包装,但它们的核心目的是不同的。下面是对代理模式和适配器模式的详细比较:1.目的代理模式(ProxyPattern):代理模式的目的是通过一个代理对象来控制对......
  • STM32高级:CAN通讯案例1:环回静默模式测试 (寄存器代码)(详解)
    目录需求描述思路:初始化函数GPIO引脚模块1    RCC2    AFIO3        GPIOCAN模块1        MCR和MSR2        MCR发送报文1    TSR2        数据帧的书写(邮箱寄存器)1        TIxR(TIR)3   ......
  • 微信支付、支付宝支付原生、接第三方教程
    微信支付  1.引入依赖 <!--微信支付V3目前新版本--><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4......
  • 学习高校课程-软件设计模式-状态、策略和模版模式(lec12)
    State:ProblemAfinitenumberofstatesTheprogrambehavesdifferentlywithinastateCanbeswitchedfromonestatetoanother,andswitchingrules(transitions)arealsofiniteandpredetermined有限数量的状态程序在某个状态下的行为有所不同可以从一种状态......
  • 设计模式概述
    文章目录1.设计模式概述1.1软件设计模式的产生背景1.2软件设计模式的概念1.3学习设计模式的必要性1.4设计模式分类1.设计模式概述1.1软件设计模式的产生背景"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加......
  • 402、基于51单片机的洗衣机仿真设计(数码管,2模式,中断)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网......