支付寶 App支付同步通知參數(shù)說(shuō)明

2018-10-26 20:07 更新

支付寶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ù)端異步通知。

返回結(jié)果示例(iOS|Android)

對(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"
}

返回結(jié)果參數(shù)

參數(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)

resultStatus結(jié)果碼含義

返回碼 含義
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ò)誤

同步通知驗(yàn)證

為了幫助開(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ù)resultStatus9000的情況下,解析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ù)的合法性:

  1. 商戶需要驗(yàn)證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號(hào);
  2. 判斷total_amount是否確實(shí)為該訂單的實(shí)際金額(即商戶訂單創(chuàng)建時(shí)的金額);
  3. 校驗(yàn)通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)對(duì)應(yīng)的操作方(有的時(shí)候,一個(gè)商戶可能有多個(gè)seller_id/seller_email);
  4. 驗(yàn)證app_id是否為該商戶本身。

上述1、2、3、4有任何一個(gè)驗(yàn)證不通過(guò),則表明同步校驗(yàn)結(jié)果是無(wú)效的,只有全部驗(yàn)證通過(guò)后,才可以認(rèn)定買家付款成功。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)