Paypal Adaptive Payments 實作 PreApproval

0
841

這兩天測試購物車眾籌集資的主題用到 Paypal Adaptive Payments,使用 Paypal 來做金流,需要實作 preapproval。

首先看一下 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 寫死兩次重試)