视频一区二区三区自拍_千金肉奴隷1985未删减版在线观看_国产成人黄色视频在线播放_少女免费播放片高清在线观看_国产精品v欧美精品v

關閉
公眾號二維碼

# 青蛙小程序 - 特殊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版本修改:

  1. launchMp接口重復調(diào)用優(yōu)化:背屏如果已經(jīng)啟動了參數(shù)中指定的小程序(AppId,miniappType一致),那么會直接回調(diào)成功,并把小程序拉至前臺。

2.13版本修改:

  1. 背屏目前已經(jīng)開放掃碼登錄,如果已經(jīng)掃碼登錄完成,則needLogin參數(shù)無需限制為0

接口限制:

  1. 該接口僅支持青蛙模式,不支持SDK模式
  2. 該API只能在青蛙PRO上成功調(diào)用
  3. 目前只支持青蛙PRO的「前屏小程序」啟動「背屏小程序」
  4. 接口傳入?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

接口限制:

  1. 該API只支持青蛙模式,不支持SDK模式
  2. 該API只能在青蛙PRO上成功調(diào)用
  3. 該API有傳輸內(nèi)容限制,2.13版本及其以上版本,限制字符數(shù)為2000字符
  4. 這個接口能夠發(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

接口限制:

  1. 該API只支持青蛙模式,不支持SDK模式
  2. 該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

接口限制:

  1. 該API只支持青蛙模式,不支持SDK模式
  2. 該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

接口限制:

  1. 該接口僅支持青蛙模式,不支持SDK模式
  2. 該接口僅支持
項目 不支持的具體條目
模式相關 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版本修改:

  1. 目前該指令將會支持青蛙一代和青蛙PRO兩種機具

接口限制:

  1. 該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.,輸入支付金額),那么不需要使用本接口,即可完成,推薦的做法有:

  1. 使用小程序的Input組件,連接上外接小鍵盤,完成輸入
  2. 使用商戶自定制的小程序數(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)用。掃碼器支持各色付款碼、條形碼以及二維碼。

本接口的作用是打開掃碼器,為保障青蛙設備的掃碼能力可用性,對于掃碼器的操作,需要注意如下幾點:

  1. startCodeScanner的能力是打開掃碼器,是直接操作了硬件,listenCodePayment是聲明小程序?qū)叽a器的監(jiān)聽,兩者的事件是相互獨立的,即:掃碼器的開關不會影響到小程序?qū)叽a器的監(jiān)聽開關。
  2. 為保障青蛙設備的掃碼能力可用性:每次打開或者關閉小程序的時候,青蛙設備都會默認強制打開掃碼器小程序啟動了刷臉流程等青蛙原生行為時,也會主動強制打開掃碼器。因此,建議小程序開發(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ā)者們可以進行適配

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口僅支持青蛙PRO機具青蛙一代(2.30版本開始支持)
  3. 此接口目前無法在背屏調(diào)用
  4. 該接口支持2.22及以上版本
項目 不支持的具體條目
模式相關 SDK模式
機具相關 非微信支付官方設備
屏幕相關 后屏

主要服務于青蛙設備。微信青蛙機具同樣具備掃碼支付的能力。對于掃碼器硬件提供了本API的操作關閉的能力,可以多次調(diào)用。掃碼器支持各色付款碼、條形碼以及二維碼。

本接口的作用是關閉掃碼器,為保障青蛙設備的掃碼能力可用性,對于掃碼器的操作,需要注意如下幾點:

  1. stopCodeScanner的能力是關閉掃碼器,是直接操作了硬件,stopListenCodePayment是聲明取消小程序?qū)叽a器的監(jiān)聽,兩者的事件是相互獨立的,即:掃碼器的開關不會影響到小程序?qū)叽a器的監(jiān)聽開關。
  2. 為保障青蛙設備的掃碼能力可用性:每次打開或者關閉小程序的時候,青蛙設備都會默認強制打開掃碼器小程序啟動了刷臉流程等青蛙原生行為時,也會主動強制打開掃碼器。因此,建議小程序開發(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

接口限制:

  1. 該系列接口僅支持青蛙模式,不支持SDK模式
  2. 該系列接口只能在青蛙PRO上成功調(diào)用
  3. 該系列接口支持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

接口限制:

  1. 該系列接口僅支持青蛙模式,不支持SDK模式
  2. 該系列接口只能在青蛙PRO上成功調(diào)用
  3. 該系列接口支持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版本修改:

  1. 該接口在onFacePayPassEvent(刷臉成功事件)中新增返回用戶信息:刷臉用戶的openId、subOpenId

2.12版本修改:

  1. 該接口支持通過傳入?yún)?shù)requireFaceCode,控制最終生成的付款碼流向

