存储支付网关对报价的响应并坚持订购

时间:2012-12-17 12:39:43

标签: magento payment-gateway

我正在为一个授权贷款作为支付系统的网关编写一个magento模块。

由于客户被拒绝的概率相对较高,我选择使用getCheckoutRedirectURL()(在结账流程中将“下订单”之前的贷款步骤放置)来实现这一点,以便在失败的情况下,我可以轻松将客户退回到付款选择页面。

然后我在我的控制器中的redirectAction中进行网关API调用。

因此,我获得了一个在灯箱中打开的URL,以便让客户完成贷款流程,以及来自贷款网关的一些身份证。

我想将这些额外的ID存储为报价的一部分,然后在将报价转换为订单时将其复制到订单中(我进行了类似于Google Checkout的转换 - 基于来自贷款网关的回调)

但是,我无法弄清楚如何在报价上保留数据。

显而易见的方式:

$quote->setCustId($custId);
$quote->save();

不起作用;附加数据不会存储在数据库中,因此在回发处理程序中不可用于将报价转换为订单。

也是如此
$quote->setData('custId', $custId);
$quote->save();

(我认为这只是第一个更明确的形式,因为它不使用魔术二传手/吸气剂)

我见过对setAdditionalData的引用(例如,here),但看起来只能在付款对象上使用,我认为我还没有引用它(尽管我可能错了? )

有没有办法在数据库中的某个订单上存储某些字段,而无需为它们实际添加数据库字段?

1 个答案:

答案 0 :(得分:0)

您需要将实际列添加到sales_flat_quote表以在引号对象中存储额外的变量。

由于您正在制作的内容与付款方式有关,我建议您将这些变量存储在additional_information数据集中,该数据集作为序列化的php数组存储到sales_flat_quote_payment表,并且付款方式可以设置数据到这个变量如下:

$quote->getPayment()->getInfoInstance()->setAdditionalInformation($key, $value);
$order->getPayment()->getInfoInstance()->setAdditionalInformation($key, $value);

app/code/core/Mage/Payment/Model/Info.php

了解详情

唯一的缺点是它最终存储为序列化数组,这意味着如果您以某种方式需要依赖此数据,提供过滤器等,则以后不会直接进行sql访问。