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


在支付寶支付的開發過程中,通過自己的理解和嘗試做出一點流程總結記錄:

 

一.前往 https://doc.open.alipay.com/doc2/alipayDocIndex.htm 支付寶開放平台 點擊業務接入-》即時到賬 ,即可下載 即時到賬DEMO。DEMO中包含 兩種簽名版本(MD5、RSA) 三種編程語言(CSHARP、JAVA、PHP) 兩種編碼格式(GBK、UTF-8),我選擇是MD5簽名下的PHP語言UTF-8編碼。

  如果項目擁有SSL加密協議,也就是HTTPS安全通道,可以使用rsa簽名的方式進行開發。

 

二.先配置 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'](該參數三選一 賣家的支付寶用戶號/賬號/賬號別名) 這三個參數是由支付寶開發平台提供的。

$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";

 

四.實例化 AlipaySubmit 類 傳入參數數組  參數列表:

基本參數

service

接口名稱

String

接口名稱。

不可空

create_direct_pay_by_user

partner

合作者身份ID

String(16)

簽約的支付寶賬號對應的支付寶唯一用戶號。

以2088開頭的16位純數字組成。

不可空

2088101011913539

_input_charset

參數編碼字符集

String

商戶網站使用的編碼格式,如utf-8、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字段的通知給商戶。

        

      

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM