# 青蛙小程序 - 特殊API
更新記錄
版本 | 簡要說明 | 修改日期 |
---|---|---|
1.0 | 接口限制使用紅色或顯眼的顏色標明,避免研發(fā)人員閱讀時遺漏 | 2021/12/10 |
# 1.背景
小程序廣泛的用于手機微信,為了方便商戶在青蛙機具上進行更多的定制化開發(fā),青蛙人臉App目前也初步支持運行小程序。
本文檔用于說明,青蛙小程序開發(fā)者如何使用青蛙人臉App的特殊小程序API完成商戶小程序的開發(fā),更好的完成青蛙上的商戶服務小程序。
微信小程序已經(jīng)具備了很多小程序API供開發(fā)者使用,青蛙小程序源自微信小程序,能夠做到開發(fā)、API、用戶體驗和微信小程序基本保持一致。
但是由于微信小程序部分API高度依賴手機微信環(huán)境,這些API青蛙小程序無法支持。
后續(xù)我們將會給出詳細的不可用接口列表,這邊對青蛙小程序無法支持的API進行一個大致的說明,他們包括:
- 強手機相關的API:例如通訊錄API,電話API
- 生物認證相關的API
- 支付相關的API
# 2.青蛙特殊API介紹
小程序開發(fā)者,在開發(fā)青蛙小程序時,可以使用青蛙人臉App,獨立于手機微信小程序API的特殊能力,我們稱之為青蛙小程序API。
# 2.1. 青蛙特殊API的類型
青蛙小程序特殊API,從技術角度來講可以分為兩種:
- AsyncJsApi:商戶小程序開發(fā)者主動調(diào)用,青蛙負責回調(diào)通知調(diào)用結果,操作流程是異步的
- JsEvent:商戶小程序開發(fā)者主動監(jiān)聽Event,設置回調(diào),特定Event觸發(fā)后,商戶小程序開發(fā)者設置的Event回調(diào)會被自動執(zhí)行,操作流程也是異步的
AsyncJsApi范例
wxfaceapp.writeToSerialPort({
msgToFlush:"msg",
success(res){
console.log("success [writeToSerialPort]")
},
fail(res){
console.log("fail [writeToSerialPort]")
console.log(res.reply)
}
})
JsEvent范例
wxfaceapp.onRemoteMessage(function (res) {
console.log("onRemoteMessage retCode = " + res.replyCode)
})
# 2.2. API分類
從業(yè)務上來說,我們可以講青蛙特殊API分為下面幾大類別:
- 基礎能力API:提供一些青蛙App特有的基礎能力給商戶小程序,例如查詢系統(tǒng)信息、設備信息,小程序的啟動、關閉、通信能力等;
- 硬件能力API:提供一些基于青蛙App的承載硬件的能力給商戶小程序,例如數(shù)據(jù)寫串口、掃碼器控制、鍵盤監(jiān)聽等;
- 支付相關API:提供青蛙App的人臉支付相關API給商戶小程序,例如刷臉支付、快速支付、查詢支付狀態(tài)等;
- 登錄相關API:提供青蛙App的人臉登錄相關API給商戶小程序,例如刷臉登錄、退出登錄等;
- 特殊能力API:提供一些特殊場景下的拓展API給商戶小程序,如會員場景下,發(fā)送傳碼、收款指令、支付或登錄過程取消刷臉等;
# 2.3. 使用注意事項
第一點:調(diào)用時機
青蛙特殊API的本質(zhì)是小程序Js基礎庫的"插件",所以在小程序js基礎庫尚未加載完畢前,調(diào)用青蛙特殊API將不會有任何效果。
通俗一點的說法,就是商戶小程序開發(fā)者,需要在確保page.onLoad
這個生命周期函數(shù)回調(diào)完畢后,調(diào)用特殊API。
第二點:與三方框架的兼容問題
目前在開發(fā)過程中,發(fā)現(xiàn)如果商戶小程序開發(fā)者使用了一些跨平臺開發(fā)庫的時候,會出現(xiàn)特殊API無法調(diào)用的問題,目前我們正在努力解決中。
# 3.基礎能力API
# 3.1. 獲取系統(tǒng)信息 - checkWxFacePayOsInfo
2.13版本修改:
新增4個字段:
- appVersion
- deviceInfo
- runningMode
- screenInfo
接口限制:無
項目 不支持的具體條目 模式相關 無 機具相關 無 屏幕相關 無
青蛙小程序可以通過wxfaceapp.checkWxFacePayOsInfo
獲取青蛙機具,和青蛙人臉App的相關信息。
建議在小程序運行的時候首先調(diào)用此函數(shù)確認一些必要信息。
當機具和青蛙人臉App處于錯誤狀態(tài),或是小程序環(huán)境出現(xiàn)問題時,此函數(shù)會進行失敗回調(diào)。
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.checkWxFacePayOsInfo({
success(res){
console.log("success [checkWxFacePayOsInfo]")
console.log(res.osVersion)
console.log(res.osStatus)
},
fail(res){
console.log("fail [checkWxFacePayOsInfo]")
console.log(res.osErrorMsg)
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
osVersion | String | 該青蛙機具中青蛙App的版本號 |
osStatus | String | 青蛙機具與人臉App狀態(tài),成功回調(diào)返回"valid" |
osSerialNumber | String | 該青蛙機具的設備號 |
appVersion | String | 預留字段,后期用于標識小程序容器版本號,目前與osVersion相同 |
deviceInfo | String | 設備信息{FacePay-L1:青蛙基礎版;FacePay-L2:青蛙PRO版;unofficial-device:非官方設備} |
runningMode | String | 運行模式{sdk:sdk運行模式;lpos:青蛙運行模式} |
screenInfo | String | 小程序運行的屏幕(非PRO設備不需要關心){front-screen:前屏;back-screen:背屏;} |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
osErrorMsg | String | 獲取系統(tǒng)信息失敗的錯誤提示 |
# 3.2. 啟動小程序 - launchMp
2.30版本修改:
- launchMp接口重復調(diào)用優(yōu)化:背屏如果已經(jīng)啟動了參數(shù)中指定的小程序(AppId,miniappType一致),那么會直接回調(diào)成功,并把小程序拉至前臺。
2.13版本修改:
- 背屏目前已經(jīng)開放掃碼登錄,如果已經(jīng)掃碼登錄完成,則
needLogin
參數(shù)無需限制為0接口限制:
- 該接口僅支持青蛙模式,不支持SDK模式
- 該API只能在青蛙PRO上成功調(diào)用
- 目前只支持青蛙PRO的「前屏小程序」啟動「背屏小程序」
- 接口傳入?yún)?shù)目前不支持
miniappType=1
,原因是目前小程序的開發(fā)版還無法在青蛙機具上正確運行
項目 不支持的具體條目 模式相關 SDK模式 機具相關 青蛙基礎版,非微信支付官方設備 屏幕相關 后屏
青蛙PRO上的商戶小程序可以通過wxfaceapp.launchMp
,啟動一個指定的背屏小程序,背屏小程序被啟動后將會運行在青蛙PRO的背屏。啟動校驗成功后,前屏小程序?qū)盏絾映晒Φ幕卣{(diào)。
調(diào)用范例如下:
//啟動背屏小程序
wxfaceapp.launchMp({
appId: "背屏小程序的Appid",
hostAppId: "背屏小程序的主體ID",
miniappType: 0,//小程序版本類型
launchPage: "背屏小程序的啟動頁面",
needLogin: 0,//是否需要登錄態(tài)
success(res) {
console.log('launchMp suc')
originThz.setData({
launcMpResult: res.reply
})
},
fail(res) {
console.log('launchMp failed reply = ' + res.reply)
originThz.setData({
launcMpResult: res.reply
})
}
})
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
appId | String | 需要啟動的后屏小程序的AppId |
hostAppId | String | 需要啟動的后屏小程序的主體ID |
miniappType | int | 小程序的版本信息{0:正式版;1:開發(fā)版;2:體驗版} |
launchPage | String | 小程序的啟動頁面 |
needLogin | int | 是否需要登錄態(tài){0:不需要;1:需要} |
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示啟動后屏小程序成功 |
reply | String | 返回信息,成功回調(diào)返回"suc calling" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 后屏小程序正在啟動,請勿重復啟動 |
"-2" | 青蛙小程序內(nèi)部錯誤 |
"-3" | 啟動超時 |
"-4" | 小程序參數(shù)設置有誤 |
"-5" | 小程序啟動通信異常 |
"-6" | 機具不支持此功能 |
# 3.3. 退出小程序 - exitMp
接口限制:無
項目 不支持的具體條目 模式相關 無 機具相關 無 屏幕相關 無
青蛙小程序可以通過exitMp
主動的退出當前正在運行的小程序容器。即:再次啟動該小程序,會觸發(fā)完整的加載流程。
- 前屏:調(diào)用
exitMp
的同時,基于保障隱私安全的目的,也會清除前屏顧客當前的登錄態(tài)信息(i.e.,再次進入某個需要顧客登錄的小程序,還需要進行刷臉登錄操作) - 背屏:調(diào)用
exitMp
后,則不會清掉背屏用戶當前的登錄信息,避免背屏的收銀操作者反復頻繁登錄
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.exitMp({
success(res){
console.log("exit mini app!")
}
})
具體錯誤碼如下:
該API調(diào)用即生效,無回調(diào)信息
# 3.4. 小程序間消息發(fā)送 - postMsg
接口限制:
- 該API只支持青蛙模式,不支持SDK模式
- 該API只能在青蛙PRO上成功調(diào)用
- 該API有傳輸內(nèi)容限制,2.13版本及其以上版本,限制字符數(shù)為2000字符
- 這個接口能夠發(fā)送作用的前提是,青蛙PRO的前屏和背屏的小程序已經(jīng)處于運行狀態(tài)
項目 不支持的具體條目 模式相關 SDK模式 機具相關 青蛙基礎版,非微信支付官方設備 屏幕相關 無
青蛙PRO上的商戶小程序可以通過wxfaceapp.postMsg
,向前屏/背屏小程序發(fā)送本地文本消息,進而達到更加快速的進行小程序與小程序間的通信。
調(diào)用范例如下:
//向另一端屏幕上的小程序發(fā)送消息
wxfaceapp.postMsg({
targetAppid: "接受消息的小程序APPID",
content: "this is frog jsapi demo, saying hello",
success(res) {
console.log('sendMsgResult suc')
},
fail(res) {
console.log('sendMsgResult failed reply = ' + res.reply)
}
})
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
targetAppid | String | 需要接受消息的小程序的AppId |
content | String | 傳遞的消息內(nèi)容 |
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示發(fā)送消息成功 |
reply | String | 返回信息,成功回調(diào)返回"suc sending msg" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 后屏小程序未在運行狀態(tài) |
"-2" | 接收端的小程序AppId不匹配 |
"-3" | 字符數(shù)超出限制 |
"-4" | 輸入?yún)?shù)有誤 |
"-5" | 小程序運行狀態(tài)有誤,不支持消息接收和發(fā)送 |
"-6" | 上一條消息正在發(fā)送中 |
"-7" | 青蛙小程序內(nèi)部未知錯誤 |
"-8" | 發(fā)送消息超時 |
# 3.5. 小程序間消息接受 - onRemoteMessage
接口限制:
- 該API只支持青蛙模式,不支持SDK模式
- 該API只能在青蛙PRO上成功被激活
項目 不支持的具體條目 模式相關 SDK模式 機具相關 青蛙基礎版,非微信支付官方設備 屏幕相關 無
青蛙PRO上的商戶小程序可以通過wxfaceapp.onRemoteMessage
,接受另一屏幕的小程序所傳來的消息。
調(diào)用范例如下:
//接受另一端屏幕上的小程序發(fā)來的消息
wxfaceapp.onRemoteMessage(function (res) {
console.log("onRemoteMessage retCode = " + res.replyCode)
console.log("sending from:" + res.senderAppid)
console.log("msg content:" + res.content)
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
senderAppid | String | 發(fā)送本條消息的小程序Appid |
content | String | 傳遞的消息內(nèi)容 |
# 3.6. 進入青蛙系統(tǒng)設置頁 - launchWxFacePaySetting
接口限制:
- 該API只支持青蛙模式,不支持SDK模式
- 該API支持2.21及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 無 屏幕相關 無
青蛙小程序可以通過wxfaceapp.launchWxFacePaySetting
進入青蛙系統(tǒng)設置頁,在青蛙PRO機具上,系統(tǒng)設置頁會背默認啟動到背屏。
該API主要用于通過API的形式提供給商戶主動進入青蛙系統(tǒng)設置頁的能力。
調(diào)用范例如下:
//進入青蛙系統(tǒng)設置頁
wxfaceapp.launchWxFacePaySetting({
success: res => {
console.log('success [launchWxFacePaySetting]')
},
fail: res => {
console.log("fail [launchWxFacePaySetting]")
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回0表示成功,返回-1表示青蛙系統(tǒng)設置頁啟動失敗 |
reply | String | 返回信息,注冊成功返回返回"ok" |
# 4.硬件能力API
# 4.1. 數(shù)據(jù)寫串口 - writeToSerialPort
接口限制:
- 該接口僅支持青蛙模式,不支持SDK模式
- 該接口僅支持
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備(i.e.,非青蛙PRO,青蛙基礎版) 屏幕相關 無
青蛙小程序可以通過wxfaceapp.writeToSerialPort
將數(shù)據(jù)信息經(jīng)由青蛙人臉App,通過串口傳入POS機,進行一些定制化功能開發(fā),例如寫入手機號、會員碼等等。
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.writeToSerialPort({
msgToFlush:"需要傳入串口至POS機的信息",
success(res){
console.log("success [writeToSerialPort]")
console.log(res.replyCode)
console.log(res.reply)
console.log(res.flushedMsg)
},
fail(res){
console.log("fail [writeToSerialPort]")
console.log(res.replyCode)
console.log(res.reply)
}
})
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
msgToFlush | String | 開發(fā)者需要通過串口傳入POS機的信息 |
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示寫入成功 |
reply | String | 返回信息,成功回調(diào)返回"success" |
flushedMsg | String | 成功寫入串口的信息 |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"-1"表示寫串口失敗 |
reply | String | 錯誤具體信息 |
# 4.2. 注冊監(jiān)聽鍵盤輸入 - registKeyBoard
2.13版本修改:
- 目前該指令將會支持青蛙一代和青蛙PRO兩種機具
接口限制:
- 該API只支持青蛙模式,不支持SDK模式
項目 不支持的具體條目 模式相關 SDK模式 機具相關 無 屏幕相關 無 請注意:
1.由于不同的商戶可能會使用不同的鍵盤,需要監(jiān)聽的KeyCode沒有一個統(tǒng)一的標準,所以KeyCode部分我們決定開放給開發(fā)者自行定制。在使用前,商戶開發(fā)者需要自行確認自己使用的鍵盤所用的KeyCode都是哪些
青蛙小程序可以通過wxfaceapp.registKeyBoard
進行鍵盤輸入的監(jiān)聽,具體監(jiān)聽哪個按鍵,由商戶自己定義。
該API主要用于進行某些特殊的商戶自定義指令響應(e.g.,按下鍵盤按鈕“1”,小程序跳轉至某個特定頁面)。
如果商戶需要利用小鍵盤進行一些輸入操作(e.g.,輸入支付金額),那么不需要使用本接口,即可完成,推薦的做法有:
- 使用小程序的
Input
組件,連接上外接小鍵盤,完成輸入 - 使用商戶自定制的小程序數(shù)字軟鍵盤,直接完成輸入
調(diào)用范例如下:
//需要監(jiān)聽的鍵盤按鍵,所對應的KeyCode
data: {
curInputValue: "",
keyCodeLst: [
{ keyCode: "144" }, //青蛙原生小鍵盤按鍵 - 1
{ keyCode: "145" }, //青蛙原生小鍵盤按鍵 - 2
{ keyCode: "146" }, //青蛙原生小鍵盤按鍵 - 3
{ keyCode: "147" }, //青蛙原生小鍵盤按鍵 - 4
{ keyCode: "148" }, //青蛙原生小鍵盤按鍵 - 5
{ keyCode: "149" }, //青蛙原生小鍵盤按鍵 - 6
{ keyCode: "157" }],//青蛙原生小鍵盤按鍵 - +號
info: ""
},
//注冊鍵盤監(jiān)聽
wxfaceapp.registKeyBoard({
keyCodeList: this.data.keyCodeLst,
success(res) {
console.log("success [registKeyBoard]")
console.log(res.replyCode)
console.log(res.reply)
},
fail(res) {
console.log("fail [registKeyBoard]")
console.log(res.replyCode)
console.log(res.reply)
}
})
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
keyCodeList | 數(shù)組 | 定義了需要監(jiān)聽的各個按鍵所對應的AndroidKeyCode,注意,此輸入不可為空,數(shù)組中的某個子Item也不可為空 |
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回0表示成功,返回-1表示輸入?yún)?shù)解析失敗 |
reply | String | 返回信息,注冊成功返回“Success register to listen keyboard event” |
# 4.3. 監(jiān)聽鍵盤輸入 - onKeyBoardEvent
在利用wxfaceapp.registKeyBoard
進行了鍵盤監(jiān)聽的注冊后,我們可以通過onKeyBoardEvent
來監(jiān)聽我們想要的鍵盤按鍵事件,做出相應的處理。
調(diào)用范例如下:
//注冊鍵盤監(jiān)聽
wxfaceapp.registKeyBoard({
keyCodeList: that.data.keyCodeLst,
success(res) {
console.log("success [registKeyBoard]")
//注冊成功后,設置鍵盤按鍵響應回調(diào)
wxfaceapp.onKeyBoardEvent(function (res) {
console.log("onKeyBoardEvent name = " + res.keyName)
})
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
keyName | String | 返回碼,返回0表示成功 |
# 4.4. 打開掃碼器 - startCodeScanner
2.30版本修改:
1.此接口開始在青蛙基礎版(青蛙一代)上支持,有此場景接入訴求的商戶開發(fā)者們可以進行適配
接口限制:
1. 此接口僅支持青蛙模式,不支持SDK模式
2. 此接口支持青蛙PRO機具與青蛙一代(2.30版本開始支持)
3. 此接口目前無法在背屏調(diào)用
4. 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備 屏幕相關 后屏
主要服務于青蛙設備。微信青蛙機具同樣具備掃碼支付的能力。對于掃碼器硬件提供了本API的操作打開的能力,默認是開啟的,可以多次調(diào)用。掃碼器支持各色付款碼、條形碼以及二維碼。
本接口的作用是打開掃碼器,為保障青蛙設備的掃碼能力可用性,對于掃碼器的操作,需要注意如下幾點:
startCodeScanner
的能力是打開掃碼器,是直接操作了硬件,listenCodePayment
是聲明小程序?qū)叽a器的監(jiān)聽,兩者的事件是相互獨立的,即:掃碼器的開關不會影響到小程序?qū)叽a器的監(jiān)聽開關。- 為保障青蛙設備的掃碼能力可用性:每次打開或者關閉小程序的時候,青蛙設備都會默認強制打開掃碼器;小程序啟動了刷臉流程等青蛙原生行為時,也會主動強制打開掃碼器。因此,建議小程序開發(fā)者在自身業(yè)務明確需要時才去操作掃碼器的打開與關閉。
掃碼器的開關與掃碼器的監(jiān)聽關系如下:
掃碼器開關 | 聲明監(jiān)聽掃碼器 | 說明 |
---|---|---|
startCodeScanner (打開掃碼器) | listenCodePayment (監(jiān)聽掃碼器) | 能夠正常監(jiān)聽到掃碼器事件 |
startCodeScanner (打開掃碼器) | stopListenCodePayment (取消監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為未設置掃碼器監(jiān)聽 |
stopCodeScanner (關閉掃碼器) | listenCodePayment (監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為掃碼器未打開 |
stopCodeScanner (關閉掃碼器) | stopListenCodePayment (取消監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為掃碼器未打開且未設置掃碼器監(jiān)聽 |
調(diào)用范例如下:
// 打開掃碼器
wxfaceapp.startCodeScanner({
success: res => {
console.log("打開掃碼器成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("打開掃碼器失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功打開掃碼器 |
reply | String | 返回信息,成功回調(diào)返回"code scanner enabled" |
# 4.5. 關閉掃碼器 - stopCodeScanner
2.30版本修改:
1.此接口開始在青蛙基礎版(青蛙一代)上支持,有此場景接入訴求的商戶開發(fā)者們可以進行適配
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口僅支持青蛙PRO機具與青蛙一代(2.30版本開始支持)
- 此接口目前無法在背屏調(diào)用
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備 屏幕相關 后屏
主要服務于青蛙設備。微信青蛙機具同樣具備掃碼支付的能力。對于掃碼器硬件提供了本API的操作關閉的能力,可以多次調(diào)用。掃碼器支持各色付款碼、條形碼以及二維碼。
本接口的作用是關閉掃碼器,為保障青蛙設備的掃碼能力可用性,對于掃碼器的操作,需要注意如下幾點:
stopCodeScanner
的能力是關閉掃碼器,是直接操作了硬件,stopListenCodePayment
是聲明取消小程序?qū)叽a器的監(jiān)聽,兩者的事件是相互獨立的,即:掃碼器的開關不會影響到小程序?qū)叽a器的監(jiān)聽開關。- 為保障青蛙設備的掃碼能力可用性:每次打開或者關閉小程序的時候,青蛙設備都會默認強制打開掃碼器;小程序啟動了刷臉流程等青蛙原生行為時,也會主動強制打開掃碼器。因此,建議小程序開發(fā)者在自身業(yè)務明確需要時才去操作掃碼器的打開與關閉。
掃碼器的開關與掃碼器的監(jiān)聽關系如下:
掃碼器開關 | 聲明監(jiān)聽掃碼器 | 狀態(tài)說明 |
---|---|---|
startCodeScanner (打開掃碼器) | listenCodePayment (監(jiān)聽掃碼器) | 能夠正常監(jiān)聽到掃碼器事件 |
startCodeScanner (打開掃碼器) | stopListenCodePayment (取消監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為未設置掃碼器監(jiān)聽 |
stopCodeScanner (關閉掃碼器) | listenCodePayment (監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為掃碼器未打開 |
stopCodeScanner (關閉掃碼器) | stopListenCodePayment (取消監(jiān)聽掃碼器) | 無法監(jiān)聽到掃碼器事件,因為掃碼器未打開且未設置掃碼器監(jiān)聽 |
調(diào)用范例如下:
// 關閉掃碼器
wxfaceapp.stopCodeScanner({
success: res => {
console.log("關閉掃碼器成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("關閉掃碼器失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功關閉掃碼器 |
reply | String | 返回信息,成功回調(diào)返回"code scanner disabled" |
# 4.6. 獲取外接USB外設API
接口限制:
- 該系列接口僅支持青蛙模式,不支持SDK模式
- 該系列接口只能在青蛙PRO上成功調(diào)用
- 該系列接口支持2.23及以上版本
# 1. getUsbDevice
獲取青蛙PRO的USB口(非Pos口)連接的外設設備信息
# 示例代碼
wxfaceapp.getUsbDevice({
success: (r) => {
let info = JSON.parse(r.info)
that.setData({ message: 'USB外設列表: ' + JSON.stringify(info) })
},
fail: (r) => {
that.setData({ message: '獲取USB外設失敗: ' + JSON.stringify(r) })
}
});
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為-1。 |
info | String | 已連接設備信息列表,JSON 格式字符串。 |
返回示例:
info: '[
{"id":0, "vid":1234, "pid":5678, productName:"", state:1},
...
]'
設備信息結構
名稱 | 類型 | 描述 |
---|---|---|
id | Number | 由系統(tǒng)生成的設備 ID,每個設備類型從0開始 |
vid | Number | USB 設備的 vendorId |
pid | Number | USB 設備的 productId |
productName | String | USB 設備的 productName |
state | Number | USB 設備的狀態(tài): 1是連接的,0是斷開的,此函數(shù)返回的都是1 |
# 2. startUsbDeviceMonitor
開始監(jiān)聽USB口連接的外設設備插拔事件
# 示例代碼
wxfaceapp.startUsbDeviceMonitor({
success: (r) => {
that.setData({message: '開啟監(jiān)聽USB口設備插拔事件成功'})
},
fail: (r) => {
that.setData({message: '開啟監(jiān)聽USB口設備插拔事件失敗:' + JSON.stringify(r)})
}
})
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為負數(shù)。 |
# 3. onUsbDeviceEvent
USB口連接的外設設備的插拔事件回調(diào)
# 示例代碼
wxfaceapp.onUsbDeviceEvent((r) => {
let retInfo = JSON.parse(r.info)
if (retInfo.state === 1) {
this.setData({
message: '設備已插入: '+JSON.stringify(r) ,
})
} else {
this.setData({
message: '設備拔出: '+JSON.stringify(r) ,
})
}
});
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
info | String | 改變狀態(tài)的設備信息(格式見上面getUsbDevice接口的設備信息結構)。 |
# 4. stopUsbDeviceMonitor
停止監(jiān)聽USB口設備插拔事件
# 示例代碼
wxfaceapp.stopUsbDeviceMonitor({
success: (r) => {
that.setData({message: '停止監(jiān)聽USB口設備插拔事件成功'})
},
fail: (r) => {
that.setData({message: '停止監(jiān)聽USB口設備插拔事件失敗:' + JSON.stringify(r)})
}
})
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為負數(shù)。 |
# 4.7 串口通信API
接口限制:
- 該系列接口僅支持青蛙模式,不支持SDK模式
- 該系列接口只能在青蛙PRO上成功調(diào)用
- 該系列接口支持2.23及以上版本
# 1. configSerialPort
配置串口的通信參數(shù)
# 示例代碼
wxfaceapp.configSerialPort({
id: id,
baudRate: this.baudRate,
dataBits: this.dataBits,
stopBits: this.stopBits,
parity: this.parity,
breakChar: this.breakChar,
success: (r) => {
that.setData({ message: '配置串口成功' })
},
fail: (r) => {
that.setData({ message: '配置串口失敗:' + JSON.stringify(r) })
}
});
輸入?yún)?shù)如下:
屬性 | 類型 | 必填 | 描述 |
---|---|---|---|
id | Number | 否 | 串口 ID,可根據(jù)外設管理接口查詢,取值范圍為 0~9,默認值為 0。 |
baudRate | Number | 否 | 波特率,取值范圍為 1200~115200,默認值為 9600。 |
dataBits | Number | 否 | 數(shù)據(jù)位,取值范圍為 7,8,默認值為 8。 |
stopBits | Number | 否 | 停止位,取值范圍為 1, 2,默認值為 1。 |
parity | String | 否 | 校驗類型,可選取值為 none, odd, even,默認值為 none。 |
breakChar | Number | 否 | 監(jiān)聽串口輸入的斷行符,默認值為13(回車CR)。 |
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為負數(shù)。 |
# 2. startSerialPortObserver
監(jiān)聽串口輸入
# 示例代碼
wxfaceapp.startSerialPortObserver({
success: (r) => {
that.setData({ message: '開啟監(jiān)聽串口輸入成功' })
},
fail: (r) => {
that.setData({ message: '開啟監(jiān)聽串口輸入失敗:' + JSON.stringify(r) })
}
});
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為-1。 |
# 3. stopSerialPortObserver
取消監(jiān)聽串口輸入
# 示例代碼
wxfaceapp.stopSerialPortObserver({
success: (r) => {
that.setData({message: '停止監(jiān)聽串口輸入成功'})
},
fail: (r) => {
that.setData({message: '停止監(jiān)聽串口輸入失敗:' + JSON.stringify(r)})
}
});
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success,失敗為錯誤信息。 |
replyCode | Number | 錯誤碼,成功為0,失敗為-1。 |
# 4. onSerialPortEvent
串口有數(shù)據(jù)輸入
# 示例代碼
wxfaceapp.onSerialPortEvent((r) => {
this.setData({
message: '串口有數(shù)據(jù)輸入: '+JSON.stringify(r) ,
})
});
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
content | String | 收到的數(shù)據(jù)(十六進制數(shù)的字符串,每一字節(jié)數(shù)據(jù)格式%2x)。 |
# 5. writeSerialPort
對串口寫入數(shù)據(jù)
# 示例代碼
wxfaceapp.writeSerialPort({
id: e.detail.value.inputWriteId,
content: e.detail.value.inputWriteContent,
success: (r) => {
that.setData({message: '往串口寫入數(shù)據(jù)成功'})
},
fail: (r) => {
that.setData({message: '往串口寫入數(shù)據(jù)失敗:' + JSON.stringify(r)})
}
});
輸入?yún)?shù)如下:
屬性 | 類型 | 必填 | 描述 |
---|---|---|---|
id | Number | 否 | 寫入串口的 ID 號, 需要與 configSerialPort 的 id 參數(shù)一致。默認取值為 configSerialPort 的 id 參數(shù)。 |
content | String | 是 | 文本內(nèi)容(十六進制字符串, 每一字節(jié)數(shù)據(jù)格式%2x)。 |
回調(diào)參數(shù)如下:
Object res
屬性 | 類型 | 描述 |
---|---|---|
reply | String | 成功為success。 |
replyCode | Number | 錯誤碼,成功為0,失敗為-1。 |
# 6. 小程序Demo
// pages/weigh/weigh.js
Page({
/**
* 頁面的初始數(shù)據(jù)
*/
data: {
message: "",
},
venderId: 1659, //使用的PL2303串口線的VID
productId: 8963, //使用的PL2303串口線的PID
baudRate: 9600, //波特率
dataBits: 8, //數(shù)據(jù)位
stopBits: 1, //停止位
parity: "none", //校驗
breakChar: 13, //消息分隔符
/**
* 生命周期函數(shù)--監(jiān)聽頁面加載
*/
onLoad: function (options) {
var that = this;
// 初始化電子稱
that.doStartSerialWeigh();
// 監(jiān)聽USB插拔事件,插上時初始化電子稱
wxfaceapp.onUsbDeviceEvent((r) => {
let retInfo = JSON.parse(r.info)
if (retInfo.state === 1) {
that.doStartSerialWeigh();
}
});
// 開始監(jiān)聽USB插拔
wxfaceapp.startUsbDeviceMonitor({
success: (r) => {
that.setData({ message: '開啟監(jiān)聽USB口設備插拔事件成功' })
},
fail: (r) => {
that.setData({ message: '開啟監(jiān)聽USB口設備插拔事件失敗:' + JSON.stringify(r) })
}
})
// 收到電子稱數(shù)據(jù)
wxfaceapp.onSerialPortEvent((r) => {
that.setData({
message: that.doParseSerialPortData(r.content),
})
})
// 開始監(jiān)聽串口收到數(shù)據(jù)
wxfaceapp.startSerialPortObserver({
success: (r) => {
that.setData({ message: '開啟監(jiān)聽串口輸入成功' })
},
fail: (r) => {
that.setData({ message: '開啟監(jiān)聽串口輸入失敗:' + JSON.stringify(r) })
}
})
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面顯示
*/
onShow: function () {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面隱藏
*/
onHide: function () {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面卸載
*/
onUnload: function () {
},
/**
* 頁面相關事件處理函數(shù)--監(jiān)聽用戶下拉動作
*/
onPullDownRefresh: function () {
},
/**
* 頁面上拉觸底事件的處理函數(shù)
*/
onReachBottom: function () {
},
/**
* 用戶點擊右上角分享
*/
onShareAppMessage: function () {
},
// 收到的串口數(shù)據(jù)是16進制的數(shù)字字符串,這里解析成字符顯示出來
doParseSerialPortData: function (content) {
let result = [];
for (let i = 0, len = content.length; i < len; i += 2) {
let charCoede = parseInt(content.slice(i, i + 2), 16);
result.push(String.fromCharCode(charCoede));
}
return result.join("");
},
// 初始化電子稱串口配置
doStartSerialWeigh: function () {
var that = this;
// 先獲取插上的USB設備,根據(jù)VID\PID找出PL2303串口線,再對其配置串口
wxfaceapp.getUsbDevice({
success: (r) => {
// r.info是一個JSONArray數(shù)組序列化后的字符串,需要轉成JSONArray對象才可以訪問其中的元素
let info = JSON.parse(r.info)
that.setData({ message: 'USB外設列表: ' + JSON.stringify(info) })
for (var i in info) {
if (info[i].state == 1 && info[i].vid == that.venderId && info[i].pid == that.productId) {
that.doConfigSerial(info[i].id);
return;
}
}
},
fail: (r) => {
that.setData({ message: '獲取USB外設失敗: ' + JSON.stringify(r) })
}
})
},
// 配置電子稱串口線
doConfigSerial: function (id) {
var that = this
console.log('doConfigSerial, id:' + id
+ ', baudRate:' + this.baudRate
+ ', dataBits:' + this.dataBits
+ ', stopBits:' + this.stopBits
+ ', parity:' + this.parity
+ ', breakChar:' +this.breakChar
);
wxfaceapp.configSerialPort({
id: id,
baudRate: this.baudRate,
dataBits: this.dataBits,
stopBits: this.stopBits,
parity: this.parity,
breakChar: this.breakChar,
success: (r) => {
that.setData({ message: '配置串口成功' })
},
fail: (r) => {
that.setData({ message: '配置串口失敗:' + JSON.stringify(r) })
}
})
},
})
# 5.支付能力API
# 5.1. 啟動刷臉支付 - facePay
2.21版本修改:
- 該接口在onFacePayPassEvent(刷臉成功事件)中新增返回用戶信息:刷臉用戶的openId、subOpenId
2.12版本修改:
- 該接口支持通過傳入?yún)?shù)requireFaceCode,控制最終生成的付款碼流向
接口限制:
- 此接口無法用于SDK模式下的結果頁小程序
請注意:
- 該接口重復調(diào)用,重新登錄后,opendata和商戶的相關頁面不會立刻刷新
項目 不支持的具體條目 模式相關 不支持SDK模式下的結果頁小程序調(diào)用,其他均支持 機具相關 無 屏幕相關 無 請注意:
該接口的JsEvent消息,后續(xù)可能會收歸為統(tǒng)一的一個接口
青蛙小程序可以通過wxfaceapp.facePay
啟動青蛙人臉App的刷臉支付能力,該接口調(diào)用后,會呼起青蛙App,執(zhí)行基本的人臉支付流程
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.facePay({
requireFaceCode : //是否需要獲取付款碼返回給小程序
success(res){
console.log("success [launchFaceApp]")
console.log(res.replyCode)
console.log(res.reply)
},
fail(res){
console.log("fail [launchFaceApp]")
console.log(res.replyCode)
console.log(res.reply)
}
})
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
requireFaceCode | Boolean | {true,false}是否需要獲取支付付款碼,填入true,付款碼將不會傳入收銀機,而會通過onFacePayPassEvent直接回傳給小程序,用于小程序獨立收銀。如不填寫則為false。 |
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功 |
reply | String | 返回信息,成功回調(diào)返回"success" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 未知錯誤 |
"-2" | 青蛙小程序內(nèi)部錯誤 |
"-3" | 人臉支付已經(jīng)在運行 |
"-4" | 無網(wǎng)絡 |
"-5" | 當前機具不支持此功能 |
"-6" | 超時 |
使用wxfaceapp.facePay
的API,開發(fā)者可用利用小程序啟動青蛙人臉App的人臉支付,考慮到開發(fā)者可能會希望監(jiān)聽整個人臉支付的流程,青蛙小程序會以JsEvent的形式,將人臉支付的結果告知注冊回調(diào)的小程序。
啟動刷臉后,商戶小程序開發(fā)者可用通過注冊4個jsEvent,來達到監(jiān)聽刷臉流程的效果,根據(jù)人臉識別,以及支付結果查詢兩大場景,可以把他們分為:
- 刷臉成功:onFacePayPassEvent
- 刷臉失敗:onFacePayFailedEvent
- 查單成功:onQueryPaymentSucEvent
- 查單失敗:onQueryPaymentFailedEvent
他們之間的關系如下圖所示:
# 刷臉成功 - onFacePayPassEvent
接口限制:無
調(diào)用范例如下:
//啟動刷臉
wxfaceapp.facePay({
success(res){
console.log("success [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
//刷臉成功Event 建議配合facePay的調(diào)用結果進行注冊
wxfaceapp.onFacePayPassEvent(function (res) {
console.log("onFacePayPassEvent retCode = "+res.replyCode)
//faceCode,在傳入requireFaceCode=true時起效
console.log("onFacePayPassEvent faceCode = "+res.faceCode)
//2.21版本新增能力,支持獲取刷臉用戶openId,subOpenId的能力
console.log("onFacePayPassEvent openid = "+res.openid)
console.log("onFacePayPassEvent sub_openid = "+res.sub_openid)
})
},
fail(res){
console.log("fail [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功 |
reply | String | 返回信息,成功回調(diào)返回"face pay finished" |
faceCode | String | 返回付款碼,當開發(fā)者調(diào)用wxfaceapp.facePay 傳入requireFaceCode=true 時才會返回 |
openid | String | 刷臉用戶的OpenId |
sub_openid | String | 刷臉用戶的SubOpenId |
# 刷臉失敗 - onFacePayFailedEvent
接口限制:無
調(diào)用范例如下:
//啟動刷臉
wxfaceapp.facePay({
success(res){
console.log("success [launchFaceApp]")
console.log(res.replyCode)
console.log(res.reply)
//刷臉失敗Event 建議配合facePay的調(diào)用結果進行注冊
wxfaceapp.onFacePayFailedEvent(function (res) {
console.log("onFacePayFailedEvent retCode = "+res.replyCode)
})
},
fail(res){
console.log("fail [launchFaceApp]")
console.log(res.replyCode)
console.log(res.reply)
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 未知錯誤 |
"-6" | 超時 |
"-7" | 用戶取消支付 |
"-8" | 用戶刷臉多次失敗,轉二維碼支付 |
# 查單成功 - onQueryPaymentSucEvent
接口限制:無
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.facePay({
success(res){
console.log("success [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
//查單成功Event
wxfaceapp.onQueryPaymentSucEvent(function (res) {
console.log("onQueryPaymentSucEvent retCode = " + res.replyCode)
})
},
fail(res){
console.log("fail [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功 |
reply | String | 返回信息,成功回調(diào)返回"query payment success" |
# 查單失敗 - onQueryPaymentFailedEvent
接口限制:無
調(diào)用范例如下:
//獲取青蛙相關信息
wxfaceapp.facePay({
success(res){
console.log("success [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
//查單失敗Event
wxfaceapp.onQueryPaymentFailedEvent(function (res) {
console.log("onQueryPaymentFailedEvent retCode = " + res.replyCode)
})
},
fail(res){
console.log("fail [launchFacePay]")
console.log(res.replyCode)
console.log(res.reply)
}
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 未知錯誤 |
"-6" | 超時 |
"-10" | 查單失敗 |
"-11" | 用戶刷臉多次失敗,轉二維碼支付 |
"-12" | 查單參數(shù)有誤 |
# 5.2. 聲明監(jiān)聽掃碼器 - listenCodePayment
2.30版本修改:
1.此接口在青蛙基礎版(青蛙一代)上恢復支持,有此場景接入訴求的商戶開發(fā)者們可以進行適配
2.在青蛙一代上,若使用的是外界掃碼器,需要確保「應用設置」中的「啟用外接掃碼設備」選項是開啟的
2.13版本修改:
1.此接口現(xiàn)在在青蛙基礎版(青蛙一代)上不再支持,請商戶開發(fā)者們做好適配
2.12版本修改:
1.此接口支持多種類型的付款碼、條形碼、二維碼,而不僅僅只是扣款碼
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口支持青蛙PRO機具與青蛙一代(2.30版本開始支持)
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備 屏幕相關 無 請注意:
本接口的作用是進行聲明,即向青蛙App聲明,希望使用其掃碼器相關能力,其后續(xù)的掃碼結果,并不在此接口中返回。
主要服務于青蛙設備,微信青蛙機具同樣具備掃碼支付的能力,當用戶使用手機扣款碼進行掃碼支付時,小程序能夠通過listenCodePayment
對用戶的掃碼支付事件進行監(jiān)聽。掃碼器相關能力也將完全通過此接口開放,支持監(jiān)聽各色付款碼、條形碼以及二維碼。
本接口的作用是進行聲明,即向青蛙App聲明,希望使用其掃碼器相關能力,其后續(xù)的掃碼結果,并不在此接口中返回。如果需要接收掃碼器的具體掃碼結果,請配合onCodePayEvent
接口使用。
調(diào)用范例如下:
//聲明監(jiān)聽掃碼器
wxfaceapp.listenCodePayment({
success(res){
//被掃碼回調(diào)事件
wxfaceapp.onCodePayEvent(function (res) {
console.log("onCodePayEvent retCode = " + res.replyCode)
//被掃碼到的具體的碼
console.log("onCodePayEvent code scanned = " + res.code)
})
}
})
具體錯誤碼如下:
API本身只是一條注冊通知,并不存在錯誤碼
# 掃碼支付事件監(jiān)聽 - onCodePayEvent
2.30版本修改:
1.此接口在青蛙基礎版(青蛙一代)上恢復支持,有此場景接入訴求的商戶開發(fā)者們可以進行適配
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口支持青蛙PRO機具與青蛙一代(2.30版本開始支持)
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備 屏幕相關 無
當使用listenCodePayment
進行掃碼事件監(jiān)聽的注冊后,可以使用onCodePayEvent
注冊JsEvent,來接受掃碼支付的事件通知,當接收到通知后,小程序可以選擇自己進行對應支付的結果查詢。
調(diào)用范例如下:
//注冊掃碼支付事件
wxfaceapp.onCodePayEvent(function (res) {
console.log("onCodePayEvent retCode = " + res.replyCode)
//被掃碼到的具體的碼
console.log("onCodePayEvent code scanned = " + res.code)
})
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功 |
reply | String | 返回信息,成功回調(diào)返回"code payment happens" |
code | String | 當掃碼器感知到碼后,被掃描的碼的具體值 |
# 5.3. 聲明取消監(jiān)聽掃碼器 - stopListenCodePayment
2.30版本修改:
1.此接口在青蛙基礎版(青蛙一代)上恢復支持,有此場景接入訴求的商戶開發(fā)者們可以進行適配驗證
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口支持青蛙PRO機具與青蛙一代(2.30版本開始支持)
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 非微信支付官方設備 屏幕相關 無 請注意:
本接口與
listenCodePayment
接口對應,可成對使用。
主要服務于青蛙設備。微信青蛙機具同樣具備掃碼支付的能力,當商戶不希望再監(jiān)聽掃碼器時,小程序能夠通過stopListenCodePayment
取消這一監(jiān)聽行為。
在調(diào)用本API取消監(jiān)聽掃碼器之后,onCodePayEvent
接口將不會繼續(xù)收到JsEvent,再次listenCodePayment
即后可恢復。
調(diào)用范例如下:
//聲明取消監(jiān)聽掃碼器
wxfaceapp.stopListenCodePayment({
success: res => {
console.log("取消監(jiān)聽掃碼支付成功")
},
fail: res => {
console.log("取消監(jiān)聽掃碼支付失敗")
}
});
具體錯誤碼如下:
API本身只是一條取消注冊通知,并不存在錯誤碼
# 5.4. 快速支付 - quickPay
2.21版本修改:
- 該接口支持在回調(diào)參數(shù)中新增返回用戶信息:刷臉用戶的openId、subOpenId
2.13版本修改:
- 增加本接口能力
接口限制:
- 此接口在背屏上無法使用(背屏因無法獲得扣款碼,不支持快速支付)
- 使用此接口的小程序必須使用刷臉登錄,進行登錄啟動,如果是無登錄要求啟動的小程序,此API不會被正常執(zhí)行
- 此API在一次啟動過程中(i.e.,刷臉登錄小程序->退出小程序,被稱為1次啟動過程),只能被調(diào)用一次
- 從刷臉登錄小程序開始算起,此API具有45秒的有效時間,超出有效時間,也無法進行快速支付
項目 不支持的具體條目 模式相關 sdk模式 機具相關 無 屏幕相關 背屏 請注意:該接口未來可能會發(fā)生變更,可能會增加時間,或者直接支持微信小程序原生的支付接口。
對于很多需要刷臉登錄才能啟動的小程序來說,如果想要在小程序內(nèi)再次通過收銀機傳碼支付,那么就必須調(diào)用wxfaceapp.facePay
再次進行刷臉支付,這樣對于一個用戶來說,要進行兩次刷臉,用戶體驗不好。
所以對于有這種需求的商戶來說,使用快速支付wxfaceapp.quickPay
,是一個更好的選擇。
在進行刷臉登錄后,在規(guī)定的時間內(nèi),商戶小程序開發(fā)者可用通過調(diào)用wxfaceapp.quickPay
直接向收銀機進行傳碼支付。
調(diào)用范例如下:
//快速支付
wxfaceapp.quickPay({
requireFaceCode: true, // 需要付款碼
success(res) {
console.log('quickpay suc')
// 返回的扣款碼,requireFaceCode=true時返回
console.log('ret faceCode = '+res.faceCode)
//2.21版本新增能力,支持獲取刷臉用戶openId,subOpenId的能力
console.log("ret openid = "+res.openid)
console.log("ret sub_openid = "+res.sub_openid)
},
fail(res) {
console.log('quickpay failed reply = '+res.reply)
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示啟動快速支付成功 |
reply | String | 返回信息,成功回調(diào)返回"suc launching quick pay" |
faceCode | String | 返回付款碼,當開發(fā)者調(diào)用wxfaceapp.quickPay 傳入requireFaceCode=true 時才會返回 |
openid | String | 刷臉用戶的OpenId |
sub_openid | String | 刷臉用戶的SubOpenId |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 扣款碼超時 |
"-2" | 無扣款碼 |
"-3" | 未知錯誤 |
# 5.5. 快速支付是否可用 - ableToQuickPay
接口限制:
- 此接口在背屏上無法使用(背屏因無法獲得扣款碼,不支持快速支付)
項目 不支持的具體條目 模式相關 sdk模式 機具相關 無 屏幕相關 背屏
在前面我們說過,對于不想進兩次刷臉,完成登錄+支付操作的商戶們來說,使用quickPay
是一個很好的做法,但是考慮到商戶小程序可能在多個場景中被運行,且quickPay
本身有時間限制,所以提供了wxfacepay.ableToQuickPay
這樣一個API,用于在商戶想要進行支付時,進行是否能夠快速支付的判斷。
通過這樣的方式,商戶能夠進行選擇:
- 在可以進行快速支付的時候:使用快速支付
wxfaceapp.quickPay
- 在不可用進行快速支付的時候:使用兜底邏輯,進行二次刷臉,完成支付
wxfaceapp.facePay
調(diào)用范例如下:
//是否能夠快速支付
wxfaceapp.ableToQuickPay({
success(res) {
console.log('check facecode suc')
},
fail(res) {
console.log('check facecode failed')
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示扣款碼可用 |
reply | String | 返回信息,成功回調(diào)返回"ok" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 扣款碼超時 |
"-2" | 無扣款碼 |
"-3" | 未知錯誤 |
# 5.6. 啟用掃碼支付結果頁 - enableCodePayResultPage
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 無 屏幕相關 無
該API主要提供了針對微信掃碼支付時,展示同刷臉支付一樣的付款后查單頁面與結果頁展示的能力。在能力上,對應青蛙系統(tǒng)設置頁的如下配置:
該接口的狀態(tài)會與上圖中的開關狀態(tài)同步。
調(diào)用范例如下:
//啟用掃碼支付結果頁
wxfaceapp.enableCodePayResultPage({
success: res => {
console.log("啟用掃碼支付結果頁成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("啟用掃碼支付結果頁失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功啟用掃碼支付結果頁 |
reply | String | 返回信息,成功回調(diào)返回"code pay result page enabled" |
# 5.7. 禁用掃碼支付結果頁 - disableCodePayResultPage
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 無 屏幕相關 無
該API主要提供了針對微信掃碼支付時,禁用同付款后查單頁面與結果頁展示的能力。在能力上,對應青蛙系統(tǒng)設置頁的「掃微信付款碼時展示支付結果」配置。(可參考enableCodePayResultPage
說明中的示例圖)
該接口的狀態(tài)會與青蛙系統(tǒng)設置頁的「掃微信付款碼時展示支付結果」開關狀態(tài)同步。
調(diào)用范例如下:
//禁用掃碼支付結果頁
wxfaceapp.disableCodePayResultPage({
success: res => {
console.log("禁用掃碼支付結果頁成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("禁用掃碼支付結果頁失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功禁用掃碼支付結果頁配置 |
reply | String | 返回信息,成功回調(diào)返回"code pay result page disabled" |
# 5.8. 啟用背屏支付狀態(tài)浮窗 - enableBackScreenPayResultLayer
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口僅支持青蛙PRO機具
- 此接口目前無法在背屏調(diào)用
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 青蛙基礎版,非微信支付官方設備 屏幕相關 后屏
該API主要針對青蛙PRO設備,提供了在前屏支付時,控制背屏是否展示支付狀態(tài)浮窗的能力,該浮窗可實時展示前屏的支付狀態(tài)(如支付中、支付成功等),默認是開啟的,該浮窗如下圖所示:
本接口的作用是啟用背屏支付狀態(tài)浮窗,為保障青蛙設備的原生背屏支付狀態(tài)浮窗可用性與一致性,對于該浮窗的操作,需要注意:每次打開或者關閉小程序的時候,青蛙設備都會默認強制啟用背屏支付狀態(tài)浮窗。因此,建議小程序開發(fā)者在自身業(yè)務明確需要時才去操作背屏支付狀態(tài)浮窗的打開與關閉。
調(diào)用范例如下:
//啟用背屏支付狀態(tài)浮窗
wxfaceapp.enableBackScreenPayResultLayer({
success: res => {
console.log("啟用背屏支付狀態(tài)浮窗成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("啟用背屏支付狀態(tài)浮窗失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功啟用背屏支付狀態(tài)浮窗 |
reply | String | 返回信息,成功回調(diào)返回"back screen pay result layer enabled" |
# 5.9. 禁用背屏支付狀態(tài)浮窗 - disableBackScreenPayResultLayer
接口限制:
- 此接口僅支持青蛙模式,不支持SDK模式
- 此接口僅支持青蛙PRO機具
- 此接口目前無法在背屏調(diào)用
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 青蛙基礎版,非微信支付官方設備 屏幕相關 后屏
該API主要針對青蛙PRO設備,提供了在前屏支付時,控制背屏是否展示支付狀態(tài)浮窗的能力,該浮窗可實時展示前屏的支付狀態(tài)(如支付中、支付成功等),默認是開啟的,該浮窗可參考enableBackScreenPayResultLayer
介紹中的展示。
本接口的作用是禁用背屏支付狀態(tài)浮窗,為保障青蛙設備的原生背屏支付狀態(tài)浮窗可用性與一致性,對于該浮窗的操作,需要注意:每次打開或者關閉小程序的時候,青蛙設備都會默認強制啟用背屏支付狀態(tài)浮窗。因此,建議小程序開發(fā)者在自身業(yè)務明確需要時才去操作背屏支付狀態(tài)浮窗的打開與關閉。
調(diào)用范例如下:
//禁用背屏支付狀態(tài)浮窗
wxfaceapp.disableBackScreenPayResultLayer({
success: res => {
console.log("禁用背屏支付狀態(tài)浮窗成功")
console.log(res.replyCode)
console.log(res.reply)
},
fail: res => {
console.log("禁用背屏支付狀態(tài)浮窗失敗")
console.log(res.replyCode)
console.log(res.reply)
}
});
回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示成功禁用背屏支付狀態(tài)浮窗 |
reply | String | 返回信息,成功回調(diào)返回"back screen pay result layer disabled" |
# 6. 登錄能力API
# 6.1. 登錄能力概覽
總體來說,青蛙小程序的登錄分為2大類:
- 小程序內(nèi)登錄:此類小程序?qū)切┥虘粼O置為需要用戶登錄的小程序,他們在啟動后,可以完全按照官方提供的登錄指引進行登錄
- 運行中登錄:此類小程序?qū)切┰O置為不需要用戶登錄,且非背屏小程序的小程序,他們在啟動后,無法調(diào)用用戶相關的API(i.e.,wx.login,wx.getUserInfo),他們需要完成額外的登錄過程,然后進行正常的官方登錄后,才可以調(diào)用相關API
為什么會有這些區(qū)別?原因在于,在手機上運行的小程序,他們的登錄態(tài)是由微信客戶端提供的。
而在青蛙機具上運行的小程序,他們的登錄態(tài)是由青蛙刷臉App提供的,而這個青蛙刷臉App作為一個共享設備上的App,它的登錄態(tài)獲取過程,又和微信客戶端有不少區(qū)別。
開發(fā)者在微信手機端的微信小程序上做的登錄步驟可能是這樣的:
而青蛙App不同,青蛙App并不會像微信客戶端那樣,可以將用戶的登錄態(tài)貯藏并且續(xù)期。青蛙App的登錄態(tài)都是短暫的,不續(xù)期的,所以在青蛙App上,進行小程序的啟動/登錄會有所區(qū)別。
但是對于小程序內(nèi)登錄來說,由于開發(fā)者設置了該小程序需要用戶登錄。在啟動這個小程序前,青蛙App會進行刷臉登錄,以獲取當前刷臉用戶的微信登錄態(tài),之后才會啟動小程序,所以這種登錄類型,商戶開發(fā)者在實現(xiàn)登錄邏輯時,可以采取和手機小程序一模一樣的做法。流程如下:
可以看到,唯一不同的區(qū)別就是在啟動小程序前,青蛙App需要執(zhí)行一次刷臉,獲取用戶登錄態(tài)的流程,這有別于手機微信端的直接啟動。但是作為小程序開發(fā)者,并不會感知這一流程。
區(qū)別更大的是運行中登錄,這種登錄模式,建立在開發(fā)者將他們的小程序設置為設置為不需要用戶登錄,比如首頁常駐小程序。這類小程序,啟動時,青蛙刷臉App并不會提供登錄態(tài)支持,所以他們將以無登錄態(tài)的方式啟動,這個時候,所有和用戶身份相關的API都會失效(i.e.,wx.login,wx.getUserInfo,wx.checkSession),在這種情況下,小程序如果想登錄,獲取用戶相關的信息,需要遵照下面的流程:
可以看到,目前針對這一情況,我們提供了兩個JsApi,接下來我們會詳細解釋這兩個API的使用方法。
# 6.2. 查看青蛙App此時是否具有登錄態(tài) - isLoginOnFaceApp
2.12版本修改:
- 增加此接口
項目 不支持的具體條目 模式相關 無 機具相關 無 屏幕相關 無
該接口用于小程序判斷此時青蛙App是否具備用戶登錄態(tài),我們推薦,開發(fā)者在進行運行中登錄時使用這個能力,如果判斷青蛙App此時不具備用戶登錄態(tài),需要使用5.3中的JsApi先讓青蛙App具備用戶登錄態(tài),然后再進行小程序內(nèi)登錄。反之,直接進行小程序內(nèi)登錄即可。
調(diào)用范例如下:
wxfaceapp.isLoginOnFaceApp({
success() {
//成功,說明此時青蛙App具備登錄態(tài),可以進行小程序內(nèi)登錄
console.log("[isAlreadyLogin] is login on face app, free to call [wx.login]")
},
fail() {
//失敗,說明此時青蛙App不具備登錄態(tài),需要進行刷臉登錄獲取登錄態(tài),然后才可以進行小程序內(nèi)登錄
console.log("[isAlreadyLogin] not login on face app, free to call [faceLogin]")
}
})
由于這個接口沒有回調(diào)參數(shù),和入?yún)ⅲ詤?shù)講解部分省略。
# 6.3. 青蛙刷臉登錄 - faceLogin
2.21版本修改:
- 該接口支持在前屏刷臉登錄的回調(diào)參數(shù)中新增返回用戶信息:刷臉用戶的openId、subOpenId
2.13版本修改:
- 提供
enableMultiLogin
選項,開啟后該接口可以在登錄后,重復調(diào)用,進行登錄態(tài)的反復切換- 提供
relaunchUrl
參數(shù),傳入正確的頁面路徑后,可以在刷臉登錄完成后進行自動路由- 現(xiàn)在在青蛙Pro機器上,背屏的小程序也可以使用此接口,利用二維碼進行背屏小程序登錄態(tài)的切換
2.12版本修改:
- 增加此接口
接口限制:
無
項目 不支持的具體條目 模式相關 無 機具相關 無 屏幕相關 無
該接口用于在運行中登錄,這種類型下,由小程序主動觸發(fā),讓青蛙刷臉App具備用戶登錄態(tài)。只有在青蛙刷臉App具備了用戶登錄態(tài)之后,小程序才能通過小程序內(nèi)登錄來進行登錄,獲取和用戶相關的信息。
輸入?yún)?shù)如下:
參數(shù) | 類型 | 說明 |
---|---|---|
enableMultiLogin | Boolean | 是否開啟多次登錄,默認為false{若傳入true:則可以多次調(diào)用該接口,進行登錄態(tài)的切換;若傳入false:在單次調(diào)用,且登錄成功后,該接口將不可用,使用logoutOnFaceApp 退出登錄后,該接口再次可用} |
relaunchUrl | String | 默認為空,若傳入正確的頁面URL,則App會在登錄成功后,重新路由至傳入頁面 |
調(diào)用范例如下:
wxfaceapp.faceLogin({
//開啟重復登錄
enableMultiLogin:true,
//登錄成功后,自動路由至此頁面
relaunchUrl:"pages/pay/pay",
success(res) {
console.log("[faceLogin] success")
console.log(res.replyCode)
console.log(res.reply)
//2.21版本新增能力,支持獲取刷臉用戶openId,subOpenId的能力
console.log("ret openid = "+res.openid)
console.log("ret sub_openid = "+res.sub_openid)
},
fail(res) {
console.log("[faceLogin] failed")
console.log(res.replyCode)
console.log(res.reply)
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示登錄成功 |
reply | String | 返回信息,成功回調(diào)返回"face login suc",如果已經(jīng)具備登錄態(tài),會直接返回”already in login status, no need to face login“ |
openid | String | 刷臉用戶的OpenId |
sub_openid | String | 刷臉用戶的SubOpenId |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼和facePay 是一樣的 |
reply | String | 錯誤具體信息 |
# 6.4. 退出登錄 - logoutOnFaceApp
2.13版本修改:
- 增加此接口
接口限制:
- 該接口無法在背屏使用
項目 不支持的具體條目 模式相關 無 機具相關 無 屏幕相關 背屏 請注意:
- 此接口調(diào)用后,小程序操作用戶身份相關的API都將失效
- 如果想重新登錄,請重新走
faceLogin
的流程
該接口用于在運行中登出,這種類型下,由小程序主動觸發(fā),讓青蛙刷臉App,和當前運行中的小程序同時失去用戶登錄態(tài)。請注意,API調(diào)用成功后,小程序操作用戶身份相關的API都將失效。
調(diào)用范例如下:
//退出登錄
wxfaceapp.logoutOnFaceApp({
success(res) {
//退出登錄成功后,小程序和青蛙App用戶登錄態(tài)都將完成注銷
console.log("[faceLogout] suc, msg = " + res.reply)
},
fail(res) {
console.log("[faceLogout] failed, msg = " + res.reply)
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示登出成功 |
reply | String | 返回信息,成功回調(diào)返回"logout suc!" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,“-1”代表登出失敗 |
reply | String | 返回信息,失敗回調(diào)返回"logout suc!" |
# 7. 會員能力API
# 7.1 刷臉會員開卡-launchMemberPage
2.23版本修改:
- 增加本接口能力
接口限制:
- 此接口在背屏上無法使用
- 使用此接口的小程序必須使用刷臉登錄,進行登錄啟動,如果是無登錄要求啟動的小程序,此API不會被正常執(zhí)行
- 此API在一次啟動過程中(i.e.,刷臉登錄小程序->退出小程序,被稱為1次啟動過程),只能被調(diào)用一次
- 此接口調(diào)用條件是商戶已在當前設備配置刷臉會員
項目 不支持的具體條目 模式相關 sdk模式 機具相關 無 屏幕相關 背屏 請注意:該接口未來可能會發(fā)生變更,可能會增加時間,或者直接支持微信小程序原生的支付接口
在進行刷臉登錄后,商戶小程序開發(fā)者可用通過調(diào)用wxfaceapp.launchMemberPage
直接拉起會員組件,對于只需要拉起開通會員頁面的商戶,可以通過傳參控制是否直接進入開通會員頁面。
調(diào)用范例如下:
//拉起會員組件
wxfaceapp.launchMemberPage({
isDirectlyActivate: true, // 是否直接進入開通頁面
success(res) {
console.log('launchMemberPage suc')
},
fail(res) {
console.log('launchMemberPage fail')
}
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示接口調(diào)用成功 |
reply | String | 返回信息,成功回調(diào)返回"success" |
errMsg | String | 錯誤信息,成功回調(diào)返回"launchMemberPage:ok" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 返回信息 |
errMsg | String | 錯誤信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"271378716" | 會員信息獲取失敗 |
"271378717" | 會員信息解析失敗 |
"271378718" | 正在獲取會員信息中 |
"271378719" | 會員刷臉過程出現(xiàn)Crash |
"271378720" | 用戶取消了刷臉獲取用戶信息 |
"271378721" | 設備未配置會員 |
"271378722" | 該用戶已開通會員 |
# 8. 特殊能力API
# 8.1. 會員場景特殊指令 - onSpecialCtrlEvent
接口限制:
- 建議會員小程序監(jiān)聽這個JsEvent,承載其他業(yè)務的小程序沒有必要監(jiān)聽這個Event
- 由于場景較小,建議在
page.onShow
生命周期函數(shù)回調(diào)后再進行注冊
請注意:該接口未來可能會發(fā)生變更,采取更加通用的方式解決問題
在會員場景下,小程序支持收到收銀員的控制(青蛙的鍵盤/青蛙PRO的背屏按鈕),傳遞特定消息的功能,通過注冊wxfaceapp.onSpecialCtrlEvent
可以做到這點,具體如何觸發(fā)事件,可以參考會員小程序場景的相關文檔,或者聯(lián)系技術支持。
調(diào)用范例如下:
//監(jiān)聽會員場景的特殊指令
wxfaceapp.onSpecialCtrlEvent(function (res) {
console.log("onSpecialCtrlEvent ctrlCode = " + res.ctrlCode)
originThz.setData({
receivedCtrl: res.ctrlCode,
receivedCtrlContent: res.ctrlMsg
})
})
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
ctrlCode | String | 返回碼,{0:傳碼;1:收款} |
ctrlMsg | String | 返回信息,傳碼場景下,返回"傳碼",收款場景下,返回"收款" |
# 8.2. 結果頁小程序接受參數(shù)
在結果頁小程序中,開發(fā)者可用通過微信官方的wx.getLaunchOptionsSync獲取到由青蛙App傳入的結果頁相關參數(shù),他們是:
totalFee
:支付金額discountFee
:折扣金額transactionId
:微信支付交易訂單號mchId
:商戶號subMchId
:子商戶號
# 8.3. 取消刷臉流程 - quitFace
接口限制:
- 該接口只支持青蛙模式,不支持SDK模式
- 該接口支持2.22及以上版本
項目 不支持的具體條目 模式相關 SDK模式 機具相關 無 屏幕相關 前屏 請注意:
- 此接口僅適用于取消刷臉識別到確認身份的流程。但是如果顧客已經(jīng)完成了刷臉后的驗證環(huán)節(jié)(如:已經(jīng)觸發(fā)了刷臉后的「確認」或「確認支付」按鈕、完成了手機號加驗等情況),此時流程已經(jīng)無法中止,此API無法生效。
該接口一般可用于在發(fā)起了錯誤金額的刷臉流程等誤操作喚起刷臉后,提供給商戶主動取消顧客刷臉流程的能力。在成功取消刷臉后,前屏的刷臉頁面會自動關閉,同時前屏的屏幕上方會有Toast提示「商家已取消刷臉」,用于讓顧客知曉這一行為。
調(diào)用范例如下:
//中止前屏的刷臉流程
wxfaceapp.quitFace({
success: res => {
console.log('quitFace success');
this.setData({
console.log(res.replyCode)
console.log(res.reply)
});
},
fail: res => {
console.log('quitFace failed');
this.setData({
console.log(res.replyCode)
console.log(res.reply)
});
}
});
成功回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 返回碼,返回"0"表示取消刷臉成功 |
reply | String | 返回信息,成功回調(diào)返回"calling success" |
失敗回調(diào)參數(shù)如下:
Object res
參數(shù) | 類型 | 說明 |
---|---|---|
replyCode | String | 具體返回碼見下表 |
reply | String | 錯誤具體信息 |
具體錯誤碼如下:
錯誤碼 | 說明 |
---|---|
"-1" | 取消刷臉流程失敗 |
"-2" | 取消刷臉流程失敗【青蛙內(nèi)部錯誤:未設置有效回調(diào)】(對于小程序開發(fā)者而言,無需理解,可與"-1"做相同處理) |
"-3" | 取消刷臉流程失敗【青蛙內(nèi)部錯誤:初始化調(diào)用失敗】(對于小程序開發(fā)者而言,無需理解,可與"-1"做相同處理) |
"-4" | 取消刷臉流程正在進行中(請注意避免短時間頻繁調(diào)用) |
"-5" | 取消刷臉流程超時 |
"-6" | 未知錯誤 |
# 9. FAQ
Q1. 為什么通過wxfaceapp.faceLogin方法獲取用戶的openid和小程序正常獲取的openid不一致?
通過wxfaceapp.faceLogin獲取的是該用戶基于小程序appid的openid,刷臉小程序獲取的openid是基于商戶綁定的appid。
Q2. wxfaceapp.faceLogin({enableMultiLogin:true,relaunchUrl:"pages/pay/pay?a=xxx&b=xxx&c=xxxx"}),relaunchUrl 參數(shù)可否這樣傳遞查詢字符串?
傳遞額外參數(shù)暫時不支持。
Q3. 青蛙小程序特殊api回調(diào)函數(shù)里面不能使用setData賦值嗎?
可以。
Q4. 通過哪個接口可以獲取商戶號?
wx.getLaunchOptions。
Q5. 青蛙pro的前后屏是否必須運行兩個小程序?
沒有限制,服務商根據(jù)需求通過商戶平臺下發(fā)即可。
Q6. 青蛙小程序支持使用webview跳轉嗎?
支持。
Q7. 青蛙設備提示“請與收銀員確認支付結果”
沒有收到支付返回結果,先檢查小程序有沒有收到付款碼,是否已經(jīng)支付成功。
Q8. wxfaceapp.onFacePayFailedEvent,wxfaceapp.onQueryPaymentSucEvent,wxfaceapp.onQueryPaymentFailedEvent 這幾個監(jiān)聽開啟了需要關嗎? 不關會不會導致小程序卡頓?
不需要關閉,不會影響。
Q9. setStorage前后屏數(shù)據(jù)不共享嗎?
是的,前后屏數(shù)據(jù)共享可以使用青蛙前后屏的通信接口。
Q10. wxfaceapp.faceLogin這個api用了之后,會清除緩存嗎?
會的。
Q11. setStorage保存成功,但是getStorage取不到數(shù)據(jù)。
用戶A登錄小程序,小程序調(diào)用setStorage保存信息。用戶A退出小程序,用戶B登錄小程序,小程序調(diào)用getStorage是無法獲取到A登錄態(tài)下的信息的。無登錄態(tài)下,使用的內(nèi)部key是機器ID,可以獲取到信息。
Q12. 青蛙pro有操作語音播報的api嗎?
沒有特殊接口,建議使用外部TTS服務,再調(diào)用小程序通用音頻播放能力。
Q13. facePay刷臉支付頁面除了手動關閉,可以通過程序控制關閉嗎?
目前沒有對應的控制接口。
Q14. 在服務商后臺容器里,錄入兩個前屏小程序(a和b),如何操作實現(xiàn)從a切換到b?
重新添加小程序。
Q15. 青蛙pro可以小程序去調(diào)起打印嗎?
可以通過藍牙調(diào)起打印外設。
Q16. 在設備上調(diào)試小程序如何查看日志?
青蛙設備上打開vConsole。
Q17. 小程序如何監(jiān)聽外置掃碼槍?
外置掃碼槍無法監(jiān)聽,可以通過input方式獲取外置掃碼槍傳的值。
Q18. 小程序如何獲取設備sn號?
通過checkWxFacePayOsInfo接口osSerialNumber返回。
Q19. 小程序支持mqtt嗎?
支持。