微信小程序开发问题整理:人脸核身、富文本图片等
最近在做一个小程序的项目,遇到了一系列问题,整理一下,以备后用。
微信人脸核身接口能力
微信提供了人脸核身功能,可以通过提供的身份信息拉起人脸识别,验证是否匹配(是否是本人操作),该接口目前只支持部分主体,在后台申请开通。
wx.startFacialRecognitionVerify(OBJECT)
:请求进行基于生物识别的人脸核身。
代码示例:
- //人脸识别,请求进行基于生物识别的人脸核身
- startFace(name, idcard) {
- wx.startFacialRecognitionVerify({
- name: name, //姓名
- idCardNumber: idcard, //身份证号
- success: function(res) {
- var verifyResult = res.verifyResult; //认证结果
- //调用接口
- },
- checkAliveType: 2, //人脸核验的交互方式,2先检查是否可以屏幕闪烁,不可以则自动为读数字。默认值0,读数字)
- fail: err => {
- wx.showToast('请保持光线充足,面部正对手机,且无遮挡')
- }
- })
- }
接口提供了两种验证方式:
没有用户实名信息,需要在前端填写身份证和姓名,前端直接通过 jsapi 调用传递 name 和 idCardNumber。(像上面这样)
已经有用户实名信息,后台通过微信提供的 api 上传用户身份证姓名和身份证,api 返回
user_id_key
作为凭证传给前端,前端再调用 jsapi ,用户姓名、身份证信息不需要经过前端,参数只需要传递 userIdKey。代码如下:
代码示例:
- wx.startFacialRecognitionVerify({
- userIdKey: key, // 后台返回的key
- success: function(res) {
- //调用接口 请求结果
- },
- checkAliveType: 2,
- fail: err => {
- wx.showToast('请保持光线充足,面部正对手机,且无遮挡')
- }
- })
在拉起人脸核身之前,先检查设备是否支持人脸检测。
wx.checkIsSupportFacialRecognition(OBJECT)
:检查设备是否支持人脸检测。
代码示例:
- // 检测环境是否支持
- check: function () {
- const _this = this;
- //活体检测,是否支持人脸识别
- wx.checkIsSupportFacialRecognition({
- checkAliveType: 2,
- success: function(res) {
- if (res.errCode === 0 || res.errMsg === "checkIsSupportFacialRecognition:ok") {
- //调用人脸识别
- _this.startFace(key); //userIdKey
- return;
- }
- wx.showToast('微信版本过低,暂时无法使用此功能,请升级微信最新版本')
- },
- fail: res => {
- wx.showToast('微信版本过低,暂时无法使用此功能,请升级微信最新版本')
- }
- })
- }
更多细节可以参考官方文档。
微信小程序 rich-text 富文本组件 图片宽度超出问题
微信提供了 rich-text
组件,用来渲染接口返回的富文本内容:
<rich-text nodes="{{ content }}"></rich-text>
但是如果内容包含图片,就会出现图片”过大“,宽度超出屏幕的问题,也可以说图片显示不全。
这就需要利用正则给图片标签增加内联样式,解决显示异常问题:
- this.setData({
- content: res.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto"')
- })
或者:
- this.setData({
- content: res.content.replace('<img ', '<img style="max-width:100%;height:auto"')
- })
iOS 不支持 webp 格式图片,直接去除或者替换 png 等格式:
res.content.replace(/&tp=webp&/gi, '&')
wx.navigateBack 返回上一页报错
业务中返回上一页报错:
- wx.navigateBack()
- /*(in promise) MiniProgramError
- *{"errMsg": "navigateBack: fail cannot navigate backat first page."}
- */
遵循规范,加上 delta
参数:
- wx.navigateBack({
- delta: 1
- })
返回上一页的上一页:
- wx.navigateBack({
- delta: 2
- })
小程序赋值页面不刷新
小程序赋值页面不刷新:
this.data.website = 'www.w3h5.com'
不刷新就对了,小程序需要使用 setData
赋值才会渲染刷新:
- this.setData({
- website: 'www.w3h5.com'
- })
小程序 bindtap 传值
注意: bindtap
全部是小写字母。
点击事件,通过 data-xxx
传值:index.wxml
<button data-type="web" bindtap="getType"> </button>
使用 e.currentTarget.dataset
获取值:index.js
- getType (e) {
- const type = e.currentTarget.dataset.type
- console.log(type)
- // web
- }
微信小程序清除定时器
JavaScript 写法:
- // 定义一个定时器
- let timer = setInterval(() => {
- ...
- }, 1000)
- // 清除定时器
- clearInterval(timer)
小程序写法:
- Page({
- data: {
- timer: null // 先在 data 中定义
- },
- onLoad () {
- this.setTimer() // 调用方法,设置定时器
- },
- setTimer () { // 定义方法
- this.data.timer = setInterval(() => {
- ...
- }, 1000)
- },
- onUnload () { // onUnload 定时器销毁
- clearInterval(this.data.timer)
- }
- })
注意: 根据需求在 onUnload
和 onHide
销毁定时器,避免重复执行。
扫普通链接二维码打开微信小程序
一般用于生成测试环境的小程序码,更多细节可以参考官方文档。
开放范围:企业、媒体、政府及其他组织类型小程序。
配置流程:登录小程序后台,进入“设置-开发设置-扫普通链接二维码打开小程序”,开启功能后即可配置二维码规则。
测试范围:开发者可根据开发进度选择在开发版/体验版/线上版本测试“普通二维码跳转小程序”的功能。
微信小程序中播放 B 站视频
如果有真是视频地址,可以直接赋值给 video
的 src
。
如果没有真实地址,使用 if
rame 嵌入 B 站视频,需要将 B 站链接添加到小程序业务域名。
未经允许不得转载:前端资源网 - w3h5 » 微信小程序开发问题整理总汇:人脸核身、富文本图片等