微信小程序 md5签名-微信小程序获取签名
4.1 关于插件/wx 接口
4.1.1 接入VoIP插件时,设备和用户的绑定有两种模式,我要使用哪一种?
所有设备均可使用“设备IoT”场景,如针对校园场景的官方刷脸能力有特殊需求,可选择“校园场景支付刷脸模式”。
4.1.2 如何实现用户和设备的关联?
硬件开发者需建立小程序用户openid、小程序appID、硬件设备之间的关联。用户在手机端授权后设备才可拨打。
正式流程:C端用户在小程序授权设备提醒 —— 设备发起通话 —— 微信提醒 —— 用户点击进入小程序接听;
C端表现如下:
4.1.3 设备和小程序通话结束后,手机端小程序的结束页面有个“关闭”按钮,能直接关闭小程序?
暂不支持,所有小程序的关闭都是需要点击右上角的“胶囊”关闭。目前该关闭按钮可以通过插件文档的指引设置跳转去小程序的其他页面。
4.1.4 手机端微信小程序支持回拨设备吗?
支持,通过接口来调用,详情查看开发文档的 5.4 手机微信拨打设备
4.1.5 我们是硬件厂商,是否可以限制用户的单次通话时长?
可以,发起通话后,调用插件 forceHangUp接口,例如,收到startVoIP事件后,定时器去做,或者根据calling事件keepTime去做。
4.1.6 在门禁、门锁场景,如何在手机端通话页面实现“开门“等功能?
插件提供了手机端通话页面自定义按钮的功能,开发者可配置相关页面进行跳转。详见 开发文档的 5.3.2 节中的「自定义通话页面」
C端用户体验如下:
4.1.7 从手机端看到设备端的来电名称是怎样?可以自定义吗?
为强化设备通话的认知、保证用户体验统一,手机端用户授权设备名称、接听设备来电的名称需保持一致。授权设备名称=来电方名称=开发者自定义名称+设备类型名称,如“艾玛的希沃网课学习机“,下图所示。开发者需要考虑名称显示,对名称做好规范。
(案例示意:订阅设备名称、来电方名称、语音通话中设备名称)
4.1.8 小程序内调用 wx 接口报错 invalid scope 或 api unauthorized?
一般情况是没开通对应权限,请提供 appid 联系行业对接的同事处理,或通过社区反馈。
4.2 关于设备
4.2.1 设备的唯一性是怎么规定的?硬件开发者应该怎样配合?
我们要求硬件的emmc存储分区写入唯一key,且写入后不可更改,以保证设备的唯一性,从而保障通话安全。这样会要求:硬件开发者传给微信的设备sn不可变化,且硬件端运行的小程序只能为一个,不可更改。
如果遇到设备需要维修/售后的情况,强烈建议开发者不要随意更改设备sn,否则会影响用户通话权限。
注意:WMPF 时使用的 deviceId/SN 和 VoIP SDK registerVoIPDevice 传入的 SN 必须一致。否则会导致拨打电话时 VoIPToken 无效(errCode=13)。
4.2.2 我是高通的设备,只需要集成针对高通的 rpmbd 就行了吗?
高通的系统不支持对于 emmc 的 rpmb 分区读写,只支持在 TEE(qsee) 下访问,所以先需要高通主板方案商增加一个 TA,再使用 qsee_test 测试通过(有0x00~0xFF数据输出)后,再集成高通版本的 rpmbd。
4.2.3 每个设备都要注册吗?设备又是怎么激活的?
每个SN都是需要注册的,激活过程如下:
1. 在开发者的后端,通过 addDevice 接口提前将所有的SN注册到微信后台(注意:access_token 需使用 LauncherApp 的 appId 生成,而不是小程序 appId)。
2. 参考官方提供的签名工具示例,生成针对每个SN的签名,这一步建议在开发者的后台提前生成好。
3. 在设备上进行 ActiveDevice进行设备的激活,此时的签名建议从开发者后台获取。
4.2.4 WMPF ActiveDevice 怎么总是报 signature err 1?
signature err 是后台发现签名对不上,一般是因为如下原因:
(1)在开发者后台生成签名时,生成签名环境的 openssl 版本推荐使用 1.1.1,已确定 1.0.x 和 3.0.x 版本不能用,其它版本开发者可自行尝试。
(2)WMPF 文档中提供的签名工具只适用于调试,mmIoT_ecdsa_sign.sh 脚本或 java 接口生成签名时,不支持并发操作。
(3)有一个已知bug,在传入错误的设备签名激活设备失败后,需要在系统设置中清除 APP 缓存后,使用正确的签名才能激活设备。否则会一直报失败。
4.2.5 getsnticket接口返回 {"errcode": 48001, "errmsg": "api unauthorized rid: xx "} 是什么原因?
(1)确认接口里的 access_token 是根据小程序 appid 来获取。
(2)确认机型申请和绑定小程序等流程都已经完成。
(3)确认在得到小程序 appid 的 access_token 前,ActiveDevice 已经完成。
4.2.6 点击右上角胶囊有”退出设备登录“和”关闭小程序“的选项,可以去掉吗?
可以隐藏,具体提供hostappid、小程序appid给行业经理开权限,然后调接口。加完权限后app去调用initGlobalConfig里字段closeButtonActionType: 10,设置完打开小程序,预期点击胶囊按钮的关闭,会弹出“不支持关闭小程序”。
4.2.7 某些情况下,设备端收不到推送的 pushMessage?
常见的有几种情况
(1)设备端未联网,请确认网络畅通。
(2)设备端 WMPF 未启动或未激活,请确保 WMPF 正常运行。
(3)WMPF 因 crash 等原因异常退出,建议监听 IPCInvoker.addRemoteProcDiedListener(WMPFService.WMPF_SERVICE_PROCESS_NAME, listener),在 WMPF 退出后重新拉起
(4)存在一个已知问题,WMPF 退出后,需要重新获取 pushToken 后才能正常收到消息。下个版本会修复。
4.3 关于设备端小程序
4.3.1 硬件端小程序启动较慢,有没有优化方案?
可以参考开发文档的 5.5 性能优化。建议采用 WMPF 小程序预热的方案
4.3.2 调通后,设备端的小程序用户登录环节是否可去掉?
可以微信小程序 md5签名,需要小程序的开发团队把用户态相关的调用去掉,如 wx.login 等。为不影响小程序端原有登录业务的使用,建议判断 wmpf 环境决定是否去掉。
4.3.3 如何判断小程序是在设备端(wmpf,硬件框架环境)还是手机端打开?
js中通过 typeof wmpf !== undefined 可以判断,硬件框架会注入 wmpf 这个全局变量
4.3.4 应用端想监听小程序发送过来的信息是调用哪个api接口?
registerEvent | 微信开放文档
4.3.5 设备端是否有办法知道用户是否授权了?
可以,用户授权后小程序可以自行记录 sn 和 openid 的关系。接下来我们会提供一个接口,查询用户订阅过的设备列表(包括拒绝)。
4.3.6 在 launcherApp 中怎么给小程序传递参数?
1. 简单的单向传递场景可以在启动小程序时的 path 中带上 query。
2. 需要双向通信或者数据量大时可以通过 WMPF 提供的通信通道
4.3.7 手机端挂电话后,设备端怎么关闭 WMPF?
小程序收到 VoIP 插件的 endVoIP 事件后微信小程序 md5签名,通过WMPF 提供的通信通道通知 App。App可以选择调用CloseWxaApp 时关闭小程序或切后台(通过 keepRunning 参数)
4.3.8 接听的手机端看到的画面旋转了90度怎么办?
可以用initGlobalConfig 设置如下参数:
{"cameraRotationAngle":90}
270 度同理。
4.3.9 IoT 设备调用插件 initByCaller 发起通话时报错 errCode: 4
IoT 场景下,设备端的 WMPF 不能进行扫码登录,需要先退出登录才能发起通话。
4.3.10 是否支持设置最长通话时长?
开发者可以自行通过事件去设置最长通话时长
4.3.11 是否支持设置呼叫超时时长(呼叫时对方如果不接听,会截断呼叫)?是否支持轮询呼叫?
开发者可以自行设置超时,比如设备端呼出电话后30s没接听调用挂断接口,再自动拨给其他人。也可以设置轮询呼叫,如业务场景:101号房有A、B、C三位业主,打给A业主30S未接听,可自动打给B。
4.3.12 WMPF 获取不到正确的摄像头,或摄像头画面旋转
可以使用 InitGlobalConfig 接口指定小程序使用的摄像头三元组(productId、vendorId、serialNumber),也可以指定摄像头画面的旋转角度。
fun initGlobalConfig() {
val jsonConfig = JSONObject()
try {
//三元组匹配摄像头
jsonConfig.put("usbCameraProductId", 0)
jsonConfig.put("usbCameraVendorId", 0)
jsonConfig.put("usbSerialNumber", "")
// 如果 wmpf 预览画面方向不对,根据实际情况调整角度
jsonConfig.put("usbCameraRotationAngle", 180)
// 如果推流方向不对(即微信侧视频方向不对),调整 true / false
jsonConfig.put("usbCameraPushFlip", false)
val json = jsonConfig.()
LogUtils.d(TAG, "initGlobalConfig", json)
Api.initGlobalConfig(json)
.subscribe({
LogUtils.d(TAG, GsonUtils.toJson(it))
warmLaunch()
}, {
LogUtils.d(TAG, GsonUtils.toJson(it))
warmLaunch()
})
} catch (e: Exception) { }
}
4.3.13 设备端无摄像头或不希望传画面(设备无摄像头或者设备端比较敏感的场景)、手机端不希望传画面(门禁、门锁场景),应该怎样实现?
用最新版插件,可以控制callerorlistener默认摄像头状态
dev-14a5915d23dcc99512de366153791307
在initByCallercallerorlistener中新增cameraStatus0是开1是关
4.4 音视频通话及提醒
4.4.1 音视频通话的码流是多少?占用多少流量?
根据测算,语音通话大概是2MB/分钟,视频是10-30MB/分钟。
4.4.2 手机端未收到微信通话强提醒或提醒强度不符合预期(锁屏未提醒、未响铃、未震动等)
请确认下以下几个设置是否正常:
(1)手机系统需开启非静音、非振动模式;
(2)需开启微信消息提醒:「微信客户端」-「我」-「设置」-「消息通知」- 「语音和视频通话提醒」、「消息通知横幅」已经开启
(3)需开启服务通知的提醒:「服务通知」-「设置」 - 「消息免打扰」未开启,「播放语音提醒」已开启
(4)需开通对某个小程序的消息授权:「小程序设置页」-「语音、视频通话提醒」已开启
上面条件满足的情况下,可以确认下同一台手机,微信好友和好友之前的通话提醒有没有语音震动。如果都没有,属于微信客户端问题,如果仅微信硬件VoIP不正常,说明微信硬件VoIP有问题。相关问题可反馈微信号、日志、发生时间、手机机型、微信客户端版本号等信息到社区。
4.5 已知 bug 及处理方法
4.5.1 拨打电话需要用户授权时,用户还没有操作授权就会弹框「接入失败,请重试」
授权处理有问题,临时方案可以等用户授权完成后重新发起通话,或者由系统默认授予相应麦克风和摄像头权限。WMPF已修复,版本要求1.1.5以上。
4.5.2 在传入错误的设备签名激活设备失败后,后续使用正确的签名也无法激活成功
可以先尝试在系统设置中清除 APP 缓存后,再使用正确的签名激活设备。WMPF已修复,版本要求1.1.5以上。
4.5.3 WMPF 退出后,使用之前获取的 pushToken 无法收到消息
WMPF 退出后,可以先尝试重新获取下 pushToken。WMPF已修复,版本要求1.1.5以上。
其他未涉及问题,可通过硬件服务社区向我们反馈。
VoIP在技术接入、查看用量和支付过程中遇到报错,应该怎么办?
可以多试几次。如依然出现相关问题,可以留言以下信息供我们定位:
- 问题描述:
- 小程序appid:
- 小程序名称:
- 小程序主体:
- 报错时间:
- 报错界面截图: