
微信生态是国内业务绕不开的入口,小程序内的实名核身怎么接?本文讲清楚微信渠道支持的接入方式、接入前的准备工作,并给出完整的代码示例和常见问题的处理。
微信生态内的人脸核身主要有三种形态:
微信小程序:用户在小程序内直接唤起刷脸流程,体验最接近原生。
微信公众号 H5:通过公众号文章或菜单跳转到 H5 页面完成核身。
微信浏览器 H5:在微信内置浏览器中打开网页完成核身。
三者调用的都是同一套核身能力,区别在于载体和交互细节。
微信小程序人脸核身仅对以下行业开放,需提前准备对应资质文件:
行业 | 资质要求 |
|---|---|
政务 | 机构或事业单位 |
金融 | 银行、保险、信托、基金、证券/期货、持牌消费金融等 |
医疗 | 公立医疗机构、互联网医院、三级私立医疗机构 |
运营商 | 基础电信运营商、虚拟运营商 |
教育 | 学历教育(学校)、公立/私立学校 |
出行与交通 | 网约车、航空、公交/地铁、火车/高铁等 |
社交 | 直播 |
登录人脸核身控制台,单击自助接入 > 创建业务流程:
审核通过后,需要完成服务端接口对接:
# Python 示例:调用 DetectAuth 获取 BizToken
from tencentcloud.common import credential
from tencentcloud.faceid.v20180301 import faceid_client, models
cred = credential.Credential("SecretId", "SecretKey")
client = faceid_client.FaceidClient(cred, "ap-guangzhou")
def get_biz_token(rule_id, redirect_url):
req = models.DetectAuthRequest()
req.RuleId = rule_id
req.RedirectUrl = redirect_url
resp = client.DetectAuth(req)
return resp.BizToken, resp.Url
# 使用示例
rule_id = "你的RuleId"
biz_token, verify_url = get_biz_token(rule_id, "https://your-domain.com/callback")
print(f"BizToken: {biz_token}")从控制台获取小程序 SDK 下载链接,下载后在小程序项目中引入:
// 引入 SDK
const { init, startVerify } = require('./sdk/huiyan-sdk.min.js')
// 初始化 SDK
init({
appId: '你的小程序AppId'
})Page({
data: {
bizToken: ''
},
// 用户点击开始核身
async handleStartVerify() {
try {
// 1. 请求服务端获取 BizToken
const res = await wx.request({
url: 'https://your-domain.com/api/getBizToken',
method: 'POST',
data: {
// 业务参数
}
})
const bizToken = res.data.bizToken
this.setData({ bizToken })
// 2. 调用 SDK 启动核身
startVerify({
token: bizToken,
success: (res) => {
console.log('核身成功', res)
// 3. 通知服务端拉取结果
this.verifyResult(res.token)
},
fail: (err) => {
console.error('核身失败', err)
wx.showToast({
title: '核身失败,请重试',
icon: 'none'
})
}
})
} catch (err) {
console.error('获取Token失败', err)
}
},
// 服务端拉取核身结果
async verifyResult(token) {
const res = await wx.request({
url: 'https://your-domain.com/api/getResult',
method: 'POST',
data: { token }
})
if (res.data.success) {
wx.redirectTo({
url: '/pages/result/result?status=success'
})
} else {
wx.redirectTo({
url: '/pages/result/result?status=fail'
})
}
}
})# Python 示例:调用 GetDetectInfoEnhanced 获取核身结果
def get_detect_result(biz_token):
req = models.GetDetectInfoEnhancedRequest()
req.BizToken = biz_token
resp = client.GetDetectInfoEnhanced(req)
result = {
'success': resp.Text and resp.Text.ErrCode == 0,
'score': resp.Sim if resp.Sim else None,
'video': resp.VideoData if resp.VideoData else None,
'best_frame': resp.BestFrame if resp.BestFrame else None
}
return result对比项 | 小程序 | 公众号 H5 |
|---|---|---|
用户入口 | 小程序内直接唤起 | 文章、菜单跳转 |
交互体验 | 更接近原生 | 网页交互 |
摄像头权限 | 由小程序统一申请 | 依赖浏览器授权 |
适用场景 | 高频、核心业务流程 | 引导式、活动式场景 |
接入复杂度 | 需下载 SDK | 直接跳转 URL |
如果核身是业务的核心环节,建议放在小程序里;如果只是特定活动的补充验证,公众号 H5 更轻。
现象:用户误点拒绝摄像头授权后无法继续核身。
解决方案:
// 引导用户重新授权
wx.showModal({
title: '需要摄像头权限',
content: '请在设置中开启摄像头权限以完成人脸核身',
confirmText: '去设置',
success(res) {
if (res.confirm) {
wx.openSetting()
}
}
})现象:用户在核身过程中返回或关闭页面。
解决方案:在页面 onShow 生命周期中检测状态,提供重新发起入口。
Page({
onShow() {
// 检查是否有未完成的核身
if (this.data.pendingVerify) {
wx.showModal({
title: '继续核身',
content: '检测到您有未完成的核身,是否继续?',
success: (res) => {
if (res.confirm) {
this.handleStartVerify()
}
}
})
}
}
})现象:核身过程中断网导致流程失败。
解决方案:监听网络状态,给用户明确提示和重试入口。
wx.onNetworkStatusChange((res) => {
if (!res.isConnected) {
wx.showToast({
title: '网络已断开,请检查网络',
icon: 'none',
duration: 3000
})
}
})现象:SDK 回调成功,但业务系统未更新用户状态。
原因:通常是服务端拉取结果的环节没打通。
排查步骤:
GetDetectInfoEnhanced 接口是否正常调用DetectAuth 接口已联通GetDetectInfoEnhanced 接口已联通腾讯云慧眼人脸核身支持微信小程序与微信 H5 渠道接入,可作为微信生态内实名核身的实现方案。该系列产品正在限时特惠活动中,低至3.3折:https://cloud.tencent.com/act/pro/happynewyears
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。