Magento 自定义支付网关
Posted
技术标签:
【中文标题】Magento 自定义支付网关【英文标题】:Magento Custom Payment Gateway 【发布时间】:2011-09-08 09:38:45 【问题描述】:我正在尝试为 Magento 编写自定义支付网关。该模块在管理后端(系统 - 配置 - 付款方式)中被识别,但在前端到达“付款信息”时,没有出现选择模块的选项。
下面包含我创建的三个 XML 文件,以及它们所在的目录。
任何帮助将不胜感激。谢谢。
root/app/etc/modules/Namespace_Module
<?xml version="1.0"?>
<config>
<modules>
<Namespace_Module>
<active>true</active>
<codePool>local</codePool>
</Namespace_Module>
</modules>
</config>
root/app/code/local//Namespace/Module/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Namespace_Module>
<version>0.1.0</version>
</Namespace_Module>
</modules>
<global>
<models>
<alias>
<class>Namespace_Module_Model</class>
</alias>
</models>
<resources>
<alias_setup>
<setup>
<module>Namespace_Module</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</alias_setup>
<alias_write>
<connection>
<use>core_write</use>
</connection>
</alias_write>
<alias_read>
<connection>
<use>core_read</use>
</connection>
</alias_read>
</resources>
</global>
root/app/code/local//Namespace/Module/etc/system.xml
<?xml version="1.0"?>
<config>
<sections>
<payment>
<groups>
<alias translate="label">
<label>Module</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<active translate="label">
<label>Enabled: </label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</active>
<title translate="label">
<label>Title: </label>
<frontend_type>text</frontend_type>
<sort_order>2</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</title>
<host translate="label">
<label>Host Address: </label>
<frontend_type>text</frontend_type>
<sort_order>3</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</host>
<port translate="label">
<label>Port Number: </label>
<frontend_type>text</frontend_type>
<sort_order>4</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</port>
<cctypes translate="label">
<label>Credit Card Types: </label>
<frontend_type>multiselect</frontend_type>
<source_model>adminhtml/system_config_source_payment_cctype</source_model>
<sort_order>5</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</cctypes>
<useccv translate="label">
<label>Credit Card Verification: </label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>6</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</useccv>
</fields>
</alias>
</groups>
</payment>
</sections>
【问题讨论】:
【参考方案1】:您在system.xml
中设置的值是全局 Magento 配置值。支付模块需要包含一个名为 model
的配置字段,它指定负责支付逻辑的 php 类。进来看看
app/code/core/Mage/Payment/etc/system.xml
通常,模块会将此设置为隐藏配置字段,然后在config.xml
中提供默认值。考虑来自Mage/Payment/etc/config.xml
的这段XML
<default>
<payment>
<ccsave>
<active>1</active>
<cctypes>AE,VI,MC,DI</cctypes>
<model>payment/method_ccsave</model>
<order_status>pending</order_status>
<title>Credit Card (saved)</title>
<allowspecific>0</allowspecific>
<group>offline</group>
</ccsave>
他们在这里设置了payment/method_ccsave
的模型。这是一个对应于 PHP Model 类的类别名
Mage_Payment_Model_Method_Ccsave
您的配置似乎缺少此类,这是您的付款选项未出现的原因之一。
【讨论】:
非常感谢。我已经添加了一个模型类并相应地链接到它;然而,仍然一无所获。如果有人能注意到其他可能丢失的东西,我将不胜感激。谢谢! 在上面的示例中,app/etc/modules/ 中的文件没有 .xml 扩展名。 Magento 正在此文件夹中查找 *.xml 文件,然后才会加载您模块的任何 XML 文件。【参考方案2】:您的 xml 似乎没有定义“块”部分。所以我假设您还没有创建 *.phtml 文件。我遇到了同样的问题。
这里找到的例子帮助了我: http://www.magentocommerce.com/boards/viewthread/230559/
注意 config.xml 的“块”部分。 另外,请注意 Blocks/*.php 文件和 form.phtml 文件。
【讨论】:
以上是关于Magento 自定义支付网关的主要内容,如果未能解决你的问题,请参考以下文章
使用重定向的 Woocommerce 自定义支付网关工作流程