海外支付:遍及全球的Paypalhtml
吳劍 2015-11-26web
原創文章,轉載必需註明出處:http://www.cnblogs.com/wu-jianapi
吳劍 http://www.cnblogs.com/wu-jian瀏覽器
前言安全
Paypal是全球在線支付的領導者,2002年被eBay收購,2015年又戲劇性的從eBay分離,以500億美圓市值反超eBay。創始人 Elon Musk 同時是Paypal、空間探索技術公司、以及特斯拉汽車三家公司的CEO,電影「鋼鐵俠」的人物原型就是這哥們。服務器
吳劍 http://www.cnblogs.com/wu-jian架構
概述app
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