我为我们的一家电子商务企业继承了一台Magento服务器,我们发生了一些欺诈行为。有一个自定义的API,我们用于CC处理和DB管理等,我们必须将所有订单和付款变量从Magento值分配到这个API中。
我们想添加"卡验证"字段,因为到目前为止我们还没有要求它。无论如何,我激活了Magento配置的Payment Methods
部分中的Request Card Security Code
字段,它现在确实显示在签出屏幕上。。。然而,当单击提交并且我试图通过在success.phtml
上使用$payment->getCcCid()
来检索值时,安全代码为空。当我进行调试时(正如其他SO帖子$_order->getPayment()->debug()
中所建议的那样),它不会在任何地方显示。我有print_r($payment)
来查看值是否包含在他们的某处,但遗憾的是,它不是。
提交调试
$_order->getPayment()->debug()
产生:
Array
(
[entity_id] => 4619
[parent_id] => 4619
[base_shipping_amount] => 0.0000
[shipping_amount] => 0.0000
[base_amount_ordered] => 74.9500
[amount_ordered] => 74.9500
[cc_exp_month] => 3
[method] => ccsave
[cc_last4] => 1111
[cc_owner] => Andrew
[cc_type] => VI
[cc_exp_year] => 2016
[cc_number_enc] => xSIyni0Ndvnaa4RZxLZS/w==
[additional_information] => Array
(
)
)
/template/checkout/success.phtml
我可以检索所有这些其他字段,没问题,安全代码正在躲避我。我问了最初从事这项工作的人,当提到我检索的内容时,他们的回答是"应该有效":
// Value is assigned properly
$CC_NAME_1 = $payment->getCcOwner();
// Value is assigned properly
$CC_NUM_1 = preg_replace("[^0-9]", "", $payment->getCcNumber());
// Value is blank
$CSVCODE_1 = $payment->getCcCid();
顺便说一句,分配$payment->getCcCid()
时没有错误,所以它是空白的。任何来自专业Magento开发人员的帮助,他们可能知道我缺少什么,都将是伟大的。
正如评论中所建议的,我必须从检索并转发CID
/app/code/core/Mage/Checkout/controllers/OnepageController.php
对于任何感兴趣的人来说,这就是流程:
我创建了一个自定义类,该类添加了一个salt
并将其预先添加到CID中,对这个新值进行编码,将其保存到session
变量中,然后在success.php
页面上,我解码、拆分salt
,将CID分配给session
中的一个变量,销毁会话变量,然后将新的CID变量转发给自定义API
以供第三方处理。
感谢那些发表评论的人,所提供的信息有助于弄清真相。
编辑-2016/10:
自从发布这篇文章以来,我重新创建了这个项目,并希望能更好地实现它。在付款提交时,我使用sales_order_place_before
事件对一个事件使用了观察员,这使我可以在此时应用所有API,并将成功页面用作成功页面。