Omnipay 和 Sagepay 服务器
Posted
技术标签:
【中文标题】Omnipay 和 Sagepay 服务器【英文标题】:Omnipay and Sagepay Server 【发布时间】:2014-02-21 22:40:23 【问题描述】:我正在为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 如何检索缓存。
任何帮助将不胜感激!
谢谢
【问题讨论】:
嗨,Beech,您的 omnipay/sagepay 服务器集成是否正常工作?我似乎无法弄清楚如何完成交易并将数据返回到通知 URL 的 sagepay 请求。你能帮忙吗? 当然,我想我现在是 Omnipay Sagepay 专家了!在 SO 上提出问题并将链接发送给我。 找到your question,希望对您有所帮助。 【参考方案1】:在重定向客户之前,您需要将交易详细信息存储在数据库中。
当您第一次创建事务时,在调用$gateway->purchase()
之前,将id
、amount
、currency
等存储在您的数据库中。您还应该为交易生成一个唯一的令牌/slug。
然后,您可以使用$params
数组设置自定义returnUrl
。例如,您可以将返回 URL 设置为 https://www.example.com/checkout/complete/abcdef
(其中 abcdef
是当前事务的唯一令牌)。
然后,当 SagePay 调用您的返回 URL 时,您可以检查该 URL 以获取有效令牌,并加载交易详细信息。这样,您就可以从原始事务中使用正确的amount
重新生成$params
数组。
有关设计结帐流程的更多信息,请参阅Payment handling between requests。
【讨论】:
啊!是的,这是个好主意。我在 $gateway->purchase() 之后将信息存储在数据库中,以便首先获取交易参考。以后应该存储吗? 其实这是一个更好的主意。使用 sagepay 从内存中调用$params
时需要将transactionReference
传回completePurchase()
,因此最好在调用purchase()
之后保存数据库事务,但在将客户重定向到Sagepay 之前保存。跨度>
感谢阿德里安,这很奏效。您应该使用该问题中的一些信息更新文档!
是的,我知道,它在我的待办事项清单上。真的需要为结帐流程/购物车设计编写更详尽的指南。
我写了一个处理SagePay的包,可能有用github.com/academe/sagepay即使你不使用代码,流程的描述以及数据存储和检索的位置,都在头版。以上是关于Omnipay 和 Sagepay 服务器的主要内容,如果未能解决你的问题,请参考以下文章
以 SagePay 形式将 mcrypt 升级为 OpenSSL 加密