支付寶支付--即時到帳 開發總結

在支付寶支付的開發過程當中,經過本身的理解和嘗試作出一點流程總結記錄: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是以2088開頭的純16位數字。
  • seller_email是支付寶登陸帳號,格式通常是郵箱或手機號。
  • seller_account_name是賣家支付寶帳號別名。

三個參數至少必須傳遞一個。

當簽約帳號就是收款帳號時,請務必使用參數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是以2088開頭的純16位數字。
  • buyer_email是支付寶登陸帳號,格式通常是郵箱或手機號。
  • buyer_account_name是買家支付寶帳號別名。

三個參數的優先級別是: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

取值範圍:

  • creditPay(信用支付)
  • directPay(餘額支付)

若是不設置,默認識別爲餘額支付。

說明:

必須注意區分大小寫。

可空

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種:

  • 0:訂單碼-簡約前置模式,對應iframe寬度不能小於600px,高度不能小於300px;
  • 1:訂單碼-前置模式,對應iframe寬度不能小於300px,高度不能小於600px;
  • 3:訂單碼-迷你前置模式,對應iframe寬度不能小於75px,高度不能小於75px。
  • 4:訂單碼-可定義寬度的嵌入式二維碼,商戶可根據須要設定二維碼的大小。

跳轉模式下,用戶的掃碼界面是由支付寶生成的,不在商戶的域名下。

  • 2:訂單碼-跳轉模式

可空

1

qrcode_width

商戶自定二維碼寬度

Integer

商戶自定義的二維碼寬度。

當qr_pay_mode=4時,該參數生效。

可空 200

need_buyer_realnamed

是否須要買家實名認證

String(2)

是否須要買家實名認證。

  • T表示須要買家實名認證;
  • 不傳或者傳其它值表示不須要買家實名認證。
可空  T

promo_param

商戶優惠活動參數

String(128)

商戶與支付寶約定的營銷透傳參數。

可空 {"customer201412":"Y","goods201412":"Y"}

hb_fq_param

花唄分期參數

String

參數格式:hb_fq_seller_percent ^賣家承擔付費比例|hb_fq_num ^期數。

  • hb_fq_num:花唄分期數,好比分3期支付;
  • hb_fq_seller_percent:賣家承擔收費比例,好比50表明賣家承擔50%。

兩個參數必須一塊兒傳入。

兩個參數用「|」間隔。Key和value之間用「^」間隔。

具體花唄分期期數和賣家承擔收費比例可傳入的數值請諮詢支付寶。

可空 hb_fq_seller_percent^50|hb_fq_num^3

goods_type

商品類型

String(2)

商品類型:

  • 1表示實物類商品
  • 0表示虛擬類商品

若是不傳,默認爲實物類商品。

可空 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(不觸發通知)

 

  由於訂單有可能已經經過同步進行處理了,因此須要先進行判斷訂單是否已經處理,若是處理就再也不處理,若是未處理就處理業務。

  注意:

  •  程序執行完後必須打印輸出「success」(不包含引號)。若是商戶反饋給支付寶的字符不是success這7個字符,支付寶服務器會不斷重發通知,直到超過24小時22分鐘。通常狀況下,25小時之內完成8次通知(通知的間隔頻率通常是:4m,10m,10m,1h,2h,6h,15h);
  • 當商戶收到服務器異步通知並打印出success時,服務器異步通知參數notify_id纔會失效。
  • 驗證是不是支付寶發來的通知 : 

     請求的完整連接 https://mapi.alipay.com/gateway.do?service=notify_verify&partner=2088002396712354&notify_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字段的通知給商戶。

相關文章
相關標籤/搜索