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

關(guān)閉
公眾號(hào)二維碼

# 三、實(shí)名認(rèn)證文檔

通過(guò)用戶刷臉授權(quán)同意身份驗(yàn)證后,向商戶返回face_sid 和open id, 商戶根據(jù) face_sid 進(jìn)行用戶是否已認(rèn)證的判斷;對(duì)于未認(rèn)證的用戶,可根據(jù) face_sid 向微信后臺(tái)請(qǐng)求進(jìn)行實(shí)名認(rèn)證,用戶授權(quán)實(shí)名信息(如姓名、身份證號(hào)、手機(jī)號(hào)等)后返回給商戶,經(jīng)過(guò)解密后才可獲取加密信息。對(duì)于已認(rèn)證的用戶,可直接調(diào)用接口關(guān)閉實(shí)名認(rèn)證。

該能力目前僅針對(duì)醫(yī)院行業(yè)開(kāi)放申請(qǐng)。

# 使用場(chǎng)景說(shuō)明

在醫(yī)院場(chǎng)景下,用戶采用傳統(tǒng)的刷身份證/醫(yī)保卡等方式來(lái)建檔、辦理就醫(yī)卡完成掛號(hào)、繳費(fèi)、查詢報(bào)告等繁雜的流程。

實(shí)名認(rèn)證目前主要應(yīng)用在醫(yī)院的設(shè)備上:用戶通過(guò)刷臉將自己的身份信息授權(quán)給醫(yī)院辦理相關(guān)業(yè)務(wù),在全過(guò)程中無(wú)需刷卡操作,因此患者就診體驗(yàn)變得更輕松和方便。

# 接入指引

  1. 申請(qǐng)對(duì)象范圍
  • 支持商戶類型:普通商戶、普通服務(wù)商子商戶
  • 支持場(chǎng)景:刷臉就醫(yī)場(chǎng)景
  • 場(chǎng)景合理性:公立醫(yī)院
  • 安全能力:
    a) 擁有該主體下的跟實(shí)名數(shù)據(jù)對(duì)接的系統(tǒng)的等保三級(jí)證書(shū),如無(wú)等保三級(jí)證書(shū)可由二級(jí)證書(shū)代替, 或者 ISO27001證。
    b) 用戶實(shí)名信息不得經(jīng)過(guò)服務(wù)商控制的服務(wù)器,并提供【數(shù)據(jù)安全評(píng)估應(yīng)答及承諾文件】
  • 商戶質(zhì)量:主體無(wú)明確違規(guī)處罰記錄
  1. 申請(qǐng)流程:

    • 郵件標(biāo)題:【刷臉實(shí)名權(quán)限申請(qǐng)】商戶名稱-服務(wù)商名稱-日期
    • 郵件正文:復(fù)制粘貼權(quán)限申請(qǐng)表表格內(nèi)容及涉及實(shí)名接口的全部流程交互圖
    • 發(fā)送地址至wxpay_operation(微信支付醫(yī)療健康運(yùn)營(yíng)):wxpay_operation@tencent.com
    • 抄送至sarahshao(邵霞):sarahshao@tencent.com;
    • 郵件附件(相關(guān)模板如下):
      ① 微信刷臉接口權(quán)限申請(qǐng)表。點(diǎn)擊下載申請(qǐng)表
      ② 數(shù)據(jù)安全評(píng)估應(yīng)答及承諾文件。點(diǎn)擊下載文件
      ③ 商戶與平臺(tái)簽訂的合作協(xié)議。點(diǎn)擊下載協(xié)議
      ④ 與申請(qǐng)商戶名稱完全一致的 信息系統(tǒng)安全等級(jí)保護(hù)三級(jí)證書(shū)(簡(jiǎn)稱等保三級(jí)證書(shū)) 或者 ISO27001證,清晰的掃描件,示例如下:

# 接入過(guò)程

# 實(shí)名認(rèn)證時(shí)序圖

