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