如何使用Omnipay退款

时间:2016-02-13 19:24:38

标签: php paypal omnipay

用paypal express完成付款并且我的数据库更新失败后,在这种情况下我能做什么?

这是代码:

    $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);
    }

2 个答案:

答案 0 :(得分:0)

我建议您从PayPal express切换到PayPal REST。这是更新的,有更好的文档。

就数据库更新失败时该怎么办,我建议您需要某种备份计划 - 您可以使用RestListPurchaseRequest()消息来检查您的购买历史记录。

您询问有关退款的问题,但不提供退款示例 - 您的问题的确切性质是什么?

在omnipay-paypal REST消息和网关的docblock中有一些很好的例子来实现我想要做的事情。

答案 1 :(得分:0)

如果您正在使用支付网关,请不要依赖会话数据来存储您将用于将付款链接回用户的信息。相反,由于用户正在为某些东西付费,因此必须有订单/订阅表,甚至只是用户的id本身。因此,您可以在允许传递的自定义字段中将该识别信息传递给PayPal,然后在重定向/回调中您可以执行类似的操作(不是Omnipay代码,但它说明了这一点):

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

这样,无论用户是否有活动会话,您都可以完成交易;如果您的数据库失败,您不必退还客户,因为问题不是他们的问题。你最好抓住数据库故障并让脚本记录或通过电子邮件发送一条说明,告诉你这样付款成功,但数据库失败了 - 你手动完成购买。