sequenceDiagram participant A as 商戶APP participant B as 微信人臉SDk participant C as 商戶server participant D as 微信支付后臺(tái)API Note over A, D: Step 1:程序啟動(dòng)時(shí)初始化 A ->> B: 1. 程序啟動(dòng)時(shí)初始化 initWxpayface B -->> A: doInitWxpayface(返回初始化結(jié)果) Note over A, D: Step 2:獲取數(shù)據(jù),返回人臉識(shí)別結(jié)果 A ->> B: 2. 獲取數(shù)據(jù) getWxpayfaceRawdata B -->> A: doGetWxpayfaceRawdata(返回rawdata) A ->> C: 3. 獲取人臉SDK調(diào)用憑證 C ->> D: get_wxpayface_authinfo(rawdata) D -->> C: 返回authinfo C -->> A: 返回authinfo A ->> B: 4. 人臉識(shí)別 getWxpayfaceCode(authinfo) B -->> A: 人臉識(shí)別結(jié)果(用戶身份信息查詢憑證:face_sid、openid) A ->> A: 根據(jù)openid判斷是否已認(rèn)證 alt 需要實(shí)名認(rèn)證 Note over A, D: Step 3:請(qǐng)求用戶授權(quán)認(rèn)證 A->>B: 5. 請(qǐng)求用戶授權(quán)認(rèn)證 getWxpayAuth(參數(shù)quit_face_auth傳“0”字符串) B->>D: 請(qǐng)求用戶認(rèn)證信息 D-->>B: 用戶掩碼信息 alt 用戶授權(quán) B->>D: 用戶已確認(rèn)授權(quán) D-->>B: 返回結(jié)果 B-->>A: 返回授權(quán)結(jié)果(SUCCESS) Note over A, D: Step 4:請(qǐng)求實(shí)名認(rèn)證信息,完成認(rèn)證 A->>C:6. 請(qǐng)求實(shí)名認(rèn)證信息 C->>D: 請(qǐng)求實(shí)名認(rèn)證信息 D-->>C: 返回實(shí)名認(rèn)證信息 C-->>A:返回實(shí)名認(rèn)證信息 else 用戶沒(méi)有授權(quán) B-->> A:返回未授權(quán)結(jié)果 end else 不需要實(shí)名認(rèn)證 A->>B: 7. 退出 getWxpayAuth(參數(shù)quit_face_auth傳"1"字符串) end

注意:從1.20版本后,如果不需要Step 3請(qǐng)求用戶授權(quán)認(rèn)證,也需要調(diào)用getWxpayAuth接口退出SDK等待,參數(shù)quit_face_auth傳1。

# SDK調(diào)用

# 使用方式

  1. SDK需要集成到商戶應(yīng)用,提供的SDK為C動(dòng)態(tài)鏈接庫(kù)dll,請(qǐng)注意采用cdecl調(diào)用約定
  2. 業(yè)務(wù)?C/C++技術(shù)棧可通過(guò)編譯鏈接或者LoadLibrary的?式加載dll,并執(zhí)行相關(guān)函數(shù),C#等.NET平臺(tái)的技術(shù)棧請(qǐng)參照下面C#導(dǎo)入DLL聲明部分實(shí)現(xiàn)調(diào)用
  3. 運(yùn)行時(shí),需要先啟動(dòng)WxpayFaceService刷臉?lè)?wù),然后商戶應(yīng)用使用SDK中的接口調(diào)起刷臉功能

注意點(diǎn):

  1. 關(guān)于函數(shù)中?參、出參的數(shù)據(jù)格式, 均采?JSON字符串,編碼為UTF-8。
  2. 調(diào)用wxpayCallFaceService成功后,務(wù)必調(diào)用wxpayReleaseResponse來(lái)釋放響應(yīng)結(jié)果

# 入口函數(shù)原型

/**
 * 調(diào)用人臉?lè)?wù)
 * @param reqBuf 	請(qǐng)求參數(shù)(JSON字符串)
 * @param reqSize 	請(qǐng)求參數(shù)長(zhǎng)度
 * @param pRespBuf	用來(lái)接收響應(yīng)結(jié)果(JSON字符串)的char**指針
 * @param pRespSize 用來(lái)接收響應(yīng)結(jié)果長(zhǎng)度的unsigned int*指針
 * @return 如果成功返回0,失敗則返回非0
 */
extern "C" int wxpayCallFaceService(const char *reqBuf, unsigned int reqSize, char **pRespBuf, unsigned int *pRespSize);


