對于手機網站支付産生的交易,支付寶會根據原始支付API中傳入的異步通知位址notify_url,通過POST請求的形式将支付結果作為參數通知到商戶系統。
異步通知參數
參數 | 參數名稱 | 類型 | 必填 | 描述 | 範例 |
---|---|---|---|---|---|
notify_time | 通知時間 | Date | 是 | 通知的發送時間。格式為yyyy-MM-dd HH:mm:ss | 2015-14-27 15:45:58 |
notify_type | 通知類型 | String(64) | 通知的類型 | trade_status_sync | |
notify_id | 通知校驗ID | String(128) | ac05099524730693a8b330c5ecf72da9786 | ||
app_id | 開發者的app_id | String(32) | 支付寶配置設定給開發者的應用Id | 2014072300007148 | |
charset | 編碼格式 | String(10) | 編碼格式,如utf-8、gbk、gb2312等 | utf-8 | |
version | 接口版本 | String(3) | 調用的接口版本,固定為:1.0 | 1.0 | |
sign_type | 簽名類型 | 商戶生成簽名字元串所使用的簽名算法類型,目前支援RSA2和RSA,推薦使用RSA2 | RSA2 | ||
sign | 簽名 | String(256) | 請參考異步傳回結果的驗簽 | 601510b7970e52cc63db0f44997cf70e | |
trade_no | 支付寶交易号 | 支付寶交易憑證号 | 2013112011001004330000121536 | ||
out_trade_no | 商戶訂單号 | 原支付請求的商戶訂單号 | 6823789339978248 | ||
out_biz_no | 商戶業務号 | 否 | 商戶業務ID,主要是退款通知中傳回退款申請的流水号 | HZRF001 | |
buyer_id | 買家支付寶使用者号 | String(16) | 買家支付寶賬号對應的支付寶唯一使用者号。以2088開頭的純16位數字 | 2088102122524333 | |
buyer_logon_id | 買家支付寶賬号 | String(100) | 15901825620 | ||
seller_id | 賣家支付寶使用者号 | String(30) | 2088101106499364 | ||
seller_email | 賣家支付寶賬号 | [email protected] | |||
trade_status | 交易狀态 | 交易目前所處的狀态,見交易狀态說明 | TRADE_CLOSED | ||
total_amount | 訂單金額 | Number(9,2) | 本次交易支付的訂單金額,機關為人民币(元) | 20 | |
receipt_amount | 實收金額 | 商家在交易中實際收到的款項,機關為元 | 15 | ||
invoice_amount | 開票金額 | 使用者在交易中支付的可開發票的金額 | 10.00 | ||
buyer_pay_amount | 付款金額 | 使用者在交易中支付的金額 | 13.88 | ||
point_amount | 集分寶金額 | 使用集分寶支付的金額 | 12.00 | ||
refund_fee | 總退款金額 | 退款通知中,傳回總退款金額,機關為元,支援兩位小數 | 2.58 | ||
subject | 訂單标題 | 商品的标題/交易标題/訂單标題/訂單關鍵字等,是請求時對應的參數,原樣通知回來 | 當面付交易 | ||
body | 商品描述 | String(400) | 該訂單的備注、描述、明細等。對應請求時的body參數,原樣通知回來 | 當面付交易内容 | |
gmt_create | 交易建立時間 | 該筆交易建立的時間。格式為yyyy-MM-dd HH:mm:ss | 2015-04-27 15:45:57 | ||
gmt_payment | 交易付款時間 | 該筆交易的買家付款時間。格式為yyyy-MM-dd HH:mm:ss | |||
gmt_refund | 交易退款時間 | 該筆交易的退款時間。格式為yyyy-MM-dd HH:mm:ss.S | 2015-04-28 15:45:57.320 | ||
gmt_close | 交易結束時間 | 該筆交易結束時間。格式為yyyy-MM-dd HH:mm:ss | 2015-04-29 15:45:57 | ||
fund_bill_list | 支付金額資訊 | String(512) | 支付成功的各個管道金額資訊,詳見資金明細資訊說明 | [{“amount”:“15.00”,“fundChannel”:“ALIPAYACCOUNT”}] | |
passback_params | 回傳參數 | 公共回傳參數,如果請求時傳遞了該參數,則傳回給商戶時會在異步通知時将該參數原樣傳回。本參數必須進行UrlEncode之後才可以發送給支付寶 | merchantBizType%3d3C%26merchantBizNo%3d2016010101111 | ||
voucher_detail_list | 優惠券資訊 | String | 本交易支付時所使用的所有優惠券資訊,詳見優惠券資訊說明 | [{“amount”:“0.20”,“merchantContribute”:“0.00”,“name”:“一鍵建立券模闆的券名稱”,“otherContribute”:“0.20”,“type”:“ALIPAY_DISCOUNT_VOUCHER”,“memo”:“學生卡8折優惠”] |
交易狀态說明
枚舉名稱 | 枚舉說明 |
---|---|
WAIT_BUYER_PAY | 交易建立,等待買家付款 |
未付款交易逾時關閉,或支付完成後全額退款 | |
TRADE_SUCCESS | 交易支付成功 |
TRADE_FINISHED | 交易結束,不可退款 |
通知觸發條件
觸發條件名 | 觸發條件描述 | 觸發條件預設值 |
---|---|---|
交易完成 | false(不觸發通知) | |
支付成功 | true(觸發通知) | |
交易建立 | ||
交易關閉 |
資金明細資訊說明
參數說明 | 是否可為空 | 樣例 | |||
---|---|---|---|---|---|
fundChannel | 支付管道 | 支付管道,參見下面的“支付管道說明”。 | 可空 | ALIPAYACCOUNT | |
amount | 支付金額 | 使用指定支付管道支付的金額,機關為元。 |
支付管道說明
支付管道代碼 | |
---|---|
COUPON | 支付寶紅包 |
支付寶餘額 | |
POINT | 集分寶 |
DISCOUNT | 折扣券 |
PCARD | 預付卡 |
FINANCEACCOUNT | 餘額寶 |
MCARD | 商家儲值卡 |
MDISCOUNT | 商戶優惠券 |
MCOUPON | 商戶紅包 |
PCREDIT | 螞蟻花呗 |
優惠券資訊說明
name | 券名稱 | XX超市5折券 | |||
type | 券類型 | 券類型,目前支援三種類型: ALIPAY_FIX_VOUCHER - 全場代金券 ALIPAY_DISCOUNT_VOUCHER - 折扣券 ALIPAY_ITEM_VOUCHER - 單品優惠 注:不排除将來新增其他類型的可能,商家接入時請注意相容性,避免寫死 | ALIPAY_FIX_VOUCHER | ||
優惠券面額 | 優惠券面額,它應該等于商家出資加上其他出資方出資 | ||||
merchant_contribute | 商家出資 | 商家出資(特指發起交易的商家出資金額) | 9.00 | ||
other_contribute | 其他出資方出資金額 | 其他出資方出資金額,可能是支付寶,可能是品牌商,或者其他方,也可能是他們的共同出資 | |||
memo | 優惠券備注資訊 | 學生專用優惠 |
伺服器異步通知頁面特性
- 必須保證伺服器異步通知頁面(notify_url)上無任何字元,如空格、HTML标簽、開發系統自帶抛出的異常提示資訊等;
- 支付寶是用POST方式發送通知資訊,是以該頁面中擷取參數的方式,如:request.Form(“out_trade_no”)、$_POST[‘out_trade_no’];
- 支付寶主動發起通知,該方式才會被啟用;
- 隻有在支付寶的交易管理中存在該筆交易,且發生了交易狀态的改變,支付寶才會通過該方式發起伺服器通知(即時到賬交易狀态為“等待買家付款”的狀态預設是不會發送通知的);
- 伺服器間的互動,不像頁面跳轉同步通知可以在頁面上顯示出來,這種互動方式是不可見的;
- 第一次交易狀态改變(即時到賬中此時交易狀态是交易完成)時,不僅會傳回同步處理結果,而且伺服器異步通知頁面也會收到支付寶發來的處理結果通知;
- 程式執行完後必須列印輸出“success”(不包含引号)。如果商戶回報給支付寶的字元不是success這7個字元,支付寶伺服器會不斷重發通知,直到超過24小時22分鐘。一般情況下,25小時以内完成8次通知(通知的間隔頻率一般是:4m,10m,10m,1h,2h,6h,15h);
- 程式執行完成後,該頁面不能執行頁面跳轉。如果執行頁面跳轉,支付寶會收不到success字元,會被支付寶伺服器判定為該頁面程式運作出現異常,而重發處理結果通知;
- cookies、session等在此頁面會失效,即無法擷取這些資料;
- 該方式的調試與運作必須在伺服器上,即網際網路上能通路;
- 該方式的作用主要防止訂單丢失,即頁面跳轉同步通知沒有處理訂單更新,它則去處理;
- 當商戶收到伺服器異步通知并列印出success時,伺服器異步通知參數notify_id才會失效。也就是說在支付寶發送同一條異步通知時(包含商戶并未成功列印出success導緻支付寶重發數次通知),伺服器異步通知參數notify_id是不變的。
異步傳回結果的驗簽
某商戶設定的通知位址為https://api.xx.com/receive_notify.htm,對應接收到通知的示例如下:
|
第一步: 在通知傳回參數清單中,除去sign、sign_type兩個參數外,凡是通知傳回回來的參數皆是待驗簽的參數。
第二步: 将剩下參數進行url_decode, 然後進行字典排序,組成字元串,得到待簽名字元串:
|
第三步: 将簽名參數(sign)使用base64解碼為位元組碼串。
第四步: 使用RSA的驗簽方法,通過簽名字元串、簽名參數(經過base64解碼)及支付寶公鑰驗證簽名。
-
- 狀态TRADE_SUCCESS的通知觸發條件是商戶簽約的産品支援退款功能的前提下,買家付款成功;
- 交易狀态TRADE_FINISHED的通知觸發條件是商戶簽約的産品不支援退款功能的前提下,買家付款成功;或者,商戶簽約的産品支援退款功能的前提下,交易已經成功并且已經超過可退款期限。