我正在为一个授权贷款作为支付系统的网关编写一个magento模块。
由于客户被拒绝的概率相对较高,我选择使用getCheckoutRedirectURL()(在结账流程中将“下订单”之前的贷款步骤放置)来实现这一点,以便在失败的情况下,我可以轻松将客户退回到付款选择页面。
然后我在我的控制器中的redirectAction中进行网关API调用。
因此,我获得了一个在灯箱中打开的URL,以便让客户完成贷款流程,以及来自贷款网关的一些身份证。
我想将这些额外的ID存储为报价的一部分,然后在将报价转换为订单时将其复制到订单中(我进行了类似于Google Checkout的转换 - 基于来自贷款网关的回调)
但是,我无法弄清楚如何在报价上保留数据。
显而易见的方式:
$quote->setCustId($custId);
$quote->save();
不起作用;附加数据不会存储在数据库中,因此在回发处理程序中不可用于将报价转换为订单。
也是如此
$quote->setData('custId', $custId);
$quote->save();
(我认为这只是第一个更明确的形式,因为它不使用魔术二传手/吸气剂)
我见过对setAdditionalData的引用(例如,here),但看起来只能在付款对象上使用,我认为我还没有引用它(尽管我可能错了? )
有没有办法在数据库中的某个订单上存储某些字段,而无需为它们实际添加数据库字段?
答案 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访问。