Я разрабатываю платежный модуль для Magento. Я сделал это, используя этот учебник
http://www.magentocommerce.com/wiki/5_-_modules_and_development/payment/create-payment-method-module
Я создал папку
app/local/Companyname/Cashondelivery/Block app/local/Companyname/Cashondelivery/Model app/local/Companyname/Cashondelivery/controller app/local/Companyname/Cashondelivery/etc app/local/Companyname/Cashondelivery/helpers
Файл etc / config.xml
<?xml version="1.0"?> <config> <modules> <Companyname_Cashondelivery> <!-- declare module's version information for database updates --> <version>0.1.0</version> </Companyname_Cashondelivery> </modules> <global> <!-- declare model group for new module --> <models> <!-- model group alias to be used in Mage::getModel('newmodule/...') --> <createorder> <!-- base class name for the model group --> <class>Companyname_Cashondelivery_createorder</class> </createorder> </models> <!-- declare resource setup for new module --> <resources> <!-- resource identifier --> <cashondelivery_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_Cashondelivery</module> </setup> <!-- specify database connection for this resource --> <connection> <!-- do not create new connection, use predefined core setup connection --> <use>core_setup</use> </connection> </cashondelivery_setup> <cashondelivery_write> <connection> <use>core_write</use> </connection> </cashondelivery_write> <cashondelivery_read> <connection> <use>core_read</use> </connection> </cashondelivery_read> </resources> </global> <!-- declare default configuration values for this module --> <default> <!-- 'payment' configuration section (tab) --> <payment> <!-- 'newmodule' configuration group (fieldset) --> <cashondelivery> <!-- by default this payment method is inactive --> <active>0</active> <!-- model to handle logic for this payment method --> <model>cashondelivery/createorder</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>Companyname</title> </cashondelivery> </payment> </default> </config>
по<?xml version="1.0"?> <config> <modules> <Companyname_Cashondelivery> <!-- declare module's version information for database updates --> <version>0.1.0</version> </Companyname_Cashondelivery> </modules> <global> <!-- declare model group for new module --> <models> <!-- model group alias to be used in Mage::getModel('newmodule/...') --> <createorder> <!-- base class name for the model group --> <class>Companyname_Cashondelivery_createorder</class> </createorder> </models> <!-- declare resource setup for new module --> <resources> <!-- resource identifier --> <cashondelivery_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_Cashondelivery</module> </setup> <!-- specify database connection for this resource --> <connection> <!-- do not create new connection, use predefined core setup connection --> <use>core_setup</use> </connection> </cashondelivery_setup> <cashondelivery_write> <connection> <use>core_write</use> </connection> </cashondelivery_write> <cashondelivery_read> <connection> <use>core_read</use> </connection> </cashondelivery_read> </resources> </global> <!-- declare default configuration values for this module --> <default> <!-- 'payment' configuration section (tab) --> <payment> <!-- 'newmodule' configuration group (fieldset) --> <cashondelivery> <!-- by default this payment method is inactive --> <active>0</active> <!-- model to handle logic for this payment method --> <model>cashondelivery/createorder</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>Companyname</title> </cashondelivery> </payment> </default> </config>
в<?xml version="1.0"?> <config> <modules> <Companyname_Cashondelivery> <!-- declare module's version information for database updates --> <version>0.1.0</version> </Companyname_Cashondelivery> </modules> <global> <!-- declare model group for new module --> <models> <!-- model group alias to be used in Mage::getModel('newmodule/...') --> <createorder> <!-- base class name for the model group --> <class>Companyname_Cashondelivery_createorder</class> </createorder> </models> <!-- declare resource setup for new module --> <resources> <!-- resource identifier --> <cashondelivery_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_Cashondelivery</module> </setup> <!-- specify database connection for this resource --> <connection> <!-- do not create new connection, use predefined core setup connection --> <use>core_setup</use> </connection> </cashondelivery_setup> <cashondelivery_write> <connection> <use>core_write</use> </connection> </cashondelivery_write> <cashondelivery_read> <connection> <use>core_read</use> </connection> </cashondelivery_read> </resources> </global> <!-- declare default configuration values for this module --> <default> <!-- 'payment' configuration section (tab) --> <payment> <!-- 'newmodule' configuration group (fieldset) --> <cashondelivery> <!-- by default this payment method is inactive --> <active>0</active> <!-- model to handle logic for this payment method --> <model>cashondelivery/createorder</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>Companyname</title> </cashondelivery> </payment> </default> </config>
по<?xml version="1.0"?> <config> <modules> <Companyname_Cashondelivery> <!-- declare module's version information for database updates --> <version>0.1.0</version> </Companyname_Cashondelivery> </modules> <global> <!-- declare model group for new module --> <models> <!-- model group alias to be used in Mage::getModel('newmodule/...') --> <createorder> <!-- base class name for the model group --> <class>Companyname_Cashondelivery_createorder</class> </createorder> </models> <!-- declare resource setup for new module --> <resources> <!-- resource identifier --> <cashondelivery_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_Cashondelivery</module> </setup> <!-- specify database connection for this resource --> <connection> <!-- do not create new connection, use predefined core setup connection --> <use>core_setup</use> </connection> </cashondelivery_setup> <cashondelivery_write> <connection> <use>core_write</use> </connection> </cashondelivery_write> <cashondelivery_read> <connection> <use>core_read</use> </connection> </cashondelivery_read> </resources> </global> <!-- declare default configuration values for this module --> <default> <!-- 'payment' configuration section (tab) --> <payment> <!-- 'newmodule' configuration group (fieldset) --> <cashondelivery> <!-- by default this payment method is inactive --> <active>0</active> <!-- model to handle logic for this payment method --> <model>cashondelivery/createorder</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>Companyname</title> </cashondelivery> </payment> </default> </config>
Приложение / local / Companyname / Modulename / etc / system.xml
<?xml version="1.0"?> <config> <sections> <payment> <groups> <cashondelivery translate="label" module="cashondelivery"> <label>Cash On Delivery</label> <frontend_type>text</frontend_type> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <!--<comment>[CDATA[<a href="http://celinks.magento.com/authorize_netRegistration" target="_blank">Click here to sign up for an Authorize.net account</a>]]></comment>--> <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>0</show_in_store> </active> <email_customer translate="label"> <label>Email Customer</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </email_customer> <login translate="label"> <label>API Login ID</label> <frontend_type>obscure</frontend_type> <backend_model>adminhtml/system_config_backend_encrypted</backend_model> <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> </login> <merchant_email translate="label"> <label>Merchant's Email</label> <frontend_type>text</frontend_type> <sort_order>11</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </merchant_email> <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> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> <sort_order>100</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </sort_order> <test translate="label"> <label>Test Mode</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</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> </test> <debug translate="label"> <label>Debug</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> </debug> <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> <payment_action translate="label"> <label>Payment Action</label> <frontend_type>select</frontend_type> <source_model>cashondelivery/createorder</source_model> <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> </payment_action> <cgi_url> <label>Gateway URL</label> <frontend_type>text</frontend_type> <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> </cgi_url> <min_order_total translate="label"> <label>Minimum Order Total</label> <frontend_type>text</frontend_type> <sort_order>98</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </min_order_total> <max_order_total translate="label"> <label>Maximum Order Total</label> <frontend_type>text</frontend_type> <sort_order>99</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </max_order_total> <allow_partial_authorization translate="label"> <label>Allow Partial Authorization</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>110</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </allow_partial_authorization> <model> </model> </fields> </cashondelivery> </groups> </payment> </sections> </config>
Затем я создал класс модели
<?php /** * Our test CC module adapter */ class Companyname_Cashondelivery_Model_createorder 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 = false; /** * 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 */ } ?>
Я даже создал файл в app / local / Companyname / Cashondelivery / Helper / Data.php
<?php class Companyname_Cashondelivery_Helper_Data extends Mage_Core_Helper_Abstract { } ?>
Но я получаю сообщение об ошибке при открытии Конфигурации> Способы оплаты
Неустранимая ошибка: Class 'Mage_Cashondelivery_Helper_Data' не найден в C: \ xampp \ htdocs \ magento \ app \ Mage.php в строке 516
Нужно ли иметь класс Помощника. Я понятия не имею о помощниках и Data.php
Причина, по которой ваш модуль нуждается в вспомогательном классе, – это аргумент module
в файле system.xml :
<cashondelivery translate="label" module="cashondelivery">
Magento передает аргумент module
методу фабрики Mage::helper()
. Это, в свою очередь, завершает идентификатор класса для cashondelivery/data
.
Mage::helper('cashondelivery'); // identical to Mage::helper('cashondelivery/data');
Теперь Magento проверяет использование префикса класса, просматривая узел global/helpers/cashondelivery/class
который отсутствует.
До сих пор довольно прямолинейно, но здесь это может быть немного запутанным для некоторых.
Если Magento не находит префикс класса-помощника, он пытается сделать один из них путем префикса идентификатора класса с помощью mage_
и добавления _helper
.
Таким образом, это дает вам mage_cashondelivery_helper
в качестве префикса класса, а mage_cashondelivery_helper_data
как полное имя класса.
Автозагрузчик превращает это в Mage / Cashondelivery / Helper / Data.php , который не может быть найден, и, следовательно, исключение, которое вы испытываете.
Помимо создания класса Companyname_Cashondelivery_Helper_Data
, вам необходимо добавить сопоставление групп классов в файл config.xml следующим образом:
<global> <helpers> <cashondelivery> <class>Companyname_Cashondelivery_Helper</class> </cashondelivery> </helpers> </global>
Это сопоставление класса класса с классом префикса – это все, что вам не хватает.