37. customer payment(1)

本文详细介绍如何在Magento中创建自定义支付方式,包括配置文件、表单、数据验证及存储等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建 system.xml 文件

<?xml version="1.0"?>

<config>
    <sections>
        <payment>
            <groups>
                <pay translate="label" module="pay">
                    <label>Www Payment Module</label>
                    <sort_order>666</sort_order>
                    <frontend_type>text</frontend_type>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>0</show_in_store>

                    <fields>
                        <active translate="label">
                            <label>Enable</label>
                            <sort_order>1</sort_order>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_yesno</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                        </active>
                        <order_status translate="label">
                            <label>New Order Status</label>
                            <sort_order>2</sort_order>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_order_status_processing</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                        </order_status>
                        <title translate="label">
                            <label>Title</label>
                            <sort_order>3</sort_order>
                            <frontend_type>text</frontend_type>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                        </title>
                    </fields>
                </pay>
            </groups>
        </payment>
    </sections>
</config>

这里写图片描述


2.在 config.xml 为 system.xml 所创建的内容填写默认值

<default>
        <payment>
            <pay>
                <active>1</active>
                <model>pay/pay</model>
                <order_status>processing</order_status>
                <title>Www Payment Method</title>
            </pay>
        </payment>
    </default>

这里值得一提的就是 <model> 标签, 它指明了支付方式 model 类文件的路径

3. Model 类

接下来就是为我们的支付方式添加 model 类文件, 刚已经在 < model> 标签里声明了, Www_Pay_Model_Pay

class Www_Pay_Model_Pay extends Mage_Payment_Model_Method_Abstract
{
    protected $_code = 'pay';
}

这里写图片描述


4.添加表单

class Www_Pay_Model_Pay extends Mage_Payment_Model_Method_Abstract
{
    protected $_code = 'pay';

    protected $_formBlockType = 'pay/form_pay';

}

该变量申明了一个 block 文件的路径,其包含了表单内容, 代码如下:

class Www_Pay_Block_Form_Pay extends Mage_Payment_Block_Form
{
    protected function _construct()
    {
        parent::_construct();
        $this->setTemplate('pay/form/pay.phtml');
    }
}
这里很简单, 就是设置了表单(Form)模板文件的路径 ‘pay/form/pay.phtml’, 在 pay.phtml 文件中写入:
<?php $_code = $this->getMethodCode() ?>
<ul class="form-list" id="payment_form_<?php echo $_code ?>" style="display:none;">
    <li>
        <label for="<?php echo $_code ?>_check_no" class="required"><em>*</em><?php echo $this->__('Check No#') ?></label>
        <span class="input-box">
            <input type="text" title="<?php echo $this->__('Check No#') ?>" class="input-text required-entry" id="<?php echo $_code ?>_check_no" name="payment[check_no]" value="<?php echo $this->htmlEscape($this->getInfoData('check_no')) ?>" />
        </span>
    </li>
    <li>
        <label for="<?php echo $_code ?>_check_date" class="required"><em>*</em><?php echo $this->__('Check Date:') ?></label>
        <span class="input-box">
            <input type="text" title="<?php echo $this->__('Check Date:') ?>" class="input-text required-entry" id="<?php echo $_code ?>_check_date" name="payment[check_date]" value="<?php echo $this->htmlEscape($this->getInfoData('check_date')) ?>" />
        </span>
    </li>
</ul>
<div>
    <?php echo $this->getMethod()->getConfigData('message'); ?>
</div>
<ul>标签内的 id “payment_form_<?php echo $_code ?>” 非常重要, 这里我们已经把它默认设为 display:none, 当到达 payment 这步的时候它是隐藏的, 只有当我们点击 ‘Pay by Check’ 选项的时候, <ul>标签就会变为 display:block, 到这里就是让表单块显示所需的条件
还有个需要记住的就是: protected $_formBlockType = ‘pay/form_pay’; 这个是用来显示表单的, 不可缺少
当我们创建表单后, 必须保证客户输入的值会成功保存到数据库, 并且可以在 Admin -> Sales -> Orders 中看到, 所以这一步我们就来看下如何将数据保存到数据库, 同时也对数据进行验证, 在我们的 model 类文件 Www_Pay_Model_Pay 中添加两个方法:
public function assignData($data)
    {
        if (!($data instanceof Varien_Object)) {
            $data = new Varien_Object($data);
        }
        $info = $this->getInfoInstance();
        $info->setCheckNo($data->getCheckNo())
            ->setCheckDate($data->getCheckDate());
        return $this;
    }

    public function validate()
    {
        parent::validate();

        $info = $this->getInfoInstance();

        $no   = $info->getCheckNo();
        $date = $info->getCheckDate();
        if (empty($no) || empty($date)) {
            $errorCode = 'invalid_data';
            $errorMsg  = $this->_getHelper()
                ->__('Check No and Date are required fields');
        }

        if ($errorMsg) {
            Mage::throwException($errorMsg);
        }
        return $this;
    }
这里调用了 assignData($data) 这个方法, 当我们点击 ‘Continue’ 按钮进入下一步的时候, 这个 $data 变量就包含了我们文本域中的内容, 所以在 assignDData() 方法中, 我们通过 $data 变量把信息并传递给 $this->getInfoInstance(), 该方法返回的对象就是 Mage_Payment_Model_Info, 它在许多地方被使用, 因为它包含很多关于支付方式的信息

