我已从Magento管理面板启用了“CC已保存”方法。我想要在结帐页面的下拉列表中列出客户输入的所有信用卡详细信息。任何人都可以帮助我。
答案 0 :(得分:1)
这不是您使用“自己动手”的解决方案。有些交易处理公司拥有卡片钱包功能,不需要您自己保存信用卡详细信息,这比这种思路更安全,更安全。
关于存储信用卡数据的法律是严格的,从它的声音来看,这种思路会破坏其中的一些,使客户面临信用卡欺诈的重大风险。
我将找到一个完整性的解决方案,但无法让自己接受它。
答案 1 :(得分:0)
我偶然在上周为一位客户做了这件事。我的解决方案是通过提供使用此配置启用的新类来创建Mage_Sales_Model_Mysql4_Order_Payment_Collection
的后代:
<config>
<global>
<models>
<mymodule>
<class>My_Module_Model</class>
<resourceModel>mymodule_eav</resourceModel>
</mymodule>
<mymodule_eav>
<class>My_Module_Model_Resource</class>
<entities>
<payment><table>sales_flat_order_payment</table></payment>
</entities>
</mymodule_eav>
</models>
</global>
</config>
app/code/local/My/Module/Model/Payment.php
:
class My_Module_Model_Payment extends Mage_Sales_Model_Order_Payment
{
protected function _construct()
{
$this->_init('mymodule/payment'); // name of single resource model
}
}
app/code/local/My/Module/Model/Resource/Payment.php
:
class My_Module_Model_Resource_Payment extends Mage_Sales_Model_Mysql4_Order_Payment
{} // no more is needed
app/code/local/My/Module/Model/Resource/Payment/Collection.php
:
class My_Module_Model_Resource_Payment_Collection extends Mage_Sales_Model_Mysql4_Order_Payment_Collection
{
protected function _construct()
{
$this->_init('mymodule/payment'); // model alias
}
public function addSavedFilter($customerId)
{
$this->join('sales/order', '`main_table`.`parent_id`=`sales/order`.`entity_id`', '');
$this->addAttributeToFilter('customer_id', $customerId)
->addAttributeToFilter('cc_number_enc', array('neq'=>''))
->getSelect()->group(array('cc_exp_year', 'cc_exp_month', 'cc_owner', 'cc_last4', 'cc_type'));
return $this;
}
}
然后我可以得到这样一个列表:
$payments = Mage::getModel('mymodule/payment')->getCollection()->addSavedFilter($customer->getId());
<强> P.S。强>
正如约瑟夫指出存储信用卡详细信息有一定的法律考虑。在这个特殊情况下,我的客户知道所有这些,并准备承担责任。
答案 2 :(得分:0)
另一个需要考虑的方法是使用支付网关直接在服务器上存储信用卡 ,并使用其API处理订单付款。我想到的一个众所周知的是Authorize.Net CIM (Customer Information Manager)。这将卸载许多潜在的合法性问题,并且您的站点更容易通过PCI合规性扫描和规则。 Magento有一些付款方式扩展可以帮助解决这个问题。