注意:
H5支付權(quán)限申請事件回調(diào)通知API
注意:
● 同樣的通知可能會多次發(fā)送給商戶系統(tǒng)。商戶系統(tǒng)必須能夠正確處理重復的通知。
推薦的做法是,當商戶系統(tǒng)收到通知進行處理時,先檢查對應業(yè)務數(shù)據(jù)的狀態(tài),并判斷該通知是否已經(jīng)處理。如果未處理,則再進行處理;如果已處理,則直接返回結(jié)果成功。在對業(yè)務數(shù)據(jù)進行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
特別提醒:商戶系統(tǒng)對于開啟結(jié)果通知的內(nèi)容一定要做簽名驗證,并校驗通知的信息是否與商戶側(cè)的信息一致,防止數(shù)據(jù)泄露導致出現(xiàn)“假通知”,造成意外損失。
1. 接口說明
適用對象: 機構(gòu)模式
請求URL:該鏈接是通過創(chuàng)建H5支付權(quán)限申請單提交notify_url參數(shù)設置,必須為https協(xié)議。必須為https協(xié)議。如果鏈接無法訪問,商戶將無法接收到微信通知。通知url必須為直接可訪問的url,不能攜帶參數(shù)。示例:success_notify_url:“http://www.tg885.com/wxpay/pay.action”
請求方式:POST
2. 通知規(guī)則
H5支付申請完成后,微信會把相關(guān)審核結(jié)果和申請單信息發(fā)送給商戶,商戶需要接收處理,并按照文檔規(guī)范返回應答。出于安全的考慮,我們對回調(diào)內(nèi)容數(shù)據(jù)進行了加密,商戶需要先對通知數(shù)據(jù)進行解密,才能得到回調(diào)結(jié)果數(shù)據(jù)。
對后臺通知交互時,如果微信收到應答不是成功或超時,微信認為通知失敗,微信會通過一定的策略定期重新發(fā)起通知,盡可能提高通知的成功率,但微信不保證通知最終能成功。保持階梯式回調(diào),即通知頻率為15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h
- 總計 24h4m
3. 通知報文
審核結(jié)果通知是以POST 方法訪問商戶設置的通知url,通知的數(shù)據(jù)以JSON 格式通過請求主體(BODY)傳輸。通知的數(shù)據(jù)包括了加密的支付結(jié)果詳情。
下面詳細描述證書解密的流程
1、從商戶平臺上獲取商戶的密鑰,記為“key”。
2、針對resource.algorithm中描述的算法(目前為AEAD_AES_256_GCM),取得對應的參數(shù)nonce和associated_data。
3、使用key、nonce和associated_data,對數(shù)據(jù)密文resource.ciphertext進行解密,得到JSON形式的資源對象
注意:AEAD_AES_256_GCM算法的接口細節(jié),請參考rfc5116。微信支付使用的密鑰key長度為32個字節(jié),隨機串nonce長度12個字節(jié),associated_data長度小于16個字節(jié)并可能為空。
4. 請求參數(shù)
參數(shù)名 |
變量 |
類型[長度限制] |
必填 |
描述 |
通知ID |
id |
string[1,36] |
是 |
通知的唯一ID
示例值:f7c34059-0f2d-5b32-ba33-a42dks0597c5
|
通知創(chuàng)建時間 |
create_time |
string[1,64] |
是 |
通知創(chuàng)建的時間,格式為rfc3339格式,如2018-06-08T10:34:56+08:00?代表北京時間2018年06月08日10時34分56秒
示例值:2018-06-08T10:34:56+08:00
|
通知類型 |
event_type |
string[1,32] |
是 |
通知的類型
審核通過通知的類型為 APPLYMENT_STATE.APPROVED
示例值:APPLYMENT_STATE.APPROVED
|
通知數(shù)據(jù)類型 |
resource_type |
string[1,32] |
是 |
通知的資源數(shù)據(jù)類型,審核成功通知為applyment
示例值:applyment
|
回調(diào)摘要 |
summary |
string[1,64] |
是 |
回調(diào)摘要
示例值:H5支付權(quán)限申請通知
|
通知數(shù)據(jù) |
resource |
object |
是 |
通知資源數(shù)據(jù) |
參數(shù)名 |
變量 |
類型[長度限制] |
必填 |
描述 |
加密算法類型 |
algorithm |
string[1,32] |
是 |
對支付結(jié)果數(shù)據(jù)進行加密的加密算法,目前只支持AEAD_AES_256_GCM
示例值:AEAD_AES_256_GCM
|
數(shù)據(jù)密文 |
ciphertext |
string[1,1048576] |
是 |
Base64編碼后的支付結(jié)果數(shù)據(jù)密文 |
原始回調(diào)類型 |
original_type |
string[1,64] |
是 |
原始回調(diào)類型
示例值:applyment
|
附加數(shù)據(jù) |
associated_data |
string[1,16] |
否 |
加密使用的附加數(shù)據(jù) |
隨機串 |
nonce |
string[1,32] |
是 |
加密使用的隨機串 |
|
5. 通知簽名
加密不能保證通知請求來自微信。微信會對發(fā)送給商戶的通知進行簽名,并將簽名值放在通知的HTTP頭Wechatpay-Signature。商戶應當驗證簽名,以確認請求來自微信,而不是其他的第三方。簽名驗證的算法請參考《微信支付API
V3簽名驗證》。
{
"id":"f7c34059-0f2d-5b32-ba33-a42dks0597c5",
"create_time":"2019-12-12T16:54:38+08:00",
"resource_type":"applyment",
"event_type":"APPLYMENT_STATE.APPROVED",
"summary":"H5支付權(quán)限申請通知",
"resource":{
"original_type":"applyment",
"algorithm":"AEAD_AES_256_GCM",
"ciphertext":"xxx",
"associated_data":"applyment",
"nonce":"j9g1wAzF9Xn1"
}
}
商戶對resource對象進行解密后,得到的資源對象示例
{
"applyment_id": 100000,
"applyment_state": "PENDING",
"applyment_type": "APPLY_FOR_PAYMENT_AUTHORITY",
"business_description": "騰訊于1998年11月成立,是一家互聯(lián)網(wǎng)公司,通過技術(shù)豐富互聯(lián)網(wǎng)用戶的生活,助力企業(yè)數(shù)字化升級。我們的使命是“用戶為本 科技向善”",
"company_register_cert": "6uqyGjvHzOhsLleGFQVRF",
"domains": ["qq.com"],
"notify_url": "http://www.tg885.com/wxpay/pay.action",
"audit_reject_detail": "商戶證書不符合要求",
"sub_mchid": "2491935631",
"transaction_limit_type": "UN_LAUNCHED_WEBSITE_LIMIT",
"website_business_page_pics": ["6uqyGjvHzOhsLleGFQVRF"],
"website_homepage_pics": ["6uqyGjvHzOhsLleGFQVRF"],
"website_state": "HAS_LAUNCHED",
"website_url": "https://qq.com"
}
{
"sp_mchid": "10000100",
}
6. 審核結(jié)果通知參數(shù)
參數(shù)名 |
變量 |
類型[長度限制] |
必填 |
描述 |
子商戶號 |
sub_mchid |
string[1, 32] |
是 |
當前機構(gòu)/服務商下的子商戶號
注意:僅適用于機構(gòu)模式
示例值:2491935631
|
H5支付域名 |
domains |
array |
是 |
Body 拉起H5支付的域名,不超過5個。
注意:提交的修改的域名列表審核通過后將會覆蓋已有支付域名列表。
示例值:["qq.com"]
|
公司介紹和業(yè)務描述 |
business_description |
string[1, 500] |
否 |
若選擇了無限額交易類型,則此字段必須上傳
示例值:騰訊于1998年11月成立,是一家互聯(lián)網(wǎng)公司,通過技術(shù)豐富互聯(lián)網(wǎng)用戶的生活,助力企業(yè)數(shù)字化升級。我們的使命是“用戶為本 科技向善”
|
公司注冊資質(zhì)證書 |
company_register_cert |
string[1, 128] |
否 |
當選擇不限額度的支付類型,此字段必傳
示例值:6uqyGjvHzOhsLleGFQVRF
|
限額類型 |
transaction_limit_type |
string |
是 |
H5支付限額類型
Limited Quota: ①1000 CNY/day/person if touched the transaction limit of the H5 payment, this
customer couldn't pay to this sub-merchant through H5 channel on this day (re-accumulate in the
next day)
② 50000 CNY/day/sub-merchant
UN_LAUNCHED_WEBSITE_LIMIT:未上線經(jīng)營網(wǎng)址支付額度
Limited Quota:① 50000 CNY/day/person,如觸及H5支付限額支付限額,則該客戶當天無法通過H5渠道向該子商戶支付(次日重新累積)
② 500000 CNY/day/sub-merchant,如觸及H5支付限額額度, 該子商戶當天無法通過H5渠道收款(次日重新累計)
NORMAL_LIMIT:未補充完整資料時獲得普通支付額度
NO_LIMIT:無支付額度限制
示例值:UN_LAUNCHED_WEBSITE_LIMIT
|
經(jīng)營網(wǎng)址商業(yè)頁面截圖 |
website_business_page_pics |
array |
否 |
若經(jīng)營網(wǎng)址未上線,則此字段必傳。Media ID,通過上傳圖片API獲得
示例值:["6uqyGjvHzOhsLleGFQVRF"]
|
經(jīng)營網(wǎng)址首頁截圖 |
website_homepage_pics |
array |
否 |
若經(jīng)營網(wǎng)址未上線,則此字段必傳。Media ID,通過上傳圖片API獲得
示例值:["6uqyGjvHzOhsLleGFQVRF"]
|
子商戶經(jīng)營網(wǎng)址狀態(tài) |
website_state |
string |
是 |
子商戶經(jīng)營網(wǎng)址狀態(tài),包括已上線和未上線
HAS_LAUNCHED:經(jīng)營網(wǎng)址已上線
UN_LAUNCHED:經(jīng)營網(wǎng)址未上線
示例值:HAS_LAUNCHED
|
子商戶H5經(jīng)營網(wǎng)址 |
website_url |
string[1, 128] |
是 |
包含該子商戶的主營業(yè)務、銷售商品/服務及價格、用戶可在線下單購買的網(wǎng)址。
示例值:https://qq.com
|
申請單號 |
applyment_id |
int |
是 |
申請單的唯一標識
示例值:100000
|
駁回原因 |
audit_reject_detail |
string[1, 500] |
否 |
申請單被駁回的原因,當申請單被駁回時此字段會顯示具體的駁回原因
示例值:商戶證書不符合要求
|
申請單狀態(tài) |
applyment_state |
string |
是 |
H5支付申請單狀態(tài)
PENDING:待創(chuàng)建,申請單暫未創(chuàng)建,可稍后查詢或檢查進件狀態(tài)是否正常
UNDER_REVIEW:審核中,申請單已創(chuàng)建,并且已進入審核階段
APPROVED:已通過,申請單已審核通過
REJECTED:已駁回,申請單已駁回,請留意駁回原因字段 audit_reject_detail
示例值:PENDING
|
申請單類型 |
applyment_type |
string |
是 |
H5支付權(quán)限申請單類型,包括H5支付權(quán)限申請和解除H5支付限額申請
APPLY_FOR_PAYMENT_AUTHORITY:申請H5支付權(quán)限
APPLY_FOR_RELIEVE_LIMITED:申請解除H5支付限額
示例值:APPLY_FOR_PAYMENT_AUTHORITY
|
商戶提供的審核結(jié)果回調(diào)接口 |
notify_url |
string[1, 128] |
否 |
必須為https協(xié)議。如果鏈接無法訪問,商戶將無法接收到微信通知。
通知url必須為直接可訪問的url,不能攜帶參數(shù)。
《權(quán)限申請回調(diào)文檔》
示例值:http://www.tg885.com/wxpay/pay.action
|
7. 通知應答
參數(shù)名 |
變量 |
類型 |
必填 |
描述 |
返回狀態(tài)碼 |
code |
string[1,32] |
是 |
詳見下面返回狀態(tài)碼說明
示例值:SUCCESS
|
返回信息 |
message |
string[1,256] |
否 |
返回信息,為錯誤原因
示例值:系統(tǒng)錯誤
|
200
{
"code": "SUCCESS",
"message": "OK"
}
{
"code": "SYSTEM_ERROR",
"message": "系統(tǒng)失敗"
}