接口限制:

  1. 此接口無法用于SDK模式下結果頁小程序

請注意:

  1. 該接口重復調(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.此接口支持多種類型的付款碼、條形碼、二維碼,而不僅僅只是扣款碼

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口支持青蛙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ā)者們可以進行適配

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口支持青蛙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ā)者們可以進行適配驗證

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口支持青蛙PRO機具青蛙一代(2.30版本開始支持)
  3. 該接口支持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版本修改:

  1. 該接口支持在回調(diào)參數(shù)中新增返回用戶信息:刷臉用戶的openId、subOpenId

2.13版本修改:

  1. 增加本接口能力

接口限制:

  1. 此接口在背屏上無法使用(背屏因無法獲得扣款碼,不支持快速支付)
  2. 使用此接口的小程序必須使用刷臉登錄,進行登錄啟動,如果是無登錄要求啟動的小程序,此API不會被正常執(zhí)行
  3. 此API在一次啟動過程中(i.e.,刷臉登錄小程序->退出小程序,被稱為1次啟動過程),只能被調(diào)用一次
  4. 從刷臉登錄小程序開始算起,此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

接口限制:

  1. 此接口在背屏上無法使用(背屏因無法獲得扣款碼,不支持快速支付)
項目 不支持的具體條目
模式相關 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

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 該接口支持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

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 該接口支持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

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口僅支持青蛙PRO機具
  3. 此接口目前無法在背屏調(diào)用
  4. 該接口支持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

接口限制:

  1. 此接口僅支持青蛙模式,不支持SDK模式
  2. 此接口僅支持青蛙PRO機具
  3. 此接口目前無法在背屏調(diào)用
  4. 該接口支持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ā)者在微信手機端的微信小程序上做的登錄步驟可能是這樣的:

sequenceDiagram participant 微信客戶端 participant 商戶小程序 participant 商戶后臺 微信客戶端->>商戶小程序: 啟動小程序 微信客戶端->>商戶小程序: App::onLaunch() 商戶小程序->>商戶小程序: wx.login獲取code 商戶小程序->>商戶后臺: 利用code請求登錄 商戶后臺-->>商戶小程序: 完成登錄

而青蛙App不同,青蛙App并不會像微信客戶端那樣,可以將用戶的登錄態(tài)貯藏并且續(xù)期。青蛙App的登錄態(tài)都是短暫的,不續(xù)期的,所以在青蛙App上,進行小程序的啟動/登錄會有所區(qū)別。

但是對于小程序內(nèi)登錄來說,由于開發(fā)者設置了該小程序需要用戶登錄。在啟動這個小程序前,青蛙App會進行刷臉登錄,以獲取當前刷臉用戶的微信登錄態(tài),之后才會啟動小程序,所以這種登錄類型,商戶開發(fā)者在實現(xiàn)登錄邏輯時,可以采取和手機小程序一模一樣的做法。流程如下:

sequenceDiagram participant 青蛙刷臉App participant 商戶小程序 participant 商戶后臺 alt 前屏小程序 青蛙刷臉App->>青蛙刷臉App: 刷臉登錄獲取用戶微信登錄態(tài) else 背屏小程序 青蛙刷臉App->>青蛙刷臉App: 背屏掃碼獲取用戶微信登錄態(tài) end 青蛙刷臉App->>商戶小程序: 啟動小程序 青蛙刷臉App->>商戶小程序: App::onLaunch() 商戶小程序->>商戶小程序: wx.login獲取code 商戶小程序->>商戶后臺: 利用code請求登錄 商戶后臺-->>商戶小程序: 完成登錄

可以看到,唯一不同的區(qū)別就是在啟動小程序前,青蛙App需要執(zhí)行一次刷臉,獲取用戶登錄態(tài)的流程,這有別于手機微信端的直接啟動。但是作為小程序開發(fā)者,并不會感知這一流程。

