2013-11-15 21 views
3

現狀執行任務後,貝寶鏈式支付成功

我是很新的PayPal和我目前在我們的網站整合鏈接的自適應付款。已通過.NET SDK成功調用了PAY API調用。資金(沙盒環境)將被正確轉移到該付款的每個參與者(發件人,主要和次要接收者)。

要求

我的目標是執行重要任務後付款成功(更新數據庫,發送郵件,...)或者已經取消(收拾東西。 ..)。

可能的解決方案

1) 第一種方法是創建actionType集中支付CREATE,將用戶重定向到paypal.com(等待批准),重定向用戶返回到網站和execute the payment,然後執行重要任務。但它似乎不起作用,付款將被支付,並在第二次重定向前爲COMPLETED

2) 另一種可能的解決辦法是從用戶那裏得到的preapproval,重定向回網站,並執行付款。還沒有嘗試過這個解決方案,不要認爲這是最佳實踐。

3) 呼叫PAYactionType設置爲"PAY",等待IPN。還沒有嘗試過,因爲它很難在本地測試(儘管我已經發現這個問題:Paypal Sandbox Test Tool IPN Simulator in Localhost)。

問題(S)

哪種解決方案是最好的做法?我想推薦的解決方案是等待IPN?

如果我使用IPN付款完成後的平均響應時間有多長?秒,分鐘,小時?我知道這取決於PayPal網絡服務器的負載,並且在4天內有15次重試,但真實世界的數字是多少?

我可以在付款(除了備註字段之外)中存儲關於發件人的附加信息(例如UserId),然後我可以在IPN中找到該信息?

回答

0

下面是我如何做到這一點。

當我要發起PayPal付款時(在我發送獲取TOKEN的請求之前),我在我的數據庫中創建新的交易並將其狀態設置爲PENDING。在transaction表中我也有userID列,這是用戶表的外鍵。這樣我就可以將交易與用戶連接起來

當我的表中創建交易時,我使用transactionId值,並將其保存到PHP $_SESSION變量。

請注意,如果您想支持定期付款,您可以將transactionId提供給PayPal。這可以通過設置:

"PAYMENTREQUEST_0_INVNUM"=>$transaction->id

當PayPal在發生定期付款後向您發送IPN請求時,將會發送此值。

現在回去故事

用戶被重定向到PayPal,並且當用戶填寫的PayPal用戶名和密碼,當用戶確認付款細節,用戶會被重定向到您的網站,你必須調用DoExpressCheckoutPayment自己付款。

如果DoExpressCheckoutPayment API調用的結果是成功的,那意味着交易成功並且您有錢。此時,您可以發送電子郵件,通知或任何其他重要操作。

$transactionResponse=$paypal->request("DoExpressCheckoutPayment",$requestParams);//Execute transaction 
    if(is_array($transactionResponse) && $transactionResponse["ACK"]=="Success")//Payment was successfull 
    { 
     //Send email 
     //Notify user 
     //Do other important changes in database, for example mark this transaction as successful 
     Transactions()::model()->updateByPk($_SESSION['transactionId'],array('status'=>'SUCCESS'); 
    } 

重要提示FOR循環付款:PayPal可以/會送你幾個IPN請求相同的經常性交易,這意味着你必須增加,這將chekc天氣具體IPN的請求已被處理或沒有邏輯。通常我會以一種方式檢查我的交易的天氣狀況,transactionId是'PENDING'或'SUCCESSFUL'。