0

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

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

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

结果,我得到了一个在灯箱中打开的 URL,以引导客户完成贷款流程,以及来自贷款网关的一些 id。

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

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

显而易见的方式:

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

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

同样的情况发生在

$quote->setData('custId', $custId);
$quote->save();

(我认为这只是第一个更明确的形式,因为它不使用魔法设置器/获取器)

我已经看到对 setAdditionalData 的引用(例如,here),但这似乎仅适用于支付对象,我认为我还没有引用(尽管我可能是错的?)

有什么方法可以在数据库中的订单上存储一些字段,而不必为它们实际添加数据库字段?

4

1 回答 1

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 访问。

于 2012-12-17T12:50:32.537 回答