这里如果你想知道 $data 是怎么获得文本域中的信息, 你可以查阅下 importData() 方法, 或者可以从 Mage_Checkout_OnepageController 中的 savePaymentAction() 方法开始追溯

接下去就是 validate() 方法了, 顾名思义它就是用来校验文本域中的数据是否符合需求, 现在想要存储这两个文本域中的值到数据库, 我们就需要创建列(columns), 在 Magento 中支付方式被默认保存在如下两个表中:


‘sales_flat_quote_payment’ 和 ‘sales_flat_order_payment’

如果你看一下这两个表结构就会发现它们含有多个列关于信用卡信息,订单号等等, 这些都是 Magento 默认的支付方式, 现在我们在两张表同时添加2个字段 “check_no” 和 ”check_date“ , 在 mysql install 文件中写入:


<?php
$installer = $this;
$installer->startSetup();
$installer->run("

ALTER TABLE `{$installer->getTable('sales/quote_payment')}` ADD `check_no` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `{$installer->getTable('sales/quote_payment')}` ADD `check_date` VARCHAR( 255 ) NOT NULL ;

ALTER TABLE `{$installer->getTable('sales/order_payment')}` ADD `check_no` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `{$installer->getTable('sales/order_payment')}` ADD `check_date` VARCHAR( 255 ) NOT NULL ;

");
$installer->endSetup();

这里写图片描述


5.接下去我们来修改下 config.xml 文件, 在 < global> 标签里写入:

<fieldsets>
            <sales_convert_quote_payment>
                <check_no>
                    <to_order_payment>*</to_order_payment>
                </check_no>
                <check_data>
                    <to_order_payment>*</to_order_payment>
                </check_data>
            </sales_convert_quote_payment>
        </fieldsets>

如上操作一旦完成, 这两个文本域的值就会被存储到数据库中的那两张表, 同时你也能在 Admin -> Sales -> Order 中看到


6.添加到支付详情区域

现在就剩下最后一件事了, 那就是支付详情区域, 该区域在多个地方被使用, 在订单进度区域, 订单邮件, 我的账号->我的订单, 后台订单详情页等等, 这里我也附上了截图:

为了达到该效果, 我们需要在支付 model 类文件里再添加如下变量:

    protected $_infoBlockType = 'pay/info_pay';

同样的,这也声明了 block 文件路径, 把如下代码写入:

class Www_Pay_Block_Info_Pay extends Mage_Payment_Block_Info
{
    protected function _prepareSpecificInformation($transport = null)
    {
        if (null !== $this->_paymentSpecificInformation) {
            return $this->_paymentSpecificInformation;
        }
        $info = $this->getInfo();
        $transport = new Varien_Object();
        $transport = parent::_prepareSpecificInformation($transport);
        $transport->addData(array(
            Mage::helper('payment')->__('Check No#') => $info->getCheckNo(),
            Mage::helper('payment')->__('Check Date') => $info->getCheckDate()
        ));
        return $transport;
    }
}
_prepareSpecificInformation() 方法会被 Magento 调用, 用来获取一个对象, 该对象包含我们所需要展示的信息

用来显示详细信息的默认 phtml 文件路径为: ‘app\design\frontend\base\default\template\payment\info\default.phtml’, 如果你想自定义不同的 phtml 文件, 你可以做如下操作:
protected function _construct() // 简单的说明, 并没有在当前示例中使用
{
    parent::_construct();
    $this->setTemplate('payment/info/purchaseorder.phtml');
}

这里写图片描述
这里写图片描述

http://www.sunzhenghua.com/magento-create-custom-payment-method

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
本次的学生体质健康信息管理网站,按照用户的角色可以分为教师与学生,后台设置管理员角色来对学生的信息进行管理。,设计如下: 1、后台管理系统 后台管理系统主要是为该系统的管理员提供信息管理服务的系统,具体包括的功能模块如下: (1)管理员信息管理 (2)教师信息管理 (3)学生信息管理 (4)健康信息统计(图形化进行健康,亚健康等学生的信息数量统计) 2、教师角色的功能模块设计 教师角色所需要的功能模块主要包括了如下的一些内容: (1)个人资料修改 (2)学生体质健康管理:录入相关数据,包括但不限于身高、体重、肺活量、视力等生理指标以及运动能力、身体成分、骨密度等健康指标,并且设置健康,亚健康状态 (3)学生健康建议:根据体质信息,进行学生健康的建议 (4)健康预警:对健康出问题的学生,进行健康预警 (5)饮食和锻炼情况管理,查看 3、学生角色 学生角色可以通过该信息网站看到个人的基本信息,能够看到教师给与学生的健康建议等,功能模块设计如下: (1)个人资料修改 (2)我的健康建议查看 (3)我的健康预警 (4)饮食和锻炼情况管理,记录平时的饮食和锻炼情况 完整前后端源码,部署后可正常运行! 环境说明 开发语言:Java后端 框架:ssm,mybatis JDK版本:JDK1.8+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:eclipse/idea Maven包:Maven3.3+ 部署容器:tomcat7.5+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值