2

我在Omnipay 和 Sagepay Server上苦苦挣扎。Omnipay示例代码不适用于 Sagepay 服务器,因为最终步骤由 Sagepay 而不是客户端完成,因此无法访问会话数据。

交易已注册:

$response = $this->gateway->purchase($params)->send();

客户端被重定向到 Sagepay:

$response->redirect();

然后应由 Sagepay 完成购买:

$gateway->completePurchase($params)->send();
$gateway->confirm(URL::to('checkout/complete'));

但是,未设置 $params。我不确定在没有会话的情况下再次获取交易参数详细信息。或者,如果我缓存 $params,Sagepay 如何检索缓存。

任何帮助将不胜感激!

谢谢

4

1 回答 1

2

在重定向客户之前,您需要将交易详细信息存储在数据库中。

当您第一次创建事务时,在调用之前将 ,id等存储在数据库中。您还应该为交易生成一个唯一的令牌/slug。amountcurrency$gateway->purchase()

然后,您可以returnUrl使用$params数组设置自定义。例如,您可以将返回 URL 设置为(当前交易的唯一令牌在https://www.example.com/checkout/complete/abcdef哪里)。abcdef

然后,当 SagePay 调用您的返回 URL 时,您可以检查 URL 以获取有效令牌,并加载交易详细信息。这样,您可以从原始事务中重新生成$params正确的数组。amount

有关设计结帐流程的更多信息,请参阅请求之间的付款处理

于 2014-01-30T11:26:55.297 回答