海外支付:遍布全球的Paypal
吳劍 2015-11-26
原創文章,轉載必需注明出處:http://www.cnblogs.com/wu-jian
吳劍 http://www.cnblogs.com/wu-jian
前言
Paypal是全球在線支付的領導者,2002年被eBay收購,2015年又戲劇性的從eBay分離,以500億美元市值反超eBay。創始人 Elon Musk 同時是Paypal、空間探索技術公司、以及特斯拉汽車三家公司的CEO,電影“鋼鐵俠”的人物原型就是這哥們。
吳劍 http://www.cnblogs.com/wu-jian
概述
Paypal為商家提供了多種支付對接方式,其中Paypal Express Checkout最為常見、方便、以及自定義擴展性最強。下圖是Paypal Express Checkout支付的一個標准時序圖,注意這是一個純技術層面的API調用流程,在此基礎上,我們可以組合出三種Paypal通用的用戶支付體驗:
快捷支付,直接去Paypal付款並使用Paypal上存儲的地址發貨。很明顯,Paypal希望把自己打造成一個用戶中心,也花了血本來推廣這種方式,具我所知,該方式也是海外用戶使用占比最高的。
標准支付,就像我們國內的天貓淘寶一樣,填好了收件地址,完了再去支付。
游客支付,或稱之為信用卡支付。當然信用卡不是Paypal強項,Paypal跟支付寶一樣充當的是銀行與用戶之間的中間人角色。在信用卡領域,VISA是老大,同時信用卡涉及到相當高的安全層面風險,具體請參考我的另一篇文章 海外支付:抵御信用卡欺詐的CyberSource 。
這三種支付方式都是基於下圖中相同API,只是組合序順或傳遞的參數稍有差異而以。
<圖1.Paypal Express Checkout API接口>
吳劍 http://www.cnblogs.com/wu-jian
SetExpressCheckout
這是一個同步的API接口,將交易相關的所有數據首先通過SetExpressCheckout傳遞給Paypal,然后Paypal響應一個Token用於后續支付步驟,Token有效時間為3小時。
從接口前綴Set可以看出該接口是一個預交易步驟,好比我們去銀行提大額現金,需要提前一天給銀行通知,一來有助於銀行備齊現金,二來也有助於交易安全,銀行有充分時間評估交易的可靠性。后來在架構多平台的支付中心時,我也參考和使用了Paypal的這個結構。
SetExpressCheckout的參數很多,具體可參見Paypal官方文檔:https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/ ,下面列出一些常用參數:
參數名稱 | 參數說明 |
---|---|
VERSION | 接口版本號 |
METHOD | API名稱,使用“SetExpressCheckout”即可 |
REQCONFIRMSHIPPING | 商家是否需要買家在PayPal賬戶中的郵寄地址是已經被確認的地址 |
PAYMENTREQUEST_{m}_PAYMENTACTION | 希望獲取付款的方式 |
ALLOWNOTE | 允許買方在PayPal結賬頁面上輸入了一條文本信息給商家 |
LOCALECODE | PayPal付款頁面顯示語言的設置 |
RETURNURL | 客戶選擇通過PayPal付款后其瀏覽器將返回的URL |
CANCELURL | 客戶取消使用PayPal付款時返回的URL |
結賬時輸入的買家電子郵件。 PayPal使用該值預填PayPal登錄頁面的PayPal會員注冊部分 | |
PAYMENTREQUEST_{m}_CURRENCYCODE | PayPal支持的交易幣種中所列幣種之一的三字符幣種代碼 |
PAYMENTREQUEST_{m}_AMT | 交易總費用 |
PAYMENTREQUEST_{m}_ITEMAMT | 訂單所有物品的價格 |
PAYMENTREQUEST_{m}_SHIPPINGAMT | 郵費總額 |
NOSHIPPING | 是否不在PayPal付款頁面展示郵寄地址 |
LANDINGPAGE | 付款頁面展示類型 |
SOLUTIONTYPE | 結賬流程的類型 |
HDRIMG | 付款頁面左上角顯示的圖片的URL |
HDRBACKCOLOR | 付款頁面標題的背景色 |
PAYFLOWCOLOR | 付款頁面設置背景色 |
HDRBORDERCOLOR | 付款頁面標題邊框顏色 |
L_PAYMENTREQUEST_{m}_NUMBER{n} | 商品編號 |
L_PAYMENTREQUEST_{m}_NAME{n} | 商品名稱 |
L_PAYMENTREQUEST_{m}_QTY{n} | 商品數量 |
L_PAYMENTREQUEST_{m}_AMT{n} | 商品單價 |
PAYMENTREQUEST_{m}_INVNUM | 商家訂單編號 |
吳劍 http://www.cnblogs.com/wu-jian
GetExpressCheckoutDetails
如圖1所示,在通過SetExpressCheckout接口獲取到Token后,就需要跳轉頁面去Paypal了。用戶在Paypal站點登錄,確認支付信息,完成支付,最后Paypal將URL重定向回商家頁面。
此時,我們可以獲取用戶在Paypal的相關信息。接口的詳細參數可參見Paypal官方文檔:https://developer.paypal.com/docs/classic/api/merchant/GetExpressCheckoutDetails_API_Operation_NVP/ ,下面列出常用的響應參數:
參數名稱 | 參數說明 |
---|---|
TOKEN | Token |
PAYERID | Paypal用戶ID |
Paypal賬號(Email) | |
PAYMENTREQUEST_{n}_SHIPTONAME | 貨運地址姓名 |
PHONENUM | 貨運地址電話 |
PAYMENTREQUEST_{n}_SHIPTOCOUNTRYCODE | 貨運地址國家ID |
PAYMENTREQUEST_{n}_SHIPTOSTATE | 貨運地址省份 |
PAYMENTREQUEST_{n}_SHIPTOCITY | 貨運地址城市 |
PAYMENTREQUEST_{n}_SHIPTOZIP | 貨運地址郵編 |
PAYMENTREQUEST_{n}_SHIPTOSTREET | 貨運地址街道1 |
PAYMENTREQUEST_{n}_SHIPTOSTREET2 | 貨運地址街道2 |
在此需要提一下的是,Paypal的接口非常靈活,它最大限度讓商家可以使用相同的API來組合不同的支付邏輯以提高用戶體驗。比如在標准支付時,用戶在商家網站填寫並存儲了郵寄地址,因此郵寄地址不需要與Paypal交互;而在快捷支付時,則可以通過GetExpressCheckoutDetails接口獲取用戶存儲在Paypal上的地址信息並且在商家頁面上顯示給用戶確認。
吳劍 http://www.cnblogs.com/wu-jian
DoExpressCheckoutDetails
DoExpressCheckoutDetails是Paypal實時交易的最后一步,它告訴並向Paypal確認最終的支付信息,當完成對它的調用,就代表了Paypal實時支付的完成,也代表Money從用戶賬戶到了商家賬戶。詳細官方API文檔請參考:https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/DoExpressCheckoutPayment_API_Operation_NVP/ ,如下列出了接口響應結果:
參數名稱 | 參數說明 |
---|---|
PAYMENTINFO_{n}_PAYMENTSTATUS | 付款結果狀態 |
PAYMENTINFO_{n}_CURRENCYCODE | 成功幣種 |
PAYMENTINFO_{n}_AMT | 成功金額 |
PAYMENTINFO_{n}_TRANSACTIONID | Paypal交易ID |
在快捷支付時,因為用戶的郵寄地址存放在Paypal中,因此在GetExpressCheckoutDetails前,我們無法知道用戶是哪個國家,也就不能計算出運費金額。所以通常在快捷支付時,我們會在GetExpressCheckoutDetails中獲取用戶郵寄地址來計算運費,在DoExpressCheckoutDetails中更新運費並確認最終金額。
吳劍 http://www.cnblogs.com/wu-jian
異步IPN通知
IPN全稱為 Instant Payment Notification,在每筆交易完成后,Paypal可提供通知服務,即商家提供一個URL,Paypal向這個URL發送交易結果。這個過程是異步的,比如因為網絡繁忙或你的服務器故障,IPN會在連續4天內最大15次持續發送結果,直到你收到為止。Paypal不建議在實時的支付流程中使用IPN,但我們可以使用IPN作為交易安全輔助或交易提醒等用途。
IPN開發概要:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/
IPN詳細參數:https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNandPDTVariables/
在Paypal商戶后台中開啟IPN:用戶信息 -> 即時付款通知
IPN基於HTTP的POST規范,當成功接收到IPN結果后響應HTTP 200即可:
附錄:Paypal商戶后台API設置截圖
吳劍 http://www.cnblogs.com/wu-jian
結束語
本文對Paypal支付流程和API進行了概要性描述,並未涉及到具體代碼細節,有了清晰的思路再編碼是事半功倍的事,希望對從業的開發人員有所幫助。也希望中國的產品有朝一日不再是廉價和仿冒的代名詞,希望中國的海外賣家能把我們的創新展現給世界人民,希望更多的站點能夠崛起和打破阿里的壟斷。
最后友情提示,在海外大多數國家,對侵權的打擊還是相當嚴厲的。Paypal是一家美國公司,遵守的是美國司法體系,如果你的站點銷售侵權產品,通常Paypal會給你警告,據我所知他們也有專門的巡查部門。但如果一旦你被海外用戶取證和訴訟並且事實成立,你的資金就有可能被Paypal凍結。
吳劍 http://www.cnblogs.com/wu-jian
<全文完>
吳劍 http://www.cnblogs.com/wu-jian

作者: 吳劍
出處: http://www.cnblogs.com/wu-jian/
本文版權歸作者所有,歡迎轉載,但必需注明出處,並且在轉載頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
