2012年1月22日

使用Paypal Adaptive Payments實作PreApproval

這兩天在做Crowdfunding網站mvp,使用Paypal來做金流,需要實作preapproval,關於crowdfunding中文整理介紹,這個整理的還不錯

首先看一下Paypal Adaptive Payments有什麼內容,

其中Chained Payments解決付款名義的問題,收款人拿到中介人而不是付款人的款項,手續費只算一次,而且可以選擇哪個角色付手續費。

來看看Preapproval,先向付款人取得支付意願,在約定的時間可以用約定的次數做約定上限的付款動作,所以分成三個部份
1. 使用一個paypal account和application id跟Paypal 拿一個Preapproval Key
2. 用這個 Preapproval Key 引導使用者到Paypal付款(或內嵌),並紀錄Preapproval Key
3. 在約定時間內做約定額度的付款

Preapproval主要使用的參數在這邊,引導使用者付款的說明在這邊

實作上遇到幾個問題

1. Paypal不流行,誰可以收款和付款?

要有Paypal Premier Account,可以收信用卡付款,但是preapproval流程,付款人必須要有Paypal Account


2. Application ID?

相當麻煩,要註冊成Paypal Developer然後提出申請,Sandbox測試的話使用測試ID:APP-80W284485P519543T


3. Sandbox測試使用的連結?

文件完全沒寫,超級難找,趕快抄下來
API request: https://svcs.sandbox.paypal.com/AdaptivePayments
Redirect url: https://sandbox.paypal.com/webscr

另外注意事項:
1. 第三步執行payments的時候要帶上pre-approval key。
2. 收款帳戶要去設定可以收的幣別,否則交易款項會處於unclaimed狀態。
3. pre-approval之後,使用者仍然可以cancel pre-approval,此時IPN handler要根據"status"參數來處理request,status可能的值是ACTIVE、DEACTIVED、CANCELED。approved參數會維持true。
4. Paypal回應時間較長,httplib2等要設定timeout時間,否則會發2次request而造成錯誤訊息: "The total amount of all payments exceeds the maximum total amount for all payments"。 (httplib2寫死兩次重試)