2016-02-13 40 views
1

當我使用paypal express完成付款並且數據庫更新失敗後,我可以在這種情況下做些什麼?如何使用Omnipay退款

這裏是代碼:

$transaction = $this->initPayPalExpress()->completePurchase($this->param); 
    $response = $transaction->send(); 
    $data = $response->getData(); 
    if (isset($data['PAYMENTINFO_0_ACK']) && $data['PAYMENTINFO_0_ACK'] === 'Success') { 
     $this->updateDatabase($data); 
    } 
+0

如果可能,請打印您的更新函數和響應數據 – CodeIsLife

+0

對於更新函數,我只是將數據存儲到MySQL數據庫中。爲了解決問題,我得到了顯示交易完成的所有細節。問題是數據庫中的數據不會更新,例如,當用戶關閉瀏覽器時,該函數應該運行:'$ this-> updateDatabase($ data);' –

+0

即使用戶關閉瀏覽器,它的服務器端處理也會關閉瀏覽器防止交易執行 – CodeIsLife

回答

0

我建議你從貝寶切換表達對貝寶REST。這是更新的,並有更好的文檔。

如果數據庫更新失敗,那麼我建議您需要有某種備份計劃 - 您可以使用RestListPurchaseRequest()消息檢查您的購買歷史記錄。

你問退款,但不給退款的例子 - 你問題的確切性質是什麼?

在omnipay-paypal REST消息和網關的docblocks中有一些很好的例子來實現你想做的事情。

0

如果您使用付款網關,則不要依賴會話數據來存儲您將用於將付款鏈接回用戶的信息。相反,由於用戶正在爲某件事付款,因此必須有一個訂單/訂閱表,或者甚至只有用戶的ID本身。所以,你可以傳遞標識信息給貝寶的自定義字段你被允許通過,然後在重定向/回調,你可以這樣做(不Omnipay代碼,但它說明了這一點):

$response = GetExpressCheckoutDetails($_REQUEST['token']); 
$orderID = $response["PAYMENTREQUEST_0_CUSTOM"]; 

這樣,無論用戶是否擁有活動會話,您都可以完成事務;如果你的數據庫失敗了,你不必退還客戶,因爲問題不在他們的最終,而是你的。您最好避免數據庫故障,並讓腳本記錄日誌或通過電子郵件發送通知,告訴您如何成功付款但數據庫失敗 - 並手動完成購買。