支付寶即時到賬接口的集成和使用
如果商戶想在自己的網站上,集成支付寶的即時到賬接口,首先要申請該服務,申請地址:https://b.alipay.com/order/productDetail.htm?productId=2012051600355662
商戶系統請求-支付寶響應交互模式,即支付寶接口集成及使用的工作原理:
根據這個原理圖,我們可以把集成支付寶接口的步驟划分如下:
產品參考:http://www.jinhusns.com/Products/Download/?type=xcj
一. 請求
1. 構造請求數據
商戶根據支付寶提供的接口規則,通過程序生成得到簽名結果及要傳輸給支付寶的數據集合。
Ø 選定參數
Ø 排序生成待簽名字符串
對參數數組里的每一個值從a到z的順序排序,若遇到相同首字母,則看第二個字母,以此類推。排序完成之后,再把所有數組值以“&”字符連接起來,
如:
_input_charset=gbk&out_trade_no=6741334835157966&partner=2088101568338364
&payment_type=1&return_url=http://www.test.com/alipay/return_url.asp&sell
er_email=alipay-test01@alipay.com&service=create_direct_pay_by_user&subje
ct=貝爾金護腕式&total_fee=100
需要注意的是,在請求參數列表中,除去sign、sign_type兩個參數外,其他需要使用到的參皆是要簽名的參數。(個別接口中參數sign_type也需要參與簽名。)
(1)使用冒泡排序對參數數組進行排序:
(2)用“&”字符連接參數組合成待簽名的字符串:
Ø 加密生成簽名
有三種簽名方式:MD5簽名、DSA簽名和RSA簽名。
MD5簽名: 需要把私鑰直接拼接到待簽名字符串后面,形成新的字符串,利用MD5的簽名函數對這個新的字符串進行簽名運算,從而得到32位簽名結果字符串。
DSA、 RSA簽名:把待簽名字符串與客戶的私鑰一同放入DSA或RSA的簽名函數中進行簽名運算,從而得到簽名結果字符串。
下面是用MD5簽名的代碼:
2. 發送請求數據
向支付寶發送請求數據有post和get兩種方式,建議使用post 方式,相對比較安全。
二. 通知
支付寶對商戶的請求數據處理完成后,會通過兩種方式通知商戶處理結果,一種是頁面跳轉同步通知(return_url),另一種是服務器異步通知(notify_url) 。
服務器異步通知(notify_url)是支付寶服務器主動向商戶發送的通知,只有當訂單的交易狀態改變時才會觸發,可以防止因網絡等原因引起的丟單問題。對同步通知和異步通知結果的處理步驟大致相同,只是處理完成后的返回值不同。
1. 驗證簽名
在通知返回參數列表中,除去sign、sign_type兩個參數外,凡是通知返回回來的參數皆是要簽名的參數,具體的簽名步驟與請求時相同。
如果新得到的簽名與支付寶返回的簽名相同,則簽名驗證成功。
2. 判斷是否是支付寶服務器發來的處理結果
為了防止某些人偽造支付寶發來的處理消息,還要驗證消息的合法性,有以下三個方法:
3. 判斷訂單的交易狀態及數據處理
當訂單的交易狀態為“TRADE_FINISHED”或者“TRADE_SUCCESS” ,即為交易成功,接下來就可以根據自己網站的實際情況,進行自己的處理了。在處理數據前一定要先判斷訂單狀態,是否已經處理過,防止重復操作。
4. 返回數據
同步通知(return_url):對返回值沒有要求,可以做任意操作。
異步通知(notify_url):程序處理成功后,該頁面不能執行頁面跳轉,且頁面上不能有任何字符,要返回“success”7個字符。否則,支付寶會重發處理結果的通知。