區(qū)別更大的是運行中登錄,這種登錄模式,建立在開發(fā)者將他們的小程序設置為設置為不需要用戶登錄,比如首頁常駐小程序。這類小程序,啟動時,青蛙刷臉App并不會提供登錄態(tài)支持,所以他們將以無登錄態(tài)的方式啟動,這個時候,所有和用戶身份相關的API都會失效(i.e.,wx.login,wx.getUserInfo,wx.checkSession),在這種情況下,小程序如果想登錄,獲取用戶相關的信息,需要遵照下面的流程:

sequenceDiagram participant 青蛙刷臉App participant 商戶小程序 participant 商戶后臺 青蛙刷臉App->>商戶小程序: 啟動小程序 青蛙刷臉App->>商戶小程序: App::onLaunch() 商戶小程序->>商戶小程序: 運行一段時間 商戶小程序->>青蛙刷臉App: wxfaceapp.isLoginOnFaceApp 青蛙刷臉App-->>商戶小程序: 返回結果 alt 返回結果為True 商戶小程序->>商戶小程序: wx.login獲取code 商戶小程序->>商戶后臺: 利用code請求登錄 商戶后臺-->>商戶小程序: 完成登錄 else 返回結果為False 商戶小程序->>青蛙刷臉App: wxfaceapp.faceLogin 青蛙刷臉App->>青蛙刷臉App: 刷臉登錄獲取用戶微信登錄態(tài) 青蛙刷臉App-->>商戶小程序: 告知結果 商戶小程序->>商戶小程序: wx.login獲取code 商戶小程序->>商戶后臺: 利用code請求登錄 商戶后臺-->>商戶小程序: 完成登錄 end

可以看到,目前針對這一情況,我們提供了兩個JsApi,接下來我們會詳細解釋這兩個API的使用方法。

# 6.2. 查看青蛙App此時是否具有登錄態(tài) - isLoginOnFaceApp

2.12版本修改:

  1. 增加此接口
項目 不支持的具體條目
模式相關
機具相關
屏幕相關

該接口用于小程序判斷此時青蛙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版本修改:

  1. 該接口支持在前屏刷臉登錄的回調(diào)參數(shù)中新增返回用戶信息:刷臉用戶的openId、subOpenId

2.13版本修改:

  1. 提供enableMultiLogin選項,開啟后該接口可以在登錄后,重復調(diào)用,進行登錄態(tài)的反復切換
  2. 提供relaunchUrl參數(shù),傳入正確的頁面路徑后,可以在刷臉登錄完成后進行自動路由
  3. 現(xiàn)在在青蛙Pro機器上,背屏的小程序也可以使用此接口,利用二維碼進行背屏小程序登錄態(tài)的切換

2.12版本修改:

  1. 增加此接口

接口限制:

項目 不支持的具體條目
模式相關
機具相關
屏幕相關

該接口用于在運行中登錄,這種類型下,由小程序主動觸發(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版本修改:

  1. 增加此接口

接口限制:

  1. 該接口無法在背屏使用
項目 不支持的具體條目
模式相關
機具相關
屏幕相關 背屏

請注意:

  1. 此接口調(diào)用后,小程序操作用戶身份相關的API都將失效
  2. 如果想重新登錄,請重新走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版本修改:

  1. 增加本接口能力

接口限制:

  1. 此接口在背屏上無法使用
  2. 使用此接口的小程序必須使用刷臉登錄,進行登錄啟動,如果是無登錄要求啟動的小程序,此API不會被正常執(zhí)行
  3. 此API在一次啟動過程中(i.e.,刷臉登錄小程序->退出小程序,被稱為1次啟動過程),只能被調(diào)用一次
  4. 此接口調(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

接口限制:

  1. 建議會員小程序監(jiān)聽這個JsEvent,承載其他業(yè)務的小程序沒有必要監(jiān)聽這個Event
  2. 由于場景較小,建議在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

接口限制:

  1. 該接口只支持青蛙模式,不支持SDK模式
  2. 該接口支持2.22及以上版本
項目 不支持的具體條目
模式相關 SDK模式
機具相關
屏幕相關 前屏

請注意:

  1. 此接口僅適用于取消刷臉識別到確認身份的流程。但是如果顧客已經(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嗎?

支持。

上次更新: 11/14/2022, 3:01:17 PM