/**
 * 釋放人臉?lè)?wù)的響應(yīng)字符串,調(diào)用wxpayCallFaceService成功后務(wù)必調(diào)用此函數(shù)釋放內(nèi)存
 * @param pRespBuf	指向響應(yīng)結(jié)果(JSON字符串)的指針
 */
extern "C" void wxpayReleaseResponse(char **pRespBuf);

# C# 導(dǎo)入DLL聲明

// 聲明
[DllImport("WxpayFaceSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public extern static int wxpayCallFaceService(IntPtr reqBuf, UInt32 reqSize, out IntPtr pRespBuf, out UInt32 pRespSize);

[DllImport("WxpayFaceSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public extern static int wxpayReleaseResponse(out IntPtr pRespBuf);

// 封裝
public static int CallWxpayFaceService(string req, ref string resp)
{
    byte[] reqBuf = Encoding.UTF8.GetBytes(req);
    IntPtr reqPtr = Marshal.AllocHGlobal(reqBuf.Length);
    Marshal.Copy(reqBuf, 0, reqPtr, reqBuf.Length);

    IntPtr respPtr;
    UInt32 respSize;

    int ret = wxpayCallFaceService(reqPtr, (UInt32)reqBuf.Length, out respPtr, out respSize);
    if (ret == 0)
    {
        byte[] respBuf = new byte[respSize];
        Marshal.Copy(respPtr, respBuf, 0, (int)respSize);
        resp = Encoding.UTF8.GetString(respBuf);
        wxpayReleaseResponse(out respPtr);
    }
    Marshal.FreeHGlobal(reqPtr);
    return ret;
}

# 請(qǐng)求參數(shù)Req和響應(yīng)結(jié)果Resp構(gòu)成

reqresp均為JSON結(jié)構(gòu)的字符串

req包含:公共請(qǐng)求字段 + 命令專有請(qǐng)求字段

resp 包含:公共響應(yīng)字段 + 命令專有響應(yīng)字段

# 請(qǐng)求公共字段

參數(shù) 必填 類型 說(shuō)明
cmd string 命令字,即各接口名:
initWxpayface
getWxpayfaceRawdata
getWxpayfaceCode
getWxpayAuth
releaseWxpayface
version string 版本號(hào), 固定填寫1
now int 取當(dāng)前時(shí)間的10位unix時(shí)間戮。 例如:1540901425

# 請(qǐng)求公共字段

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述

# 公共錯(cuò)誤碼

參數(shù) 錯(cuò)誤碼 類型 說(shuō)明
return_code SUCCESS string 接口成功
return_code ERROR string 接口失敗
return_code PARAM_ERROR string 參數(shù)錯(cuò)誤
return_code SYSTEMERROR string 接口返回錯(cuò)誤

# 接口調(diào)用流程

# 1、程序啟動(dòng)時(shí)初始化

# 程序啟動(dòng)時(shí)初始化initWxpayface

接口作用:對(duì)人臉SDK進(jìn)行初始化

支持版本: 1.12及以上

# 請(qǐng)求參數(shù)

除公共參數(shù)外,下方參數(shù)中的代理設(shè)置可用于配置刷臉走商戶內(nèi)部代理。若不需要,則不用填寫代理參數(shù)。

參數(shù) 必填 類型 說(shuō)明
ip string HTTP代理IP
port string HTTP代理端口, 須為數(shù)字
user string HTTP代理的用戶名
passwd string HTTP代理的密碼
proxy_type int 0:none;
1:HttpTunnel;
2:Socks5;
v1.18版本及以上支持
camera_rotation int 對(duì)攝像頭畫面進(jìn)行旋轉(zhuǎn):
1為+90度;
2為180度;
3為-90度;
如需使用該參數(shù)請(qǐng)聯(lián)系微信支付確認(rèn)設(shè)備實(shí)際效果符合規(guī)范。1.18版本以上支持

# 返回參數(shù)

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述

# 請(qǐng)求示例

// initWxpayface
// 初始化,默認(rèn)無(wú)代理
const char* req = "{\"cmd\":\"initWxpayface\",\"version\":\"1\",\"now\":1540901425}";
// 初始化并配置代理
const char* req = "{\"cmd\":\"initWxpayface\",\"version\":\"1\",\"now\":1540901425,\"ip\":\"10.123.10.11\",\"port\":\"8356\",\"user\":\"username\",\"passwd\":\"password\"}";
char *resp;
unsigned int len;
int ret = wxpayCallFaceService(req, strlen(req), &resp, &len);

if (ret == 0) {
    printf("resp: %s len: %u\n", resp, len);
    wxpayReleaseResponse(&resp);
}
/*
 * resp: {"return_code":"SUCCESS","return_msg":"SUCCESS"} len: 48
 */

# 2、獲取數(shù)據(jù)

# 獲取數(shù)據(jù)getWxpayfaceRawdata

接口作用:獲取rawdata數(shù)據(jù)

支持版本: 1.12及以上

# 返回參數(shù)

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述
rawdata S string(2048) 初始化數(shù)據(jù)。用于接口調(diào)用獲取authinfo, 參見(jiàn): 3、獲取調(diào)用憑證

# 調(diào)用示例

// getWxpayfaceRawdata
const char* req = "{\"cmd\":\"getWxpayfaceRawdata\",\"version\":\"1\",\"now\":1540901425}";
char *resp;
unsigned int len;
int ret = wxpayCallFaceService(req, strlen(req), &resp, &len);

if (ret == 0) {
    printf("resp: %s len: %u\n", resp, len);
    wxpayReleaseResponse(&resp);
}
/*
 * resp: {"rawdata":"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==","return_code":"SUCCESS","return_msg":"SUCCESS"} len: 885
 */

# 3、獲取調(diào)用憑證

# 獲取調(diào)用憑證get_wxpayface_authinfo(rawdata)(獲取調(diào)用憑證)

接口作用:獲取調(diào)用憑證

接口地址:https://payapp.weixin.qq.com/face/get_wxpayface_authinfo

注意:這是一個(gè)后端調(diào)用接口,請(qǐng)?jiān)讷@取數(shù)據(jù)(getWxpayfaceRewdata)成功后獲取調(diào)用憑證get_wxpayface_authinfo(rawdata)

# 請(qǐng)求參數(shù)

參數(shù) 必填 類型 說(shuō)明
store_id string(32) 門店編號(hào), 由商戶定義, 各門店唯一。
store_name string(128) 門店名稱,由商戶定義。(可用于展示)
device_id string(32) 終端設(shè)備編號(hào),由商戶定義。
attach string 附加字段。字段格式使用Json
rawdata string(2048) 初始化數(shù)據(jù)。由微信人臉SDK的接口返回。
獲取方式參見(jiàn):
[獲取數(shù)據(jù) getWxpayfaceRawdata](#獲取數(shù)據(jù) getWxpayfaceRawdata)
[獲取數(shù)據(jù) getWxpayfaceRawdata](#獲取數(shù)據(jù) getWxpayfaceRawdata)
appid string(32) 商戶號(hào)綁定的公眾號(hào)/小程序 appid
mch_id string(32) 商戶號(hào)
sub_appid string(32) 子商戶綁定的公眾號(hào)/小程序 appid(服務(wù)商模式)
sub_mch_id string(32) 子商戶號(hào)(服務(wù)商模式)
now int 取當(dāng)前時(shí)間,10位unix時(shí)間戳。 例如:1239878956
version string 版本號(hào)。固定為1
sign_type string 簽名類型,目前支持HMAC-SHA256和MD5,默認(rèn)為MD5
nonce_str string(32) 隨機(jī)字符串,不長(zhǎng)于32位
sign string 參數(shù)簽名。詳見(jiàn)微信支付簽名算法

# 返回參數(shù)

參數(shù) 必填 類型 說(shuō)明
return_code string(16) 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述
authinfo string(4096) SDK調(diào)用憑證。用于調(diào)用SDK的人臉識(shí)別接口。
參見(jiàn)[人臉識(shí)別 getWxpayfaceCode](#人臉識(shí)別 getWxpayfaceCode)
expires_in int authinfo的有效時(shí)間, 單位秒。 例如: 3600
在有效時(shí)間內(nèi), 對(duì)于同一臺(tái)終端設(shè)備,相同的參數(shù)的前提下(如:相同的公眾號(hào)、商戶號(hào)、 門店編號(hào)等),可以用同一個(gè)authinfo,多次調(diào)用SDK的getWxpayfaceCode接口。
nonce_str string(32) 隨機(jī)字符串
sign string(32) 響應(yīng)結(jié)果簽名
appid string(32) 公眾號(hào)
mch_id string(32) 商戶號(hào)
sub_appid string(32) 子商戶公眾賬號(hào)ID(服務(wù)商模式)
sub_mch_id string(32) 子商戶號(hào)(服務(wù)商模式)

# 請(qǐng)求示例

<return_code>SUCCESS</return_code>
<return_msg>請(qǐng)求成功</return_msg>
<nonce_str>Tivppi4UXAbgLxk8e1Sij76YdowOFFii</nonce_str>
<sign>PL0EUID6A7ICWNKHCSMQC0UIXOYNSE5B</sign>
<appid>wx31fdaErqR31</appid>
<mch_id>12345689</mch_id>
<authinfo>q3OPhFtQBf6KZGqmZhejKCRy5K/ch0kwS11YSsEj9XmUGqcsT2QPHt0Oa7xaCMCoSZTWMmShCo4dOiO5tU+OJEsvSxXzn5m3Nkh747tinNlbpJmVq1zOPj+FJNndkzanxoiAddO8p1EfrmUhJs/aNf0pDfrPoVfkAapK+ZY6blwyaDQ9bB7+KkZq29kObsXOZ3thg+bxP4RAqC0oxNS4JiyP0uA1Euzxtkc9lCTebloFied8stILrMehUKukeMGkZ1SzTyc8/HFHApzHahNPX6yD8ttzYnhe+IRMFJgpuTlIvEOYZUxenPXE1A5clrPvOBeJDszX/OvZl4fpYWPpXAcVQlw+gfYhblt+rT6ALMsD73w/rT4NRriQEEraC4Pfb5yua4qAqv4TVo04</authinfo>
<expires_in>7200</expires_in>

建議:返回的接口憑證authinfo,可以在expires_in指定的有效期內(nèi),同一臺(tái)機(jī)具上重復(fù)使用

# 4、進(jìn)行人臉識(shí)別

# 進(jìn)行人臉識(shí)別getWxpayfaceCode(獲取用戶信息)

接口作用:?jiǎn)?dòng)人臉APP主界面入口,開(kāi)啟人臉識(shí)別,獲取用戶身份信息查詢憑證。

注意:請(qǐng)?jiān)讷@取調(diào)用憑證get_wxpayface_authinfo(rawdata)成功后進(jìn)行人臉識(shí)別(getWxpayfaceCode)

支持版本: 1.12及以上

# 請(qǐng)求參數(shù)

參數(shù) 必填 類型 說(shuō)明
appid string 商戶號(hào)綁定的公眾號(hào)/小程序 appid
mch_id string 商戶號(hào)
sub_appid string(32) 子商戶綁定的公眾號(hào)/小程序 appid(可不填)
sub_mch_id string(32) 子商戶號(hào)(非服務(wù)商模式不填)
store_id string 門店編號(hào)
openid string 通過(guò)getWxpayfaceUserInfo獲取的openid,傳入后可使用快捷支付模式。1.24版本以上支持該參數(shù)
telephone string 用戶手機(jī)號(hào)。用于傳遞會(huì)員手機(jī),此手機(jī)將作為默認(rèn)值, 填寫到手機(jī)輸入欄。
face_authtype string 可選值:
FACEPAY: 人臉憑證(face_code),用于刷臉支付
FACE_AUTH: 實(shí)名認(rèn)證(需聯(lián)系微信支付開(kāi)通權(quán)限)
authinfo string 調(diào)用憑證。獲取方式參見(jiàn): get_wxpayface_authinfo
screen_index string 指定刷臉界面顯示的屏幕編號(hào)。編號(hào)1為主屏幕,其余屏幕按系統(tǒng)設(shè)置中的順序從2開(kāi)始編號(hào),常用場(chǎng)景舉例:雙屏機(jī)器上傳"2"即可顯示在副屏上。如果不填寫則默認(rèn)顯示在主屏幕。1.18版本以上支持該參數(shù)
disable_keyboard string 設(shè)置不接受外接鍵盤輸入,可選值:"1",禁用。1.23版本以上支持該參數(shù)
token string 是否返回用戶實(shí)名授權(quán)憑證,需要用戶授權(quán)憑證傳"1"。 [1.16版本以上支持]

# 返回參數(shù)

當(dāng)face_authtypeFACE_AUTH時(shí), 接口返回:

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述
openid S string openid
sub_openid string 子商戶號(hào)下的openid(服務(wù)商模式)
telephone_used int 是否使用了請(qǐng)求參數(shù)中的telephone
可取值:
0:表示沒(méi)有使用telephone
1: 表示使用了telephone
face_sid string 用戶身份信息查詢憑證(返回face_sid時(shí)不返回openId)

# 請(qǐng)求示例

// getWxpayfaceCode
const char* req = "{\"cmd\":\"getWxpayfaceCode\",\"version\":\"1\",\"now\":1540907996,\"appid\":\"wx97debaxyzabcca2\",\"mch_id\":\"1281087510\",\"store_id\":\"IMG001\",\"face_authtype\":\"FACE_AUTH\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\"}";
char *resp;
unsigned int len;
int ret = wxpayCallFaceService(req, strlen(req), &resp, &len);

if (ret == 0) {
    printf("resp: %s len: %u\n", resp, len);
    wxpayReleaseResponse(&resp);
}
/*
 * resp: {"face_code":"xxxxxxxx-xxxx-xxxx-bxxx-xxxxxxxxx","openid":"xxx-xxxxxxxxxxxxxxxxxxxxxxxx","return_code":"SUCCESS","return_msg":"SUCCESS"} len: 155
 */

# 5、請(qǐng)求用戶授權(quán)認(rèn)證

# 請(qǐng)求用戶授權(quán)認(rèn)證getWxpayAuth(實(shí)名認(rèn)證授權(quán))

接口作用: 獲得用戶授權(quán)商戶獲取實(shí)名認(rèn)證信息

注意:根據(jù)人臉識(shí)別返回的openid判斷是否實(shí)名認(rèn)證,若未認(rèn)證,參數(shù)quit_face_auth傳0字符串實(shí)現(xiàn)實(shí)名認(rèn)證授權(quán)。

支持版本: 1.16及以上

# 請(qǐng)求參數(shù)

除公共參數(shù)外,

參數(shù) 必填 類型 說(shuō)明
authinfo string 調(diào)用憑證。獲取方式參見(jiàn): get_wxpayface_authinfo
face_sid string 用戶身份信息查詢憑證。獲取方式見(jiàn)getWxpayfaceCode
quit_face_auth string "0" : 不退出實(shí)名認(rèn)證授權(quán),默認(rèn)為"0"
1.20版本以上支持該參數(shù),且該接口改為必調(diào),流程請(qǐng)見(jiàn)時(shí)序圖

# 返回參數(shù)

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述見(jiàn)

# 請(qǐng)求示例

// getWxpayAuth
const char* req = "{\"cmd\":\"getWxpayAuth\",\"version\":\"1\",\"now\":1540908003,\"face_sid\":\"xxxxdebaxyzabcca2\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\"}";
char *resp;
unsigned int len;
int ret = wxpayCallFaceService(req, strlen(req), &resp, &len);

if (ret == 0) {
    printf("resp: %s len: %u\n", resp, len);
    wxpayReleaseResponse(&resp);
}
/*
 * resp: {"return_code":"SUCCESS","return_msg":"success"} len: 48
 */

# 6、請(qǐng)求實(shí)名認(rèn)證信息

接口作用:查詢用戶信息

接口地址:https://api.mch.weixin.qq.com/v3/facemch/users

請(qǐng)求方式:GET

注意:

  1. 調(diào)用該接口獲取授權(quán)的實(shí)名信息商戶需要先申請(qǐng)權(quán)限,申請(qǐng)流程請(qǐng)參見(jiàn)如何接入
  2. 這是一個(gè)APIv3接口。
  3. 如果是服務(wù)商模式,計(jì)算簽名時(shí)使用服務(wù)商的商戶號(hào)和API證書(shū)。
  4. 獲取到返回?cái)?shù)據(jù)后,使用商戶『API證書(shū)』解密數(shù)據(jù),『不』使用平臺(tái)證書(shū)。


 public static String rsaDecryptOAEP(String ciphertext, PrivateKey privateKey)
    throws BadPaddingException, IOException {
    try {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        byte[] data = Base64.getDecoder().decode(ciphertext);
        return new String(cipher.doFinal(data), "utf-8");
    } catch (NoSuchPaddingException | NoSuchAlgorithmException e) {
        throw new RuntimeException("當(dāng)前Java環(huán)境不支持RSA v1.5/OAEP", e);
    } catch (InvalidKeyException e) {
        throw new IllegalArgumentException("無(wú)效的私鑰", e);
    } catch (BadPaddingException | IllegalBlockSizeException e) {
        throw new BadPaddingException("解密失敗");
    }
}
# 請(qǐng)求參數(shù)
參數(shù) 必填 類型 說(shuō)明
face_sid string ?臉識(shí)別成功后可獲得接?調(diào)?憑證
注意face_sid是一個(gè)路徑參數(shù)
info_type string 標(biāo)識(shí)本次請(qǐng)求獲取的信息類型
ASK_REAL_NAME:獲取實(shí)名信息,包含姓名、身份證
ASK_UNION_ID:獲取union id
appid string 微信分配的公眾賬號(hào)ID
sub_mchid string 微信?付分配的?商戶號(hào),服務(wù)商模式下必填
sub_appid string 微信分配的?商戶公眾賬號(hào)ID
sub_serial_no string ?商戶證書(shū)序列號(hào),服務(wù)商模式下請(qǐng)求實(shí)名信息必傳
# 返回參數(shù)
參數(shù) 必填 類型 說(shuō)明
openid string 用戶在商戶appid 下的唯?標(biāo)識(shí)
sub_openid string 用戶在?商戶appid下的唯?標(biāo)識(shí),請(qǐng)求參數(shù)傳入sub_appid時(shí)則返回
real_name_info encrypted_real_name string 加密后的姓名信息,商戶?API證書(shū)私鑰解密
info_type等于 ASK_REAL_NAME 時(shí)返回
credential_type Integer 證件類型,
1: 身份證 2: 護(hù)照 3: 軍官證 4: ?兵證 5: 回鄉(xiāng)證 6: 臨時(shí)身份證
7: 戶?簿8: 警官證 9: 臺(tái)胞證 10: 營(yíng)業(yè)執(zhí)照 11: 其他證件
encrypted_credential_id string 加密后的身份證號(hào),商戶用API證書(shū)私鑰解密
info_type等于 ASK_REAL_ NAME 時(shí)返回
union_id string info_type等于 ASK_UNION_ID 時(shí)返回

# 7、退出實(shí)名認(rèn)證授權(quán)

# 退出getWxpayAuth(退出實(shí)名認(rèn)證授權(quán))

接口作用: 退出獲得用戶實(shí)名認(rèn)證

注意:根據(jù)人臉識(shí)別返回的openid判斷是否實(shí)名認(rèn)證,若已認(rèn)證,參數(shù)quit_face_auth傳1字符串實(shí)現(xiàn)退出實(shí)名認(rèn)證授權(quán)。

支持版本: 1.20及以上

# 請(qǐng)求參數(shù)

參數(shù) 必填 類型 說(shuō)明
authinfo string 調(diào)用憑證。獲取方式參見(jiàn): get_wxpayface_authinfo
face_sid string 用戶身份信息查詢憑證。獲取方式見(jiàn)getWxpayfaceCode
quit_face_auth string "1": 退出實(shí)名認(rèn)證授權(quán)
1.20版本以上支持該參數(shù),且該接口改為必調(diào),流程請(qǐng)見(jiàn)時(shí)序圖

# 返回參數(shù)

參數(shù) 必填 類型 說(shuō)明
return_code string 錯(cuò)誤碼。公共定義見(jiàn) 公共錯(cuò)誤碼
return_msg string(128) 對(duì)錯(cuò)誤碼的描述見(jiàn)

# 請(qǐng)求示例

// getWxpayAuth
const char* req = "{\"cmd\":\"getWxpayAuth\",\"version\":\"1\",\"now\":1540908003,\"face_sid\":\"xxxxdebaxyzabcca2\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\"}";
char *resp;
unsigned int len;
int ret = wxpayCallFaceService(req, strlen(req), &resp, &len);

if (ret == 0) {
    printf("resp: %s len: %u\n", resp, len);
    wxpayReleaseResponse(&resp);
}
/*
 * resp: {"return_code":"SUCCESS","return_msg":"success"} len: 48
 */
上次更新: 11/14/2022, 3:01:17 PM