我正在与Omnipay and Sagepay Server挣扎。 Omnipay example代码不适用于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如何检索缓存。
非常感谢任何帮助!
由于
答案 0 :(得分:2)
您需要在重定向客户之前将交易详细信息存储在数据库中。
首次创建事务时,请在调用id
之前将amount
,currency
,$gateway->purchase()
等存储在数据库中。您还应该为事务生成唯一的令牌/ slug。
然后,您可以使用returnUrl
数组设置自定义$params
。例如,您可以将返回URL设置为https://www.example.com/checkout/complete/abcdef
(其中abcdef
是当前事务的唯一标记)。
然后,当SagePay调用您的返回URL时,您可以检查有效令牌的URL,并加载事务详细信息。这样,您就可以使用原始事务中的正确$params
重新生成amount
数组。
有关设计结帐流程的详细信息,请参阅Payment handling between requests。