海外支付:遍布全球的Paypal


海外支付:遍布全球的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,電影“鋼鐵俠”的人物原型就是這哥們。

海外支付:遍布全球的Paypal

海外支付:抵御信用卡欺詐的CyberSource

吳劍 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
EMAIL 結賬時輸入的買家電子郵件。 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
EMAIL 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/
本文版權歸作者所有,歡迎轉載,但必需注明出處,並且在轉載頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
支付寶打賞


免責聲明!

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



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