0

在处理 WorldPay 交易的回调时,检索传递给 Omnipay 的原始 transactionId 的最佳方法是什么?

例如,这将需要使用事务结果更新适当的数据库记录。

我可以看到响应中有一个 getTransactionReference() 方法可用,但没有 getTransactionId() 方法(它可能会访问 WorldPay 返回的“cartId”值)。

我猜cartId 值可以直接访问,但有没有网关不可知的方法来做到这一点?

4

1 回答 1

1

您应该使用自定义 returnUrl 将 transactionId 传回给自己。

首先,当您设置 Worldpay 时:

  1. 登录您的 WorldPay 商户管理界面
  2. 在安装下,单击安装 ID 旁边的设置
  3. 在付款响应 URL 字段中,输入<wpdisplay item=MC_callback>
  4. 确保启用付款响应?选项被选中

然后,当您使用 Omnipay 提出初始购买请求时,传递一个自定义returnUrl. 例如:

$response = $gateway->purchase(array(
    'amount' => '10.00',
    'currency' => 'USD',
    'returnUrl' => 'https://www.example.com/return?transactionId=123'
))->send();

这样,在您的回调/返回页面上,您可以在调用之前加载原始交易详细信息completePurchase()

$transaction = Transaction::find($_GET['transactionId']);
$response = $gateway->completePurchase(array(
    'amount' => $transaction->amount,
    'currency' => $transaction->currency,
))->send();
于 2014-01-22T20:30:10.293 回答