- (9)音视频组件
2017年下半年,微信6.5.21版本支持在线音视频功能。开发者可以通过两个音视频组件 live-pusher>/live-pusher> 和 live-player>/live-player> 实现实时地在线直播、视频通话、语音通话等功能。 下面我们将详细介绍一下音视频组件在线直播和视频通话这两个应用场景。 在线直播 01 在线直播的应用场景有哪些? 在游戏直播、远程授课、以及企业内部的培训分享等场景中,都可能会用到在线直播功能,直播的应用场景可以遍及各行各业。 比如微信电竞是一款游戏直播产品,以小程序为产品呈现方式。 比如在医疗行业,专家医师往往需要全国各地飞进行学术交流和培训,出差本身耽误了医生大量时间,在线远程授课能大大减少这里的时间耗用。 小程序中的 live-pusher>/live-pusher> 和 live-player>/live-player> 两个组件 ,都有一个叫做live ( live-pusher>/live-pusher>中对应 mode 属性为 SD, HD, FHD)的模式,专门为在线直播而设计,通过小程序的音视频接口的live 模式,可以实现上述应用场景。 02 在线直播的内部原理是什么? 主播端使用 live-pusher>/live-pusher> ,它在小程序的内部是一个推流引擎,它负责对手机摄像头和麦克风的数据进行采集和编码,并通过 url 参数指定的 rtmp 推流地址上传到云端。 云端的作用类似信号放大器,它负责将来自主播端的一路音视频流数据进行放大,将数据实时并且无差异的负责并扩散到全国各地,从而解决主播和观众端之间距离太远(比如,跨地区和跨运营商)的问题。 观众端使用 live-player>/live-player> 进行播放,它在小程序的内部是一个在线播放器,负责从云端实时拉取音视频数据并进行解码和渲染。由于云端的放大效应,每一个观众都能在离自己比较近的云服务器上拉取到实时且流畅的音视频流。 [图片] 03 我怎么用小程序实现在线直播? - step1:开通一个云直播服务(比如 腾讯云:https://cloud.tencent.com/document/product/454/12517 ),或者自己搭建一个rtmp服务器(例如 nginx-rtmp:https://github.com/arut/nginx-rtmp-module 服务)。 - step2:生成推流 url ,推流地址一般以 “rtmp://” 打头,比如rtmp://8888.livepush.myqcloud.com/live/8888_test就是一个典型 rtmp 推流 Url。 - step3:为你的小程序增加一个 live-pusher>/live-pusher> 标签,并将 url 参数指定为你在 step2 中生成的推流 url。 同时, live-pusher> /live-pusher>的 mode 参数可以指定为 HD 或者 FHD,这是在线直播场景中比较推荐的画质。 同时,你还可以通过 live-pusher> /live-pusher>的 beauty 和whiteness 等参数设定美颜和美白等级。 - step4:生成推流 url 和播放地址,推流一般都是 rtmp:// 打头的 url,而播放地址则有两种选择,分别是 “rtmp://” 开头的 rtmp 播放协议,“http://” 打头和“.flv”结尾的的 http-flv 播放协议,推荐使用后者,因为这种播放地址各个云厂商都优化的比较好。 [图片] - step5:为你的小程序增加一个 live-player>/live-player> 标签 ,并将 src 参数指定为你在 step4 中生成的播放 url。同时,live-player> /live-player>的 mode 参数请指定为 live,orientation 和 object-fit 属性可以用于调整画面布局,min-cache 和 max-cache 则可以用于控制观众跟主播之间的延时大小,推荐的设置是 min-cache = 2, max-cache = 5。 常见问题 01 时延太高是怎么回事? 在线直播的延时跟播放协议和播放器参数有很大的关系, live-player> /live-player>的 min-cache 和 max-cache 用于控制播放器端的最小时延和最大时延。其中,这里所说的“最小”和“最大”是根据观众端当时的网络情况而定的,如果网络情况比较好,那么播放器的时延就会趋向于 min-cache,而如果网络情况比较差,那么播放器的时延就会趋向于 max-cache。 另外,rtmp 协议 和 http-flv 协议的播放地址延时一般比较低,而 hls(m3u8)协议的延时则相对较高。 02 主播网络不好怎么办? 在一场直播过程中,如果观众端的网络不好,那么观看体验仅仅影响到当前观众;如果主播的网络不好,那么所有观众的观看体验都会很糟糕。因此主播的上行网络质量很重要,如果主播的上行网络质量不理想,比如时好时坏,或者上行小水管,不足以支持基本的直播需求,有两种办法可以解决问题: 一种办法是设置 live-pusher> /live-pusher>的 min-bitrate 参数,比如 400kbps, 这样一来,当主播网络不给力的时候, live-pusher>/live-pusher>就会给主播的编码器发送降低画质的命令,通过降低编码器吐出的数据量来给主播的网络减负。但这种办法产生的副作用也非常明显,就是主播的画质会变差。 另一种方法则是借助 live-pusher> /live-pusher>的 NET_BUSY 通知进行 UI 上的告警提示, live-pusher> /live-pusher>在主播上行网速不给力时会通过 onPushEvent 通知抛出 PUSH_WARNING_NET_BUSY(1101) 事件,这个时候你可以提示主播通过靠近路由器或者切换 4G 的方法来改善当前的网络质量。 03 HLS(m3u8)协议为什么播放不了? 微信小程序在最早期的版本中就集成了 标签,该标签即可播放 HLS(m3u8)协议的播放地址,但是此种播放协议的时延一般都在 20 秒以上,所以如果对时延要求较高,则推荐使用live-player> /live-player>标签播放 http-flv 协议的直播地址。 视频通话 01 小程序 + 视频通话有什么优势? 我们可以发现目前保险行业会通过现场定损的方式处理车险理赔,这种方式需要派定损员驱车前往事发地点进行损伤判定,每次的出车成本非常高。 如果要采用远程电话解决,保险公司无法简单通过语音沟通确认损伤程度,而且照片采集很难规避定车骗保的可能,所以**实时的视频通话**可以解决这种问题。 小程序中 live-pusher>/live-pusher> 和 live-player>/live-player> 两个组件 ,都有一个叫做 RTC 的模式,通过这种模式,可以在小程序实现实时视频通话。 02 视频通话的内部原理是什么? live-pusher>/live-pusher> 和 live-player>/live-player> 两个组件的 RTC 模式,主要是实现端到端能够以很低的时延传输音视频数据。 这样一来,视频通话的双方 A 和 B 就可以各自拉通一路方向相反的音视频链路,从而实现 A 和 B 之间的双向低延时的音视频数据传输。与此同时,RTC 模式还会开启内置的 AEC (回声抑制),避免通话的双方会因为本地麦克风对播放器的声音进行二次采集而引起的回声问题。 [图片] 03 我怎么用小程序实现视频通话? - step1:开通一个云直播服务(比如 腾讯云 :https://cloud.tencent.com/document/product/454/12517),或者自己搭建一个rtmp服务器(例如 nginx-rtmp:https://github.com/arut/nginx-rtmp-module 服务)。 - step2:生成两对 rtmp 推拉流 url :一对是用于 A 端推流的 push_url_a 和 用于播放 A 端视频的 play_url_a;另一对是用于 B 端推流的 push_url_b 和 用于播放 B 端视频的 play_url_b; - step3:A端添加一个 live-pusher>/live-pusher> 标签,指定 mode 为 RTC,并将 url 输定设定为 push_url_a。 - step4:A端添加一个 live-player>/live-player> 标签,指定 mode 为 RTC,并将 src 输定设定为 play_url_b。 - step5:B端添加一个 live-pusher>/live-pusher> 标签,指定 mode 为 RTC,并将 url 输定设定为 push_url_b。 - step6:B端添加一个 live-player>/live-player> 标签,指定 mode 为 RTC,并将 src 输定设定为 play_url_a。 常见问题 01 通话时延太高了怎么办? 小程序的 RTC 模式解决了双向或者多人实时音视频通话在终端所需要的各项技术组件,但是通话线路本身可能也会引入很高的延时,所以要确保视频通话的 A 和 B 双方所使用的 rtmp 线路要有很低的时延。 如果是自己搭建rtmp服务器(例如 nginx-rtmp:https://github.com/arut/nginx-rtmp-module 服务),请检查 nginx-rtmp 的服务端参数设置,确保不要在服务器端引入太多音视频数据缓存。 如果是使用腾讯云的超低延时线路,那么要注意给 RTC 模式下的live-player>/live-player>传递带防盗链签名的播放 url。 对比项目 示例 时延 普通直播URL rtmp://3891.liveplay.myqcloud.com/live/3891_test_clock_for_rtmpacc >2s 超低延时 URL rtmp://3891.liveplay.myqcloud.com/live/3891_test_clock_for_rtmpacc?bizid=bizid&txTime=5FD4431C&txSerect=20e6d865f462dff61ada209d53c71cf9 < 500ms 02 感觉画面很卡应该如何处理? 小程序的 RTC 模式主要用于视频通话,由于这类场景以交流为重,所以小程序会有限保证声音的流畅,相应的,视频数据的发送会被放在第二优先级上。因此,如果网络有波动,小程序会舍弃尚未发送出去的视频数据,优先保障音频数据的发送。 所以如果在 RTC 模式下,建议不要给 live-pusher>/live-pusher> 设置太高的画质,也就是不要将 min-bitrate 和 max-bitrate 设置的太大,一般而言,推荐 min-bitrate 设置为 300kbps, max-bitrate 设置为 800kbps,即可满足常规视频通话的需求。
2018-08-17 - live-player在小程序拉流过程中遇到的坑
最近在做一个有关直播的项目,因为也是第一次接触,中途踩了很多坑。那现在就把踩得坑还有解决方案分享给大家。 1.在vlc测试流没问题,但是小程序端显示拉流失败(拉流失败状态码查看文档) 解决方案:因为做小程序直播需要企业认证,你需要确保你的公司有开直播的权限,并且在开发设置中打开直播权限。 2.在小程序端显示拉流没有问题,状态码也表示开始播放,但直播却一直黑屏,或偶尔闪退。 解决方案:出现这个问题一般是两个问题--------A.视频流有问题。这个问题可以用别的视频流测试一下。 B.小程序生命周期问题。小程序 Page 生命周期,[代码]onLoad[代码] 只做数据加载还未做页面渲染,此时 <live-pusher>、<live-player> 标签还未创建完成,获取或者调用 [代码]livepushercontext[代码]、[代码]liveplayercontext[代码] 的方法行为不确定。[代码]onReady[代码] 表示页面已经加载,完成初次渲染,跟 <live-pusher>、<live-player> 标签相关的操作都需要放在 [代码]onReady[代码] 里面实现。 代码贴上: onReady: function () { var self = this; this.data.videoContext = wx.createLivePlayerContext("video-livePlayer"); this.setData({ playUrl: "rtmp:你的视频流地址", }, function () { self.data.videoContext.stop(); self.data.videoContext.play(); }) }, 3.其实一般视频流的问题都是推流出现的问题,有可能是因为分辨率,有可能因为编码格式,这个需要与推流技术人员沟通。 (大家有什么关于这样的问题可以私信我,我尽量解决🐷)
2020-07-31 - 微信开放平台公交地铁小程序乘车码激励活动参与指引
为更好的鼓励服务商开拓公交地铁行业小程序乘车码场景业务,为广大用户提供高效、便捷、贴心的出行体验,微信开放平台推出本激励活动,服务商代所授权的小程序商户报名成功并满足规定的条件后,服务商可获得相应的奖励。 【激励活动规则】 1.有效期:2021年2月1日 至 2021年6月30日 2.行业范围:公交地铁行业小程序乘车码业务 3.奖励对象:取得公交、地铁、城市通卡公司官方授权的小程序服务商(非腾讯主体) 4.奖励规则: 4.1.奖励计算方式 以小程序APPID为计算单位,符合准入条件的服务商报名并经审核通过后方可参与本活动,参与本活动并满足达标条件的小程序,给予服务商按小程序广告流量主的收入流水的18%进行奖励。 5.准入条件: 5.1.服务商与小程序具备绑定授权关系; 5.2.小程序类目为公交地铁且具备乘车码功能; 5.3.小程序的公交地铁行业的上个自然月代扣笔数>100; 5.4.提供公交地铁行业公司关联性证明材料。 6.达标要求:详情请登录微信服务平台查看。 【入驻服务平台】 1. 服务商注册open账号并创建第三方平台 1.1.第三方平台的申请和上线流程参照【注册第三方平台操作指引】; 1.2.如果在创建第三方平台时选择的是“定制化开发服务商“,则需要做如下操作:可将自己已经开发出的定制化小程序关联到服务商平台中,生成凭证(票据)填充到小程序代码包中进行关联,平台获取开发关系,点击查看【生成凭证操作指引】。 2.服务商入驻微信服务平台 完成第三方平台创建后需入驻微信服务平台,点击查看【入驻服务平台操作指引】。 【报名激励活动】 Step1.扫码登录微信服务平台,选择服务商对应的企业主页,点击右上角头像进入“我的主页”; [图片] Step2.点击“服务商激励”,再点击“微信开放平台公交地铁行业小程序乘车码激励活动”进入激励活动详情页面; [图片] Step3.阅览活动方案,点击“报名”; [图片] Step4: 签署承诺函,点击“确认”; [图片] Step5.按要求填写信息并提交; [图片] Step6: 材料提交成功,等待审核结果; [图片] 【奖励结算指引】 1.设置企业账户资料 注意:以下信息仅为操作指引,并非真实信息,请仅供参考。 Step1.微信服务平台的企业主页管理员扫码登录微信服务平台,选择服务商对应的企业主页,点击右上角头像选择“我的主页”; [图片] Step2.进入我的主页,点击“编辑材料”; [图片] Step3.填写材料,补充完备必填字段:联系人、联系电话、微信号、邮箱、企业地址, 并下滑页面点击“确定”提交材料; [图片] 2.验证企业资金账户 Step1.同样是参照前面的步骤,扫码进入企业主页,选择“基础设置”TAB; [图片] Step2.在“资金账户”模块,点击“去认证”; [图片] Step3.填写营业执照号或组织机构代码证,点击“验证” ; [图片] Step4.填写公司银行账户资料,点击“下一步”; [图片] Step5.根据页面提示,使用前一步填写的银行账号,给页面所展示的腾讯银行账号,汇入指定的金额,以完成小额打款验证; [图片] Step6.小额打款验证需要一定的时间,若显示状态为“认证中”,请稍候再登录服务平台查询; [图片] Step7.若验证通过,状态会变更为“已认证” 。 [图片] 3.激励结果结算 Step1.扫码登录微信服务平台,选择服务商对应的企业主页,然后点击右上角头像进入“我的主页”; [图片] Step2.点击“服务商激励”中的“激励结果”标识页面,查看数据明细并点击“详情”; [图片] Step3.进入“详情"页面,下滑至“数据明细”点击“下载”查看相应月份的结算账单明细。 [图片] 4.发票要求 将与确认单金额等额的增值税专用发票(第二联发票联和第三联税款抵扣联) 和盖章确认的结算单一并寄送给微信开放平台。其中, 4.1. 发票内容要求如下: 发票类型:增值税专用发票 发票抬头:深圳市腾讯计算机系统有限公司 发票内容:技术服务费 纳税人识别号:91440300708461136T 地址:深圳市南山区粤海街道麻岭社区科技中一路腾讯大厦35层 电话:0755-86013388 开户行及账号:招商银行深圳威盛大厦支行 817282299610001 4.2. 发票快递地址及收件人如下: 邮寄地址:四川省成都市高新区天府大道中段1366号天府软件园E5栋9楼 邮编:610041 收件人:施进燕 联系电话:(+86) 028-85225111 快递公司仅支持 顺丰、EMS、圆通、申通、中通、韵达 4.3. 其他注意事项: 1)为保证发票准确且在有效期内验证,请即将完成三证合一前一个月内不要开具发票, 等待三证合一完成后再开发票寄送; 2)增值税专用发票必须包括有完整清晰的发票章,且右上角的发票号不允许跳号; 3)对于无法开具增值税专用发票的普通服务商,请前往税务局代开增值税专用发票, 并盖该服务商的发票章。不可以适用普通发票。 【活动Q&A解读】
2021-02-25 - “NFC读写能力”介绍
产品简介:借助小程序内嵌H5的NFC读写接口,交通行业卡公司可通过小程序进行充值业务。 优势:方便快捷,在线充值,提升用户体验。 接入方式:需开发。 关键词:加分能力,移动充值。 01 功能介绍 给第三方NFC功能提供接入微信的能力,可以在有NFC功能的手机上,通过微信进行充值等操作。 适用范围:符合ISO 14443-4标准的CPU卡 开发时序图: [图片] 02 功能介绍申请指引 1、申请对象:交通行业,且是发卡主体公司 2、申请流程:邮件发送如下信息至city_api@tencent.com: 3、邮件标题:XXX公司XXX小程序申请小程序内嵌H5的NFC读写能力 邮件内容: 申请的JS接口名称:nfcIsConnect,nfcConnect,nfcTransceive, nfcBatchTransceive,nfcGetId,nfcGetInfo,onNfcTouch 使用该接口的用途: 小程序APPID: 小程序名称: 卡的识别指令: 内嵌H5对应公众号APPID: 产品联系人:(联系人、联系方式) 开发联系人:(联系人、联系方式) 白名单UIN列表: 03 开发指引 须经过以下6个主要步骤: 1)申请NFC读写接口 2)开发实现NFC读写能力的H5页面 3)小程序内嵌实现了nfc读写的H5页面 4)程序内实现支付功能: 由于小程序内嵌H5不支持支付,需在贴卡后进入该页面并通过NFC完成卡信息读取后,引导用户跳转至小程序其他页面完成支付,再返回内嵌H5的页面,将支付结果写入卡内。 5)申请完成贴卡跳转配置信息: 邮件地址:city_api@tencent.com 提供信息:小程序APPID、内嵌了H5页面的小程序path、内嵌H5对应公众号APPID、卡片AID 6)白名单测试验证无异常后,作全量下发。 该功能需先申请方可使用。 点击打开“NFC读写功能-接口文档”文章,查看接口详情。
2020-01-07 - “NFC”功能介绍及申请指引
产品简介: 借助小程序内嵌H5的NFC读写接口,交通行业卡公司可通过小程序进行充值业务。 优势: 方便快捷,在线充值,提升用户体验 接入方式: 需开发 关键词: 加分能力、移动充值 01 功能介绍 给第三方NFC功能提供接入微信的能力,可以在有NFC功能的手机上,通过微信进行充值等操作。 适用范围:符合ISO 14443-4标准的CPU卡 开发时序图: [图片] 02 功能介绍申请指引 1、申请对象: 交通行业,且是发卡主体公司 2、申请流程: 邮件发送如下信息至city_api@tencent.com: 3、申请邮件格式: 邮件标题:XXX公司XXX小程序申请小程序内嵌H5的NFC读写能力 邮件内容:申请的JS接口名称:nfcIsConnect,nfcConnect,nfcTransceive, nfcBatchTransceive,nfcGetId,nfcGetInfo,onNfcTouch 使用该接口的用途: 小程序APPID: 小程序名称: 卡的识别指令: 内嵌H5对应公众号APPID: 产品联系人:(联系人、联系方式) 开发联系人:(联系人、联系方式) 白名单UIN列表: 03 开发指引 须经过以下6个主要步骤: 1、申请NFC读写接口 2、开发实现NFC读写能力的H5页面 3、小程序内嵌实现了nfc读写的H5页面 4、程序内实现支付功能: 由于小程序内嵌H5不支持支付,需在贴卡后进入该页面并通过NFC完成卡信息读取后,引导用户跳转至小程序其他页面完成支付,再返回内嵌H5的页面,将支付结果写入卡内。 5、申请完成贴卡跳转配置信息: 邮件地址:city_api@tencent.com 提供信息:小程序APPID、内嵌了H5页面的小程序path、内嵌H5对应公众号APPID、卡片AID 6、白名单测试验证无异常后,作全量下发。 该功能需先申请方可使用。
2020-12-29 - 微信人脸核身接口能力
一、能力背景 近年来,国家在医疗挂号、APP注册、快递收寄、客运、运营商等多领域规定,需要用户实名才可办理业务,预计后续也会有越来越多的此类法规。因此,微信参照公安部“互联网+”可信身份认证服务平台标准,依托腾讯公司及微信的生物识别技术,建立微信“实名实人信息校验能力” ,即通过人脸识别+权威源比对,校验用户实名信息和本人操作(简称微信人脸核身)。 目前接口限定主体及行业类目开放公测,提供给资质符合要求的业务方,在合适的业务场景内使用。目前仅支持持二代身份证的大陆居民。 由于人脸核身功能涉及到用户的敏感、隐私信息,因此调用此接口的小程序,需要满足一定的条件。即:小程序的主体以及类目,需要在限定的类目范围内,且与小程序的业务场景一致。开展的业务也需要是国家相关法规、政策规定的需要“实名办理”的相关业务(其他未在范围内的业务,则暂不支持)。 以下为接口接入及开发的详细内容。如开发中遇到任何疑问,可以点击此处通过社区反馈,将有工作人员跟进回复。 文档第四部分【再次获取核验结果api】,有助于提高业务方安全性,请务必接入! 现阶段微信人脸核验能力,针对小程序,开放的主体类目范围包含: 小程序一级类目 小程序二级类目 小程序三级类目 使用人脸核验接口所需资质 物流服务 收件/派件 / 《快递业务经营许可证》 物流服务 货物运输 / 《道路运输经营许可证》(经营范围需含网络货运) 教育 学历教育(学校) / (2选1):1、公立学校:由教育行政部门出具的审批设立证明 或 《事业单位法人证书》;2、私立学校:《民办学校办学许可证》与《民办非企业单位登记证书》 医疗 公立医疗机构 / 《医疗机构执业许可证》与《事业单位法人证书》 医疗 互联网医院 / 仅支持公立医疗机构互联网医院(2选1):1、卫生健康部门的《设置医疗机构批准书》;2、 《医疗机构执业许可证》(范围均需含“互联网诊疗”或名称含“互联网医院”等相关内容 医疗服务 三级私立医疗机构 / 仅支持三级以上私立医疗机构,提供《医疗机构执业许可证》、《营业执照》及《医院等级证书》 政务民生 所有二级类目 / 仅支持政府/事业单位,提供《组织机构代码证》或《统一社会信用代码证》。 金融业 银行 / (2选1):1、《金融许可证》; 2、《金融机构许可证》。 金融业 信托 / (2选1):1、《金融许可证》; 2、《金融机构许可证》。 金融业 公募基金 / (4选1):1、《经营证券期货业务许可证》且业务范围必须包含“基金”;2、《基金托管业务许可证》; 3、《基金销售业务资格证书》;4、《基金管理资格证书》。 金融业 证券/期货 / 《经营证券期货业务许可证》 金融业 保险 / (8选1):1、《保险公司法人许可证》;2、《经营保险业务许可证》;3、《保险营销服务许可证》;4、《保险中介许可证》;5、《经营保险经纪业务许可证》;6、《经营保险公估业务许可证》或《经营保险公估业务备案》;7、《经营保险资产管理业务许可证》 ;8、《保险兼业代理业务许可证》。 金融业 消费金融 / 银监会核准开业的审批文件与《金融许可证》与《营业执照》 金融业 汽车金融/金融租赁 / 仅支持汽车金融/金融租赁主体,同时提供:1、《营业执照》(公司名称包含“汽车金融” /“金融租赁”;营业范围包含“汽车金融”/“金融租赁”业务);2、《金融许可证》或银保监会及其派出机构颁发的开业核准批复文件。 交通服务 网约车 快车/专车/其他网约车 (自营性网约车)提供《网络预约出租汽车经营许可证》。(网约车平台)提供与网约车公司的合作协议以及合作网约车公司的《网络预约出租汽车经营许可证》。 交通服务 航空 / (航司)提供《公共航空运输企业经营许可证》。(机场)提供《民用机场使用许可证》或《运输机场使用许可证》。 交通服务 公交/地铁 / 提供公交/地铁/交通卡公司《营业执照》 交通服务 水运 / (船企)提供《水路运输许可证》。(港口)提供《港口经营许可证》 交通服务 骑车 / 仅支持共享单车,提供共享单车公司《营业执照》 交通服务 火车/高铁/动车 / 仅支持铁路局/公司官方,提供铁路局/公司《营业执照》 交通服务 长途汽车 / (2选1):1、《道路运输经营许可证》(经营范围需含客运);2、官方指定联网售票平台(授权或协议或公开可查询文件)。 交通服务 租车 / 运营公司提供《备案证明》与对应公司《营业执照》,且营业执照中包含汽车租赁业务 交通服务 高速服务 / 仅支持ETC发行业务,(2选1):1、事业单位主体,需提供《事业单位法人证书》;2、官方指定的发行单位(一发单位),需提供“官方授权或协议,或公开可查询的文件”; 生活服务 生活缴费 / (供电类)提供《电力业务许可证》与《营业执照》,且《营业执照》且经营范围含供电。(燃气类)提供《燃气经营许可证》与《营业执照》,且《营业执照》且经营范围含供气。(供水类)提供《卫生许可证》与《营业执照》。(供热类)提供《供热经营许可证》与《营业执照》,且《营业执照》且经营范围含供热。 IT科技 基础电信运营商 / (2选1):1、基础电信运营商:提供《基础电信业务经营许可证》;2、运营商分/子公司:提供营业执照(含相关业务范围)。 IT科技 转售移动通信 / 仅支持虚拟运营商,提供《增值电信业务许可证》(业务种类需含通过转售方式提供移动通信业务) 旅游服务 住宿服务 / 仅支持酒店,提供《酒店业特种行业经营许可证》 商业服务 公证 / 仅支持公证处,提供《公证处执业许可证》或《事业单位法人证书》 社交 直播 / (2选1):1、《信息网络传播视听节目许可证》;2、《网络文化经营许可证》(经营范围含网络表演)。 如对以上类目或资质有疑问,可点击参考小程序“非个人主体开放的服务类目”,详细了解小程序开放的服务类目及对应资质。 二、准备接入 (请在小程序发布后,再提交人脸核身接口申请) 满足第一节中描述的类目和主体的小程序,可申请微信人脸核验接口。目前微信人脸核身接口已改为线上自助申请方式,需按照如下图例指引,进行接口申请: 第一步:请通过mp.weixin.qq.com登录小程序账号在后台“功能-人脸核身”的路径,点击开通按钮—— [图片] 第二步:仔细查阅《人脸识别身份信息验证服务条款》后,点击“同意并下一步”—— [图片] 第三步:请正确填写服务信息,并上传该小程序类目下所要求的资质—— [图片] 第四步:请按照业务实际需求填写使用人脸接口的场景和用途—— [图片] 第五步:请完善测试信息和联系人—— [图片] 第六步:提交后请耐心等待1-3个工作日的审核期,审核结果将以站内信通知—— 如申请期间遇到问题,可联系腾讯工作邮箱 wx_city@tencent.com,将会有相关工作人员进一步指引。 三、接口文档: (一)接口描述 名称: wx.startFacialRecognitionVerify(OBJECT) 功能:请求进行基于生物识别的人脸核身 验证方式:在线验证 兼容版本: 一闪:android 微信7.0.22以上版本, iOS 微信7.0.18以上版本 建议在微信官网升级至最新版本 (二)参数说明 1、OBJECT参数说明: 参数 类型 必填 说明 name String 是 姓名 idCardNumber String 是 身份证号码 success Function 否 调用成功回调 fail Function 否 调用失败回调 complete Function 是 调用完成回调(成功或失败都会回调) 2、CALLBACK返回参数 参数 类型 说明 errMsg String 错误信息 errCode Number 错误码 verifyResult String 本次认证结果凭据,第三方可以选择根据这个凭据获取相关信息 注 1:传递用户姓名和身份证有两种方式 业务方没有用户实名信息,用户需要在前端填写身份证和姓名,那么前端直接通过jsapi 调用传递 name 和 idCardNumber。 业务方已经有用户实名信息,后台通过微信提供的 api(详情见文档后面“上传姓名身份证后台 api”)上传用户身份证姓名和身份证,api 返回 user_id_key 作为凭证传给前端,前端再调用 jsapi,用户姓名、身份证信息不需要经过前端,参数只需要传递 userIdKey。Tips:使用该功能需要小程序基础库版本号>=1.9.3。 3、回调结果说明 回调结果请参考以下释义: [图片] [图片] [图片] 4、示例代码 [图片] [图片] (三)上传用户姓名身份证的后台api 1、API说明 1.1说明 业务方上传用户姓名和身份证,获取用户凭证,把凭证给到前端通过 jsapi 调用。 Tips :使用该功能需要小程序基础库版本号>=1.9.3。 1.2请求URL https://api.weixin.qq.com/cityservice/face/identify/getuseridkey?access_token={ac cess_token} 1.3请求方式 POST 2、请求数据格式 [代码]Json { "name" : “张三”, "id_card_number" : "452122xxxxxxx43215" } [代码] 请求示例 [代码]#!/bin/bash TOKEN='xxxxxxxxxxxx' URL='https://api.weixin.qq.com/cityservice/face/identify/getuseridkey' JSON='{ "name": "张三", "id_card_number": "452344xxxxxxxxxxxxx234"}' curl "${URL}?access_token=${TOKEN}" -d "${JSON}" [代码] 参数说明 json 字段 中文显示 是否必传 name 姓名 是 id_card_number 身份证号码 是 out_seq_no 业务方唯一流水号 否 3、返回数据 参数 类 型 说明 errcode int 错误码 errmsg string 错误信息 user_id_key string 用于后台交互表示用户姓名、身份证的凭证 expires_in uint32 user_id_key 有效期,过期需重新获取 [代码]{ "errcode" : 0, "errmsg" : "ok", "user_id_key" : "id_key_xxxx", "expires_in": 3600 } [代码] 4、后台消息推送 如果业务方传入out_seq_no,核身完成后会通过消息推送回调给业务方的服务器,如果回调业务方失败,会在5s尽力推送,超过5s不再推送。 参数说明 参数 类 型 说明 ToUserName string 小程序原始ID FromUserName string 事件消息openid CreateTime uint32 消息推送时间 MsgType string 消息类型 Event string 事件类型 openid string 核身用户的openid out_seq_no string 业务方唯一流水号 verify_result string 核身返回的加密key(凭据) 返回示例 [代码]{ "ToUserName": "gh_81fxxxxxxxx", "FromUserName": "oRRn15NUibBxxxxxxxxx", "CreateTime": 1703657835, "MsgType": "event", "Event": "face_identify", "openid": "oRRn15NUibBxxxxxxxxx", "out_seq_no": "test1234", "verify_result": "XXIzTtMqCxwOaawoE91-VNGAC3v1j9MP-5fZJxv0fYT4aGezzvYlUb-n6RWQa7XeJpQo0teKj8mGE4ZcRe1JI3GqzADBYORBu613rKjKAFfEXTXw_bu1bs7MnmPOpguS" } [代码] 四、再次获取核验结果api 此接口是前端完成人脸核身后,基于前端返回的凭据,通过后台api再次进行核验结果和身份信息的校验,有助于提高安全性,请务必接入! 前端获取结果不可信,存在被篡改的风险,为了保障请求结果安全性,请务必对identify_ret、id_card_number_md5、name_utf8_md5字段进行校验! (一)API说明 1、说明 人脸核身之后,开发者可以根据jsapi返回的verify_result向后台拉取当次认证的结果信息。 2、请求URL https://api.weixin.qq.com/cityservice/face/identify/getinfo?access_token={access_token} 3、请求方式 POST 4、请求格式 json (二)请求数据说明 1、请求 参数 类型 是否必填 描述 verify_result String 是 jsapi返回的加密key(凭据) 2、数据返回 HTTP 头如下 Date: Mon, 06 Feb 2017 08:12:58 GMT Content-Type: application/json; encoding=utf-8 Content-Length: 85 Connection: close json示例 [代码]{ "errcode" : 0, [代码] [代码]"errmsg" : "ok", "identify_ret" : 0, "identify_time" : 1486350357 "validate_data": "8593" [代码] [图片] (三)返回参数说明 1、返回参数 注:errcode和identify_ret同时为0,代表本次认证成功。 参数 类型 描述 errcode int 错误码, 0表示本次api调用成功 errmsg string 本次api调用的错误信息 identify_ret int 人脸核身最终认证结果 identify_time uint32 认证时间 validate_data string 用户读的数字(如是读数字) openid string 用户openid user_id_key string 用于后台交互表示用户姓名、身份证的凭证 finish_time uint32 认证结束时间 id_card_number_md5 string 身份证号的md5(最后一位X为大写) name_utf8_md5 string 姓名MD5 2、错误码对应信息 errcode 备注 84001 非法identity_id 84002 用户信息过期 84003 用户信息不存在 五、小程序辅助接口:检查设备是否支持人脸检测 1、接口名称 接 口 :wx.checkIsSupportFacialRecognition(OBJECT) 功能:检查设备是否支持人脸检测 2、接口说明和使用 小程序调用该接口,可以检测当前手机设备是否具备支持人脸检测的能力,可与以上接口分开使用,为了用户体验,建议调用后对手机设备不支持的用户做对应功能处理。 3、接口说明和使用 01 OBJECT 参数说明: 参数 类型 是否必填 描述 success Function 否 调用成功回调 fail Function 否 调用失败回调 complete Function 是 调用完成回调(成功或失败都会回调) checkAliveType Number 否 人脸核验的交互方式,默认读数字(见表 2) 表 2:checkAliveType 的值和对应的解释: 参数 解释 2 先检查是否可以屏幕闪烁,不可以则自动为读数字 02 CALLBACK 返回参数 参数 类型 说明 errMsg Boolean 错误信息 errCode Number 错误码 03 回调结果说明 回调类型 ErrCode 说明 sucess 0 支持人脸采集 fail 10001 不支持人脸采集:设备没有前置摄像头 fail 10002 不支持人脸采集:没有下载到必要模型 fail 10003 不支持人脸采集:后台控制不支持 回调结果说明仅对Android生效,iOS不返回errcode。 04 示例代码 [图片] 六、安全性说明 为保障业务可用性以及安全性,请详细研读微信人脸核身接口相关基础说明及安全说明文档:https://docs.qq.com/doc/DTFB0YWFIdGV6amly 备注:如开发中遇到任何疑问,可以点击此处通过社区反馈,将有工作人员跟进回复。 七、案例展示及补充说明 安徽医科大学第二附属医院,微信人脸核验登录: 安徽医科大学第二附属医院,是三级甲等综合医院。其小程序为用户提供挂号、门诊费用、住院费用、检查报告、体检等医疗服务,同时也提供停车、餐饮等便民服务,是医疗小程序中完整的案例。 小程序使用了微信人脸核验能力作为登录的核验。满足医院管理要求,也满足国家对于实名就医的管理规则。 案例实现的截图效果如下: [图片] [图片] 针对近期少数小程序方面反馈的两类问题,也在本课程进行补充说明。 1、本接口的开放范围,即:可支持的主体类目,是否可以扩大? 说明:基于本接口整体使用范围的评估、相关法规的参考、监管策略的理解执行等,暂时未立刻进行扩大开放范围的工作。 但我们会持续基于不同行业的法规、政策及监管要求等,逐一进行研究考量,以便确认如何扩大开放范围。 2、小程序如果涉及用户本人的生物特征采集,(如本人人脸照片、人脸视频),或涉及采集用户本人生物特征信息并开展人脸核验功能,则存在被驳回的情况? 说明:近两年“人脸识别”技术在社会上掀起了热潮。人脸识别虽然作为摆脱“中间媒介”或“承载载体”的一种直接技术手段,解决了部分政务、交通、医疗、零售等证明“操作者是本人”的问题,但也因此,引入了新的更大的安全风险。 一是,虚假安全风险。 身份认证领域的安全三因素包括“我知道什么”、“我拥有什么”、“我的特征是什么”,通用的安全做法,是要双因素认证(2FA),人脸识别技术如仅凭“我的特征是什么”这一个因素,则容易被攻破或利用。表象给用户以安全的感觉,但实际并不能达到安全效果。 二是,信息泄漏的风险。 越来越多的组织或个人,在并非必需用户敏感信息、生物特征的情况下,采集并存储此类信息。在信息加密、传输、存储过程中,容易暴漏更多的网络节点,使得此类信息有更大的风险被网络黑客拦截、窃听、窃取,或直接被脱库。 三是,消除风险的难度大。 以往基于“中间媒介”或“承载载体”的方式,如出现丢失、被冒用、恶意盗用等风险,可以通过挂失、更换、使用新载体或新媒介等方式,快速排除一定的风险。C端主动,B端主动,都能解决一部分问题。但人脸识别做为更直接的方式,一旦出现冒用、盗用,受害者将面临更大的财产及人生安全风险,且C端用户更多时候无法主动消除风险。 基于以上问题风险,加之国家出台《网络安全法》、《用户隐私保护条例》等法律法规标准,网信办、公安部、工信部及市场监管总局等四部委发起的app获取隐私整治,结合平台安全、用户敏感隐私信息保护要求及监管,针对部分暂无相关法规或要求,需要采集或生物认证方式进行身份核验的,或以“追热点”或“尝鲜”为目的,采集用户生物特征或进行身份核验的,进行严格审核,必要时不予以支持。
星期一 15:19