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 自定义支付网关的主要内容,如果未能解决你的问题,请参考以下文章

用于多运输的 magento 自定义支付模块

Shopify 自定义支付网关实施

使用重定向的 Woocommerce 自定义支付网关工作流程

Woocommerce 自定义支付网关重定向

获取自定义支付网关数据作为 Woocommerce 3 中的设置

WooCommerce 自定义支付网关集成不执行 POST