检索Magento中的卡验证号会产生空结果


Retrieving Card Verification Number In Magento produces empty result

我为我们的一家电子商务企业继承了一台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,并将成功页面用作成功页面。