在支付寶支付的開發過程當中,經過本身的理解和嘗試作出一點流程總結記錄:php
一.前往 https://doc.open.alipay.com/doc2/alipayDocIndex.htm 支付寶開放平臺 點擊業務接入-》即時到帳 ,便可下載 即時到帳DEMO。DEMO中包含 兩種簽名版本(MD五、RSA) 三種編程語言(CSHARP、JAVA、PHP) 兩種編碼格式(GBK、UTF-8),我選擇是MD5簽名下的PHP語言UTF-8編碼。html
若是項目擁有SSL加密協議,也就是HTTPS安全通道,可使用rsa簽名的方式進行開發。java
二.先配置 alipay.config.php 文件:編程
1 //↓↓↓↓↓↓↓↓↓↓請在這裏配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 2 //合做身份者ID,簽約帳號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 3 $alipay_config['partner'] = ''; 4 //收款支付寶帳號,以2088開頭由16位純數字組成的字符串,通常狀況下收款帳號就是簽約帳號 5 $alipay_config['seller_id'] = $alipay_config['partner']; 6 //或者$alipay_config['seller_email']或者$alipay_config['seller_account_name'] 7 // MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 8 $alipay_config['key'] = ''; 9 // 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問 10 $alipay_config['notify_url'] = "http://商戶網址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php"; 11 // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問 12 $alipay_config['return_url'] = "http://商戶網址/create_direct_pay_by_user-PHP-UTF-8/return_url.php"; 13 //簽名方式 14 $alipay_config['sign_type'] = strtoupper('MD5'); 15 //字符編碼格式 目前支持 gbk 或 utf-8 16 $alipay_config['input_charset']= strtolower('utf-8'); 17 //ca證書路徑地址,用於curl中ssl校驗 18 //請保證cacert.pem文件在當前文件夾目錄中 19 $alipay_config['cacert'] = getcwd().'\\cacert.pem'; 20 //訪問模式,根據本身的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http 21 $alipay_config['transport'] = 'http'; 22 // 支付類型 ,無需修改 23 $alipay_config['payment_type'] = "1"; 24 // 產品類型,無需修改 25 $alipay_config['service'] = "create_direct_pay_by_user"; 26 //↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 27 //↓↓↓↓↓↓↓↓↓↓ 請在這裏配置防釣魚信息,若是沒開通防釣魚功能,爲空便可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 28 // 防釣魚時間戳 若要使用請調用類文件submit中的query_timestamp函數 29 $alipay_config['anti_phishing_key'] = ""; 30 31 // 客戶端的IP地址 非局域網的外網IP地址,如:221.0.0.1 32 $alipay_config['exter_invoke_ip'] = ""; 33 //↑↑↑↑↑↑↑↑↑↑請在這裏配置防釣魚信息,若是沒開通防釣魚功能,爲空便可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
官方demo註解已經寫得很詳細了,值得至於的問題 $alipay_config['partner'] $alipay_config['key'] $alipay_config['seller_id/seller_email/seller_account_name'](該參數三選一 賣家的支付寶用戶號/帳號/帳號別名) 這三個參數是由支付寶開發平臺提供的。api
而 $alipay_config['notify_url'] $alipay_config['return_url'] 參數 由開發者設置,設置時必須保證外網能夠訪問到的地址且不能夠帶?id=123自定義參數 數組
'notify_url' 異步通知地址 : 這個地址是用戶支付完成後,支付寶異步回調的地址,開發者必須在該地址下的PHP文件進行支付成功後業務邏輯處理。安全
'return_url' 同步通知地址: 這個地址是用戶支付完成後,支付寶同步跳轉的地址,開發者在該地址下的PHP文件處理支付寶支付成功的頁面顯示。服務器
三.配置完成後 在須要須要支付的php文件中載入 require_once "/lib/alipay_submit.class.php"; 和 在支付的類裏 載入 require_once PAYPATH."/alipay.config.php"; curl
四.實例化 AlipaySubmit 類 傳入參數數組 參數列表:
異步
基本參數 |
|||||
service |
接口名稱 |
String |
接口名稱。 |
不可空 |
create_direct_pay_by_user |
partner |
合做者身份ID |
String(16) |
簽約的支付寶帳號對應的支付寶惟一用戶號。 以2088開頭的16位純數字組成。 |
不可空 |
2088101011913539 |
_input_charset |
參數編碼字符集 |
String |
商戶網站使用的編碼格式,如utf-八、gbk、gb2312等。 |
不可空 |
gbk |
sign_type |
簽名方式 |
String |
DSA、RSA、MD5三個值可選,必須大寫。 |
不可空 |
MD5 |
sign |
簽名 |
String |
請參見簽名。 |
不可空 |
7d314d22efba4f336fb187697793b9d2 |
notify_url |
服務器異步通知頁面路徑 |
String(190) |
支付寶服務器主動通知商戶網站裏指定的頁面http路徑。 |
可空 |
http://api.test.alipay.net/atinterface/receive_return.htm |
return_url |
頁面跳轉同步通知頁面路徑 |
String(200) |
支付寶處理完請求後,當前頁面自動跳轉到商戶網站裏指定頁面的http路徑。 |
可空 |
http://api.test.alipay.net/atinterface/receive_return.htm |
業務參數 |
|||||
out_trade_no |
商戶網站惟一訂單號 |
String(64) |
支付寶合做商戶網站惟一訂單號。 |
不可空 |
6843192280647118 |
subject |
商品名稱 |
String(256) |
商品的標題/交易標題/訂單標題/訂單關鍵字等。 該參數最長爲128個漢字。 |
不可空 |
貝爾金護腕式 |
payment_type |
支付類型 |
String(4) |
只支持取值爲1(商品購買)。 |
不可空 |
1 |
total_fee |
交易金額 |
Number |
該筆訂單的資金總額,單位爲RMB-Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。 |
不可空 |
100 |
seller_id |
賣家支付寶用戶號 |
String(16) |
三個參數至少必須傳遞一個。 當簽約帳號就是收款帳號時,請務必使用參數seller_id,即seller_id的值與partner的值相同。 三個參數的優先級別是:seller_id>seller_account_name>seller_email。 |
不可空 |
2088002007018966 |
seller_email |
賣家支付寶帳號 |
String(100) |
alipay-test01@alipay.com |
||
seller_account_name |
賣家支付寶帳號別名 |
String(100) |
tstable02@alipay.com |
||
buyer_id |
買家支付寶用戶號 |
String(16) |
三個參數的優先級別是:buyer_id>buyer_account_name>buyer_email。 |
可空 |
2088002007018955 |
buyer_email |
買家支付寶帳號 |
String(100) |
tstable01@alipay.com |
||
buyer_account_name |
買家支付寶帳號別名 |
String(100) |
tstable03@alipay.com |
||
price |
商品單價 |
Number |
單位爲:RMB Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。此參數爲單價 規則:price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。 |
可空 |
10.00 |
quantity |
購買數量 |
Number |
price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。 |
可空 |
1 |
body |
商品描述 |
String(1000) |
對一筆交易的具體描述信息。若是是多種商品,請將商品描述字符串累加傳給body。 |
可空 |
美國專業護腕鼠標墊,舒緩式凝膠軟墊模擬手腕的天然曲線和運動,創造和緩的GelFlex溫馨地帶! |
show_url |
商品展現網址 |
String(400) |
收銀臺頁面上,商品展現的超連接。 |
可空 |
http://www.360buy.com/product/113714.html |
paymethod |
默認支付方式 |
String |
取值範圍:
若是不設置,默認識別爲餘額支付。 說明: 必須注意區分大小寫。 |
可空 |
directPay |
enable_paymethod |
支付渠道 |
String |
用於控制收銀臺支付渠道顯示,該值的取值範圍請參見支付渠道。 可支持多種支付渠道顯示,以「^」分隔。 |
可空 |
directPay^bankPay^cartoon^cash |
anti_phishing_key |
防釣魚時間戳 |
String |
經過時間戳查詢接口獲取的加密支付寶系統時間戳。 若是已申請開通防釣魚時間戳驗證,則此字段必填。 |
可空 |
587FE3D2858E6B01E30104656E7805E2 |
exter_invoke_ip |
客戶端IP |
String(15) |
用戶在建立交易時,該用戶當前所使用機器的IP。 若是商戶申請後臺開通防釣魚IP地址檢查選項,此字段必填,校驗用。 |
可空 |
128.214.222.111 |
extra_common_param |
公用回傳參數 |
String(100) |
若是用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 |
可空 |
你好,這是測試商戶的廣告。 |
it_b_pay |
超時時間 |
String |
設置未付款交易的超時時間,一旦超時,該筆交易就會自動被關閉。 取值範圍:1m~15d。 m-分鐘,h-小時,d-天,1c-當天(1c-當天的狀況下,不管交易什麼時候建立,都在0點關閉)。 該參數數值不接受小數點,如1.5h,可轉換爲90m。 |
可空 |
1h |
token |
快捷登陸受權令牌 |
String(40) |
若是開通了快捷登陸產品,則須要填寫;若是沒有開通,則爲空。 |
可空 |
201103290c9f9f2c03db4267a4c8e1bfe3adfd52 |
qr_pay_mode |
掃碼支付方式 |
String(1) |
掃碼支付的方式,支持前置模式和跳轉模式。 前置模式是將二維碼前置到商戶的訂單確認頁的模式。須要商戶在本身的頁面中以iframe方式請求支付寶頁面。具體分爲如下3種:
跳轉模式下,用戶的掃碼界面是由支付寶生成的,不在商戶的域名下。
|
可空 |
1 |
qrcode_width |
商戶自定二維碼寬度 |
Integer |
商戶自定義的二維碼寬度。 當qr_pay_mode=4時,該參數生效。 |
可空 | 200 |
need_buyer_realnamed |
是否須要買家實名認證 |
String(2) |
是否須要買家實名認證。
|
可空 | T |
promo_param |
商戶優惠活動參數 |
String(128) |
商戶與支付寶約定的營銷透傳參數。 |
可空 | {"customer201412":"Y","goods201412":"Y"} |
hb_fq_param |
花唄分期參數 |
String |
參數格式:hb_fq_seller_percent ^賣家承擔付費比例|hb_fq_num ^期數。
兩個參數必須一塊兒傳入。 兩個參數用「|」間隔。Key和value之間用「^」間隔。 具體花唄分期期數和賣家承擔收費比例可傳入的數值請諮詢支付寶。 |
可空 | hb_fq_seller_percent^50|hb_fq_num^3 |
goods_type |
商品類型 |
String(2) |
商品類型:
若是不傳,默認爲實物類商品。 |
可空 | 1 |
從官網給出的參數列表能夠知道必須的參數有10個,
其中 service、partner、_input_charset、seller_id、payment_type、sign_type、sign 均可以經過 alipay.config.php 配置文件獲取, 此外還必須傳入out_trade_no、subject、total_fee。
五. 調用 AlipaySubmit 類中的 buildRequestForm 方法 傳入數組參數、提交方式(post) 和 提交按鈕。
1 $parameter = array( 2 "service" => trim($alipay_config['service']), 3 "partner" => trim($alipay_config['partner']), 4 "seller_email" => trim($alipay_config['seller_email']), 5 "payment_type" => trim($alipay_config['payment_type']), 6 "notify_url" => $notify_url,//異步回調 7 "return_url" => $return_url,//同步回調 8 "out_trade_no" => $ordernum,//訂單號 9 "subject" => $subject, 10 "total_fee" => $total_fee, 11 "body" => $body, 12 "show_url" => $show_url, 13 "anti_phishing_key" => $anti_phishing_key, 14 "exter_invoke_ip" => $exter_invoke_ip, 15 "extra_common_param" => $extra_common_param, 16 "_input_charset" => trim(strtolower($alipay_config['input_charset'])) 17 ); 18 //創建請求 19 $alipaySubmit = new AlipaySubmit($alipay_config); 20 $html_text = $alipaySubmit->buildRequestForm($parameter,"post", ""); 21 echo $html_text;
六. 支付寶提交參數進行支付時獲取簽名的流程(sign_type、sign不參加簽名)並以表單方式發送請求:
1.先調用buildRequestPara($para_temp)方法 將傳入的參數進行處理(排序簽名);
2.paraFilter($para_temp)方法是對數組中的空值和簽名參數(sign_type、sign)進行排除;
3.argSort($para_filter)方法是對數組進行排序;
4.$this->buildRequestMysign($para_sort)方法是將數組進行簽名(把數組全部元素,按照「參數=參數值」的模式用「&」字符拼接成字符串);
5.在buildRequestMysign方法中數組參數和配置文件(alipay.config.php)中key參數進行MD5加密返回簽名字符串;
6.最後將簽名字符串和簽名類型也加入請求數組參數中;
7.將請求參數進行循環組裝成表單彈出新頁面自動提交表單。
1 $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$this->alipay_gateway_new."_input_charset=".trim(strtolower($this->alipay_config['input_charset']))."' method='".$method."'>"; 2 while (list ($key, $val) = each ($para)) { 3 $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>"; 4 } 5 6 //submit按鈕控件請不要含有name屬性 7 $sHtml = $sHtml."<input type='submit' value='".$button_name."'></form>"; 8 9 $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>"; 10 11 return $sHtml;
七.支付成功後的回調 (回調頁面已經傳給支付寶服務器,支付寶服務器會在支付完成後對支付回調頁面進行請求並傳回支付參數)
1.頁面同步回傳的參數(通知地址:'return_url')
參數 | 參數名稱 | 類型(字節長度) | 參數說明 | 是否可爲空 | 樣例 |
---|---|---|---|---|---|
is_success | 成功標識 | String(1) | 表示接口調用是否成功,並不代表業務處理結果。 | 不可空 | T |
sign_type | 簽名方式 | String | DSA、RSA、MD5三個值可選,必須大寫。 | 不可空 | MD5 |
sign | 簽名 | String(32) | 請參見簽名驗證 | 不可空 | b1af584504b8e845ebe40b8e0e733729 |
out_trade_no | 商戶網站惟一訂單號 | String(64) | 對應商戶網站的訂單系統中的惟一訂單號,非支付寶交易號。需保證在商戶網站中的惟一性。是請求時對應的參數,原樣返回。 | 可空 | 6402757654153618 |
subject | 商品名稱 | String(256) | 商品的標題/交易標題/訂單標題/訂單關鍵字等。 | 可空 | 手套 |
payment_type | 支付類型 | String(4) | 只支持取值爲1(商品購買)。 | 可空 | 1 |
exterface | 接口名稱 | String | 標誌調用哪一個接口返回的連接。 | 可空 | create_direct_pay_by_user |
trade_no | 支付寶交易號 | String(64) | 該交易在支付寶系統中的交易流水號。最長64位。 | 可空 | 2014040311001004370000361525 |
trade_status | 交易狀態 | String | 交易目前所處的狀態。成功狀態的值只有兩個: TRADE_FINISHED(普通即時到帳的交易成功狀態); TRADE_SUCCESS(開通了高級即時到帳或機票分銷產品後的交易成功狀態) |
可空 | TRADE_FINISHED |
notify_id | 通知校驗ID | String | 支付寶通知校驗ID,商戶能夠用這個流水號詢問支付寶該條通知的合法性。 | 可空 | RqPnCoPT3K9%2Fvwbh3I%2BODmZS9o4qChHwPWbaS7UMBJpUnBJlzg42y9A8gQlzU6m3fOhG |
notify_time | 通知時間 | Date | 通知時間(支付寶時間)。格式爲yyyy-MM-dd HH:mm:ss。 | 可空 | 2008-10-23 13:17:39 |
notify_type | 通知類型 | String | 返回通知類型。 | 可空 | trade_status_sync |
seller_email | 賣家支付寶帳號 | String(100) | 賣家支付寶帳號,能夠是Email或手機號碼。 | 可空 | chao.chenc1@alipay.com |
buyer_email | 買家支付寶帳號 | String(100) | 買家支付寶帳號,能夠是Email或手機號碼。 | 可空 | tstable01@alipay.com |
seller_id | 賣家支付寶帳戶號 | String(30) | 賣家支付寶帳號對應的支付寶惟一用戶號。以2088開頭的純16位數字。 | 可空 | 2088002007018916 |
buyer_id | 買家支付寶帳戶號 | String(30) | 買家支付寶帳號對應的支付寶惟一用戶號。以2088開頭的純16位數字。 | 可空 | 2088101000082594 |
total_fee | 交易金額 | Number | 該筆訂單的資金總額,單位爲RMB-Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。 | 可空 | 10.00 |
body | 商品描述 | String(1000) | 對一筆交易的具體描述信息。若是是多種商品,請將商品描述字符串累加傳給body。 | 可空 | Hello |
extra_common_param | 公用回傳參數 | String | 用於商戶回傳參數,該值不能包含「=」、「&」等特殊字符。若是用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 | 可空 | 你好,這是測試商戶的廣告。 |
根據 trade_status 的狀態能夠知道訂單的支付狀態能夠進行對支付成功後的業務邏輯處理。注意 經過GET獲取參數。
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { //無論普通或者高級 都執行此處 //判斷該筆訂單是否在商戶網站中已經作過處理 //若是沒有作過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序 //若是有作過處理,不執行商戶的業務程序 }
由於訂單有可能已經經過異步進行處理了,因此須要先進行判斷訂單是否已經處理,若是處理就再也不處理直接展現成功頁面,若是未處理就處理業務後展現成功頁面。
2.頁面異步回傳的參數(通知地址:'notify_url')
參數 | 參數名稱 | 類型(字節長度) | 參數說明 | 是否可爲空 | 樣例 |
---|---|---|---|---|---|
notify_time | 通知時間 | Date | 通知的發送時間。格式爲yyyy-MM-dd HH:mm:ss。 | 不可空 | 2009-08-12 11:08:32 |
notify_type | 通知類型 | String | 通知的類型。 | 不可空 | trade_status_sync |
notify_id | 通知校驗ID | String | 通知校驗ID。 | 不可空 | 70fec0c2730b27528665af4517c27b95 |
sign_type | 簽名方式 | String | DSA、RSA、MD5三個值可選,必須大寫。 | 不可空 | DSA |
sign | 簽名 | String | 請參見簽名驗證。 | 不可空 | _p_w_l_h_j0b_gd_aejia7n_ko4_m%2Fu_w_jd3_nx_s_k_mxus9_hoxg_y_r_lunli_pmma29_t_q%3D |
out_trade_no | 商戶網站惟一訂單號 | String(64) | 對應商戶網站的訂單系統中的惟一訂單號,非支付寶交易號。需保證在商戶網站中的惟一性。是請求時對應的參數,原樣返回。 | 可空 | 3618810634349901 |
subject | 商品名稱 | String(256) | 商品的標題/交易標題/訂單標題/訂單關鍵字等。它在支付寶的交易明細中排在第一列,對於財務對帳尤其重要。是請求時對應的參數,原樣通知回來。 | 可空 | phone手機 |
payment_type | 支付類型 | String(4) | 只支持取值爲1(商品購買)。 | 可空 | 1 |
trade_no | 支付寶交易號 | String(64) | 該交易在支付寶系統中的交易流水號。最長64位。 | 可空 | 2014040311001004370000361525 |
trade_status | 交易狀態 | String | 取值範圍請參見交易狀態。 | 可空 | TRADE_FINISHED |
gmt_create | 交易建立時間 | Date | 該筆交易建立的時間。格式爲yyyy-MM-dd HH:mm:ss。 | 可空 | 2008-10-22 20:49:31 |
gmt_payment | 交易付款時間 | Date | 該筆交易的買家付款時間。格式爲yyyy-MM-dd HH:mm:ss。 | 可空 | 2008-10-22 20:49:50 |
gmt_close | 交易關閉時間 | Date | 交易關閉時間。格式爲yyyy-MM-dd HH:mm:ss。 | 可空 | 2008-10-22 20:49:46 |
refund_status | 退款狀態 | String | 取值範圍請參見退款狀態。 | 可空 | REFUND_SUCCESS |
gmt_refund | 退款時間 | Date | 賣家退款的時間,退款通知時會發送。格式爲yyyy-MM-dd HH:mm:ss。 | 可空 | 2008-10-29 19:38:25 |
seller_email | 賣家支付寶帳號 | String(100) | 賣家支付寶帳號,能夠是email和手機號碼。 | 可空 | chao.chenc1@alipay.com |
buyer_email | 買家支付寶帳號 | String(100) | 買家支付寶帳號,能夠是Email或手機號碼。 | 可空 | 13758698870 |
seller_id | 賣家支付寶帳戶號 | String(30) | 賣家支付寶帳號對應的支付寶惟一用戶號。以2088開頭的純16位數字。 | 可空 | 2088002007018916 |
buyer_id | 買家支付寶帳戶號 | String(30) | 買家支付寶帳號對應的支付寶惟一用戶號。以2088開頭的純16位數字。 | 可空 | 2088002007013600 |
price | 商品單價 | Number | 若是請求時使用的是total_fee,那麼price等於total_fee;若是請求時使用的是price,那麼對應請求時的price參數,原樣通知回來。 | 可空 | 10.00 |
total_fee | 交易金額 | Number | 該筆訂單的總金額。請求時對應的參數,原樣通知回來。 | 可空 | 10.00 |
quantity | 購買數量 | Number | 若是請求時使用的是total_fee,那麼quantity等於1;若是請求時使用的是quantity,那麼對應請求時的quantity參數,原樣通知回來。 | 可空 | 1 |
body | 商品描述 | String(1000) | 該筆訂單的備註、描述、明細等。對應請求時的body參數,原樣通知回來。 | 可空 | Hello |
discount | 折扣 | Number | 支付寶系統會把discount的值加到交易金額上,若是須要折扣,本參數爲負數。 | 可空 | -5 |
is_total_fee_adjust | 是否調整總價 | String(1) | 該交易是否調整過價格。 | 可空 | N |
use_coupon | 是否使用紅包買家 | String(1) | 是否在交易過程當中使用了紅包。 | 可空 | N |
extra_common_param | 公用回傳參數 | String | 用於商戶回傳參數,該值不能包含「=」、「&」等特殊字符。若是用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 | 可空 | 你好,這是測試商戶的廣告。 |
business_scene | 是否掃碼支付 | String | 回傳給商戶此標識爲qrpay時,表示對應交易爲掃碼支付。目前只有qrpay一種回傳值。非掃碼支付方式下,目前不會返回該參數。 | 可空 | qrpay |
根據 trade_status 的狀態能夠知道訂單的支付狀態能夠進行對支付成功後的業務邏輯處理。注意 經過POST獲取參數。
trade_status 的狀態
觸發條件名 | 觸發條件描述 | 觸發條件默認值 |
---|---|---|
TRADE_FINISHED | 交易完成 | true(觸發通知) |
TRADE_SUCCESS | 支付成功 | true(觸發通知) |
WAIT_BUYER_PAY | 交易建立 | false(不觸發通知) |
TRADE_CLOSED | 交易關閉 | false(不觸發通知) |
由於訂單有可能已經經過同步進行處理了,因此須要先進行判斷訂單是否已經處理,若是處理就再也不處理,若是未處理就處理業務。
注意:
請求的完整連接 https:
//mapi.alipay.com/gateway.do?service=notify_verify&partner=2088002396712354¬ify_id=RqPnCoPT3K9%252Fvwbh3I%252BFioE227%252BPfNMl8jwyZqMIiXQWxhOCmQ5MQO%252FWd93rvCB%252BaiGg
返回數據(純文本)成功時:true,不成功時:報對應錯誤。
商戶須要驗證該通知數據中的out_trade_no是否爲商戶系統中建立的訂單號,並判斷total_fee是否確實爲該訂單的 實際金額(即商戶訂單建立時的金額),同時須要校驗通知中的seller_id(或者seller_email) 是否爲out_trade_no這筆 單據的對應的操做方(有的時候,一個商戶可能有多個seller_id/seller_email),上述有任何一個 驗證不經過,則代表本次通知是異常通知,務必忽略。在上述驗證經過後商戶必須根據支付寶不一樣類型的業務通知,正確的進行不一樣的業務處 理,而且過濾重複的通 知結果數據。在支付寶的業務通知中,只有交易通知狀態爲TRADE_SUCCESS或TRADE_FINISHED時,支付寶纔會認定爲買家付款成功。 若是商戶須要對同步返回的數據作驗籤,必須經過服務端的簽名驗籤代碼邏輯 來實現。若是商戶未正確處理業務通知,存在潛在的風險,商戶自行承擔所以而產生的全部損失。
交易狀態TRADE_SUCCESS的通知觸發條件是商戶簽約的產品支持退款功能的前提下,買家付款成功;
交易狀態TRADE_FINISHED的通知觸發條件是商戶簽約的產品不支持退款功能的前提下,買家付款成功;或者,商戶簽約的產品支持退款功能的前提下,交易已經成功而且已經超過可退款期限;
交易成功以後,商戶(高級即時到帳或機票平臺商)可調用批量退款接口,系統會發送退款通知給商戶,具體內容請參見批量退款接口文檔;
當商戶使用站內退款時,系統會發送包含refund_status和gmt_refund字段的通知給商戶。