W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
支付寶sdk對(duì)商戶的請(qǐng)求支付數(shù)據(jù)處理完成后,會(huì)將結(jié)果同步反饋給商戶app端。
同步返回的數(shù)據(jù),商戶可以按照下文描述的方式在服務(wù)端驗(yàn)證,驗(yàn)證通過(guò)后,可以認(rèn)為本次用戶付款成功。有些時(shí)候會(huì)出現(xiàn)商戶app在支付寶付款階段被關(guān)閉導(dǎo)致無(wú)法正確收到同步結(jié)果,此時(shí)支付結(jié)果可以完全依賴服務(wù)端的異步通知。
由于同步通知和異步通知都可以作為支付完成的憑證,且異步通知支付寶一定會(huì)確保發(fā)送給商戶服務(wù)端。為了簡(jiǎn)化集成流程,商戶可以將同步結(jié)果僅僅作為一個(gè)支付結(jié)束的通知(忽略執(zhí)行校驗(yàn)),實(shí)際支付是否成功,完全依賴服務(wù)端異步通知。
對(duì)于iOS平臺(tái)而言返回參數(shù)是一個(gè)NSDictionary對(duì)象,對(duì)于Android平臺(tái)而言是一個(gè)map結(jié)構(gòu)體。里面有三個(gè)key,其中memo是描述信息(類型為字符串);result是處理結(jié)果(類型為json結(jié)構(gòu)字符串);resultStatus是結(jié)果碼(類型為字符串)。
{
"memo" : "xxxxx",
"result" : "{
\"alipay_trade_app_pay_response\":{
\"code\":\"10000\",
\"msg\":\"Success\",
\"app_id\":\"2014072300007148\",
\"out_trade_no\":\"081622560194853\",
\"trade_no\":\"2016081621001004400236957647\",
\"total_amount\":\"0.01\",
\"seller_id\":\"2088702849871851\",
\"charset\":\"utf-8\",
\"timestamp\":\"2016-10-11 17:43:36\"
},
\"sign\":\"NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********\",
\"sign_type\":\"RSA2\"
}",
"resultStatus" : "9000"
}
參數(shù) | 類型 | 是否必填 | 最大長(zhǎng)度 | 描述 | 示例值 |
---|---|---|---|---|---|
out_trade_no | String | 是 | 64 | 商戶網(wǎng)站唯一訂單號(hào) 70501111111S001111119 | |
trade_no | String | 是 | 64 | 該交易在支付寶系統(tǒng)中的交易流水號(hào)。最長(zhǎng)64位。 | 2014112400001000340011111118 |
app_id | String | 是 | 32 | 支付寶分配給開(kāi)發(fā)者的應(yīng)用Id。 | 2014072300007148 |
total_amount | Price | 是 | 9 | 該筆訂單的資金總額,單位為RMB-Yuan。取值范圍為[0.01,100000000.00],精確到小數(shù)點(diǎn)后兩位。 | 9.00 |
seller_id | String | 是 | 16 | 收款支付寶賬號(hào)對(duì)應(yīng)的支付寶唯一用戶號(hào)。以2088開(kāi)頭的純16位數(shù)字 | 2088111111116894 |
msg | String | 是 | 16 | 處理結(jié)果的描述,信息來(lái)自于code返回結(jié)果的描述 | success |
charset | String | 是 | 16 | 編碼格式 | utf-8 |
timestamp | String | 是 | 32 | 時(shí)間 | 2016-10-11 17:43:36 |
code | String | 是 | 16 | 結(jié)果碼 | 具體見(jiàn) |
返回碼 | 含義 |
---|---|
9000 | 訂單支付成功 |
8000 | 正在處理中,支付結(jié)果未知(有可能已經(jīng)支付成功),請(qǐng)查詢商戶訂單列表中訂單的支付狀態(tài) |
4000 | 訂單支付失敗 |
5000 | 重復(fù)請(qǐng)求 |
6001 | 用戶中途取消 |
6002 | 網(wǎng)絡(luò)連接出錯(cuò) |
6004 | 支付結(jié)果未知(有可能已經(jīng)支付成功),請(qǐng)查詢商戶訂單列表中訂單的支付狀態(tài) |
其它 | 其它支付錯(cuò)誤 |
為了幫助開(kāi)發(fā)者調(diào)用開(kāi)放接口,我們提供了開(kāi)放平臺(tái)服務(wù)端DEMO&SDK,包含JAVA、PHP和.NET三語(yǔ)言版本,封裝了簽名&驗(yàn)簽、HTTP接口請(qǐng)求等基礎(chǔ)功能。強(qiáng)烈建議先下載對(duì)應(yīng)語(yǔ)言版本的SDK并引入您的開(kāi)發(fā)工程進(jìn)行快速接入。
在返回?cái)?shù)據(jù)resultStatus
為9000
的情況下,解析result
結(jié)果,提取驗(yàn)證簽名的相關(guān)核心數(shù)據(jù):
第一步: 提取alipay_trade_app_pay_response
字段值,其代表簽名原始字符串,上述示例格式如下:
{"code":"10000","msg":"Success","total_amount":"9.00","app_id":"2014072300007148","trade_no":"2014112400001000340011111118","seller_id":"2088111111116894","out_trade_no":"70501111111S001111119"}
第二步: 提取sign_type
字段值,其代表簽名類型,上述示例格式如下:
RSA2
第三步: 提取sign字段值,其代表簽名結(jié)果,上述示例格式如下:
NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********
第四步: 驗(yàn)證簽名是否合法:
使用各自語(yǔ)言對(duì)應(yīng)的SHA256WithRSA簽名驗(yàn)證函數(shù),傳入簽名的原始字符串、支付寶公鑰、簽名類型RSA、簽名字符進(jìn)行合法性驗(yàn)證。
第五步: 在第四步簽名驗(yàn)證通過(guò)后,必須嚴(yán)格按照如下的描述校驗(yàn)通知參數(shù)的合法性:
out_trade_no
是否為商戶系統(tǒng)中創(chuàng)建的訂單號(hào);total_amount
是否確實(shí)為該訂單的實(shí)際金額(即商戶訂單創(chuàng)建時(shí)的金額);seller_id
(或者seller_email
) 是否為out_trade_no
這筆單據(jù)對(duì)應(yīng)的操作方(有的時(shí)候,一個(gè)商戶可能有多個(gè)seller_id/seller_email
);app_id
是否為該商戶本身。上述1、2、3、4有任何一個(gè)驗(yàn)證不通過(guò),則表明同步校驗(yàn)結(jié)果是無(wú)效的,只有全部驗(yàn)證通過(guò)后,才可以認(rèn)定買家付款成功。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: