原文地址
http://www.magentocommerce.com/wiki/5_-_modules_and_development/payment/create-payment-method-module
介紹
每個支付接口方法可以被做成一個獨立的Module,一些方法可以被合並到同一個Module ,因為有可能他們共享相同的功能。
讓我們創建一個Module,它有一個支付方法將完成:
1. 接受信用卡信息
2.驗證訂單是否被提交
3.保存Transaction ID 到訂單支付記錄
我們的Moudle命名為NewModule
文件夾的創建確保:app/code/local
是include_path
如果你使用可配置緩存,不要忘記重置它,在修改了任何Config.xml文件,用刪除var/cache下面的文件來達到目的
一個不錯的建議:禁用Cashe, 在開發階段
Moudle 聲明
創建app/etc/modules/CompanyName_NewModule.xml
<config> <modules> <!-- declare CompanyName_NewModule module --> <CompanyName_NewModule> <!-- this is an active module --> <active>true</active> <!-- this module will be located in app/code/local code pool --> <codePool>local</codePool> <!-- specify dependencies for correct module loading order --> <depends> <Mage_Payment /> </depends> </CompanyName_NewModule> </modules> </config>
現在應用程序就知道這個模塊了。我們讓Magento瞭解模塊的詳細信息
Module 的配置
創建:app/code/local/CompanyName/NewModule/etc/config.xml
:
<?xml version="1.0"?> <config> <modules> <CompanyName_NewModule> <!-- declare module's version information for database updates --> <version>0.1.0</version> </CompanyName_NewModule> </modules> <global> <!-- IMPORTANT: if you use your own namespace (i.e. CompanyName) you also have to declare blocks group for new module. See topic: http://www.magentocommerce.com/boards/viewthread/22416/#t102732 --> <blocks> <newmodule> <class>CompanyName_NewModule_Block</class> </newmodule> </blocks> <!-- declare model group for new module --> <models> <!-- model group alias to be used in Mage::getModel('newmodule/...') --> <newmodule> <!-- base class name for the model group --> <class>CompanyName_NewModule_Model</class> </newmodule> </models> <!-- declare resource setup for new module --> <resources> <!-- resource identifier --> <newmodule_setup> <!-- specify that this resource is a setup resource and used for upgrades --> <setup> <!-- which module to look for install/upgrade files in --> <module>CompanyName_NewModule</module> </setup> <!-- specify database connection for this resource --> <connection> <!-- do not create new connection, use predefined core setup connection --> <use>core_setup</use> </connection> </newmodule_setup> <newmodule_write> <connection> <use>core_write</use> </connection> </newmodule_write> <newmodule_read> <connection> <use>core_read</use> </connection> </newmodule_read> </resources> </global> <!-- declare default configuration values for this module --> <default> <!-- 'payment' configuration section (tab) --> <payment> <!-- 'newmodule' configuration group (fieldset) --> <newmodule> <!-- by default this payment method is inactive --> <active>0</active> <!-- model to handle logic for this payment method --> <model>newmodule/paymentMethod</model> <!-- order status for new orders paid by this payment method --> <order_status>pending</order_status> <!-- default title for payment checkout page and order view page --> <title>Credit Card (Authorize.net)</title> <cctypes>AE,VI,MC,DI</cctypes> <payment_action>authorize</payment_action> <allowspecific>0</allowspecific> </newmodule> </payment> </default> </config>
適配器model
備註:PaymentMethod是隨意的,根據你自己意願來,你需要定義這個方法名字在config.xml裏面。比如上面的config→default→payment→newmodule→model
創建app/code/local/CompanyName/NewModule/Model/PaymentMethod.php
:
<?php /** * Our test CC module adapter */ class CompanyName_NewModule_Model_PaymentMethod extends Mage_Payment_Model_Method_Cc { /** * unique internal payment method identifier * * @var string [a-z0-9_] */ protected $_code = 'newmodule'; /** * Here are examples of flags that will determine functionality availability * of this module to be used by frontend and backend. * * @see all flags and their defaults in Mage_Payment_Model_Method_Abstract * * It is possible to have a custom dynamic logic by overloading * public function can* for each flag respectively */ /** * Is this payment method a gateway (online auth/charge) ? */ protected $_isGateway = true; /** * Can authorize online? */ protected $_canAuthorize = true; /** * Can capture funds online? */ protected $_canCapture = true; /** * Can capture partial amounts online? */ protected $_canCapturePartial = false; /** * Can refund online? */ protected $_canRefund = false; /** * Can void transactions online? */ protected $_canVoid = true; /** * Can use this payment method in administration panel? */ protected $_canUseInternal = true; /** * Can show this payment method as an option on checkout payment page? */ protected $_canUseCheckout = true; /** * Is this payment method suitable for multi-shipping checkout? */ protected $_canUseForMultishipping = true; /** * Can save credit card information for future processing? */ protected $_canSaveCc = false; /** * Here you will need to implement authorize, capture and void public methods * * @see examples of transaction specific public methods such as * authorize, capture and void in Mage_Paygate_Model_Authorizenet */ } ?>
這是將會做所有與你的支付接口交互的類,當某人創建一個訂單,驗證與捕獲方法會調用你這個類的方法,根據你的配置信息來。如果在你的管理界面你已經選擇了Authorize Only, 那麼驗證方法會被調用,如果你選擇了Authorize and Capture,容易混淆的只有capture方法被調用,如果你需要說明一個錯誤。在這些方法內,你可以使用
Mage::throwException("My error/debug message here");
這講導致Magento顯示一個JS的彈出窗口,終止訂單進度
現在我們有一個model讓我們給管理員一個渠道去配置它,也可以讓結算流程知道這個方法
聲明配置選項到後臺配置項:
這文件將定義可配置選項在Magento後臺的System->Configration
創建app/code/local/CompanyName/NewModule/etc/system.xml
:
<?xml version="1.0"?> <config> <sections> <!-- payment tab --> <payment> <groups> <!-- newmodule fieldset --> <newmodule translate="label" module="paygate"> <!-- will have title 'New Module' --> <label>New Module</label> <!-- position between other payment methods --> <sort_order>670</sort_order> <!-- do not show this configuration options in store scope --> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <fields> <!-- is this payment method active for the website? --> <active translate="label"> <!-- label for the field --> <label>Enabled</label> <!-- input type for configuration value --> <frontend_type>select</frontend_type> <!-- model to take the option values from --> <source_model>adminhtml/system_config_source_yesno</source_model> <!-- field position --> <sort_order>1</sort_order> <!-- do not show this field in store scope --> <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> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_order_status_processing</source_model> <sort_order>4</sort_order> <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> <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>0</show_in_store> </title> </fields> </newmodule> </groups> </payment> </sections> </config>
如果你跑去Admin / System / Configuration / Payment Methods,你會看到“New Module” 組,啟用它,嘗試去結帳,在支付方法頁面你會看到“New Module” 支付方法,並且有個信用卡表單
數據庫更新
創建 app/code/local/CompanyName/NewModule/sql/newmodule_setup/mysql4-install-0.1.0.php
:
<?php // here are the table creation for this module e.g.: $this->startSetup(); $this->run("HERE YOUR SQL"); $this->endSetup();
更新你的config.xml文件里的模塊版本號
<modules> <CompanyName_NewModule> <version>0.2.0</version> </CompanyName_NewModule> </modules>
然後創建文件:app/code/local/CompanyName/NewModule/sql/newmodule_setup/mysql4-upgrade-0.1.0-0.2.0.php
:
<?php // here are the table updates for this module e.g.: $this->startSetup(); $this->run("HERE YOUR UPDATE SQL"); $this->endSetup();
相关推荐
intergration test by testing 集成测试
"Integration Service Practice <2>" 主要关注的是微软SQL Server中的Integration Services (SSIS) 技术,这是一个强大的数据集成和工作流平台,用于在不同数据源之间移动、转换和加载数据。SSIS广泛应用于ETL(提取...
QT Visual Studio Integration是一款将Qt框架与Microsoft Visual Studio集成的开发工具,它允许开发者在Visual Studio环境中编写、构建和调试Qt应用程序。这个插件对于那些习惯使用Visual Studio界面但又需要利用Qt...
在“GF_intergration_Calculate”这个例子中,我们可以推断这是一个用于积分运算的全局FB库文件。GF可能代表“通用功能”(General Function),而“Integration”显然指的是积分运算,“Calculate”则表示这个FB是...
录像08_FICO intergration1
录像09_FICO intergration2,39分钟
标题中的"Sis intergration monitor"可能指的是一个系统集成监控工具,主要用于监控和管理IT环境中的不同组件,确保系统的稳定性和高效运行。由于描述部分为空,我们无法直接获取该工具的具体功能和特性,但我们可以...
### 黑莓集成开发环境详解 #### 一、概述 黑莓(BlackBerry)作为曾经全球知名的移动设备品牌,在智能手机发展初期占据着重要的市场份额。其不仅以安全性著称,更在企业级市场拥有广泛的应用场景。...
《AB PLC与模具机的集成应用深度解析》 在工业自动化领域,PLC(Programmable Logic Controller)扮演着至关重要的角色,而Allen Bradley(AB)品牌的PLC因其可靠性和灵活性,广泛应用于各种生产线和机械设备中。...
### 数据集成分析师选项扩展Informatica PowerCenter:自助服务数据集成的关键特性与优势 #### 自助服务数据集成:提升效率与协作 **标题解读**:“Data Integration Analyst Option 扩展 Informatica PowerCenter...
《SpringBoot与其他常用技术的集成》 在现代的软件开发中,SpringBoot因其简洁的配置、快速的开发体验以及强大的生态系统,已经成为Java开发者们的重要工具。本资源包"springboot-integration-examples"是一个开源...
PRD TOP接入系统(Taobao Integration Platform)产品需求说明书详细阐述了阿里巴巴集团为商家与开发者提供的全面集成解决方案。这份文档由XXX编写,旨在定义产品的需求、目标、路线图以及潜在风险,以确保产品的成功...
采用动态交通仿真模型INTEGRATION搭建了动态交通仿真平台,应用组件式蚁群算法来求解动态交通信息诱导下的最优路径选择问题。实例表明,基于动态交通仿真模型的最优路径选择方法是可行的、正确的和有效的。...
Android Auto是谷歌开发的一款车载系统,它允许驾驶员通过与他们的Android手机配对,将各种手机应用集成到汽车的信息娱乐系统中。这本《Head Unit Integration Guide - Auto Help》是为汽车信息娱乐系统(IVI)开发...
Telerik OpenAccess ORM 是一款强大的对象关系映射(ORM)框架,由Telerik公司开发,用于简化.NET应用程序中的数据访问层。2012年2月607版是该ORM工具的一个特定版本,可能包含了该时期的一些更新、修复和功能增强。...
Swing Explorer是一款强大的Java Swing开发辅助工具,专为简化Swing GUI组件的创建、测试和调试而设计。这款工具能够帮助开发者直观地查看和编辑Swing组件,提高开发效率,减少错误,使得Swing应用的构建更加高效和...
《SQL Server 2005 Integration Service 专家教程》是一本深入探讨SSIS(SQL Server Integration Services)的权威书籍,旨在帮助读者掌握如何利用该工具进行高效的数据集成和转换。SSIS是微软数据库管理系统SQL ...
Expert SQL Server 2005 Integration Services