Creacion de un modulo de pago en magento
Como dije en el anterior articulo , donde me refiero a la creacion de un servicio de boton de pago para boton de pago desde un servidor JSP , no fue mi decisión hacer este tipo de desarrollo, como tambien dije
si del cielo te caen limones aprendes hacer limonada, y en este caso particular, ya que yo habia hecho el botón de pago, "supusieron" , que debía saber como ponerlo a funcionar en el interior de Magento, pues las personas que reibieron el boton no tenian ni idea cde como instalarlo, ya que hasta ekl momento solo instalaban los botones estandar de estenciones conocidas via creator o las herrmientas de automatizacion de instalacion de magento. Entonces aqui vamos, este modelo funciona bien , eventualmente hay alguuas impresiones en la terminnologia que espero disculpen , pero yo de PHP , pocon, pocon y de Magento nada de nada, pero un profesor que tuve en mi vida univeritaria decia, "ingniero viene de ingenio" , aqui vamos.
ver como lo hice.
Creación módulo de pago en Magento
La instalación de un modulo de pago cualquiera en Magento consta de tres pasos
esenciales a saber:
1.
Definir el módulo en el archivo del sistema de Magento
con las variables básicas, en nuestro caso como es de pago necesitamos solo 3.
a.
Habilite (Enable)
b.
Estado del pedido (orden)
c.
Titulo del modulo de pago
2.
Darle los valores que el modulo debe recibir por
defecto al momento de invocarlo
En nuestro debemos
pasarle los valores a Habilite, Estado del pedido y titulo del modulo
a.
Habilite = 1
b.
Estado del pedido = pending
c.
Pinvalida – modulo de pago –
3. Definir
el modelo, que no es otra cosa que decirle a Magento que es lo que queremos que
haga cuando el usuario presione click en el botón , que puede ser tan simple
como en el caso que nos ocupa que llame un link de un sitio externo , o
preguntar / presentar información en
formularios de la base de datos Magento, puede incluso pedírsele que
cree variables si se necesitan en la base de datos , en resumen es programa
común y corriente desarrollado en PHP, donde pueden coexistir instrucciones
PHP, Javascript, xml, html., css .
4.
Activar
el modulo
creando un
entrada en la carpeta app/etc/modules
con el nombre del modulo que se está instalando app/etc/modules/Miempresa_Pay.xml
5. Crar
el archiva Data.php para instalar en Helper, sino el sistema no lo encuentra
marca un error de compilación/ejecución cuando se actualiza la memoria chache
(error 520, modulo Helper_Data no encontrado.
6. Cambiar
los permisos de los archivos a 666 y
de las carpetas a 777
Como Magento utiliza cache para el almacenamiento
de los procesos es muy conveniente que en el momento de insertar el código del
nuevo módulo se desactive la funcionalidad de cache y una vez se termine el
proceso de active de nuevo para que Magento active los cambios y nuevos módulos
incluidos. Est proceso es similar al proceso publicar del Opencms.
En
Magento –
System -> Cache Management
En la creación de una carpeta es importante tener
en cuenta: ruta del dominio; /domains/tiendademarcas.com/public_html/, además a través del documento los nombres de las
etiquetas entre <>, debe ser
respetado en cuanto si inician o no con mayúsculas es imprescindible manejar
bien esta convención de lo contrario el sistema no encuentra los módulos que se
indican en las etiquetas, por ejemplo <Pay>
es diferente a <pay> , ya que
en general el primero es el nombre de un modulo y el segundo es una clase o
método del modulo.
a. Usar app/code/local dentro de /domains/tiendademarcas.com/public_html/
Para crear la
carpeta donde usualmente se crean las
extensiones que no son estándar de Magento
b. La
carpeta /Miempresa es lo que Magento
denomina <Namespace>
c. La carpeta /Pay : es el nombre del módulo que vamos a instalar
(Ver definición del
módulo en la línea 6 de system.xml)
d. Dentro
de carpeta /Pay, se crean en general
las subcarpetas: etc, Module y Helper,
donde se grabaran los módulos necesarios para la creación del botón de pago.
e.
f.
Si el proceso de los módulos fue correctamente
efectuado el sistema debe poder verse en configuración -> avanzada : <NameSpace>_<Module> , para
nuestro caso
Pnvalidda_Pay
g. El
modulo puede ser configurado, (habilitado, cambiado de titulo y modo de pago)
en
Configuración
-> Ventas -> Medios de Pago, si está bien configurado., de lo contario es
este punto mostrara errores de ejecución o no mostrara el modulo para poder
perfilarlo
Creación del módulo de pago Miempresa
Crear dentro de la carpeta etc el archivo, donde
definimos el botón de pago Miempresa
El nombre del modulo system.xml se
conforma de la siguiente manera:
Este archivo configura la forma como se presenta el
modulo en el sistema administrativo
Sistema -> configurar -> Medios de Pago.
/app/code/local/<Namespace>/<Module>/etc/system.xml
app/code/local/Miempresa/Pay/etc/system.xml
system.xml
----------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sections>
<payment>
<groups>
<pay translate="label" module="pay">
<label>Miempresa
- Modulo de Pago -</label>
<sort_order>670</sort_order>
<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>Habilite</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>
<order_status translate="label">
<label>Estado
del pedido</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_order_status_processing</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>
</order_status>
<title translate="label">
<label>Titulo</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>0</show_in_store>
</title>
</fields>
</pay>
</groups>
</payment>
</sections>
</config>
En el módulo config.xml tenemos que poner los valores por defecto para los campos creados en system.xml, dentro de las etiquetas <config></config>, que Magento presenta al momento de configurar
el medio de pago.
Active = 1 :: Activado
Order_status = processing ::
transacción en proceso
Title = Miempresa
- Modulo de Pago - :: nombre de mi modulo de pago.
El nombre del modulo config.xml
se conforma de la siguiente manera:
/app/code/local/<Namespace>/<Module>/etc/config.xml
app/code/local/Miempresa/Pay/etc/config.xml
config.xml
<?xml
version="1.0"?>
<config>
<modules>
<Miempresa_Pay>
<version>0.2.0</version>
</Miempresa_Pay>
</modules>
<global>
<blocks>
<pay>
<class>Miempresa_Pay_Block</class>
</pay>
</blocks>
<models>
<pay>
<class>Miempresa_Pay_Model</class>
</pay>
</models>
<helpers>
<pay>
<class> Miempresa_Pay_Helper</class>
</pay>
</helpers>
</global>
<default>
<payment>
<pay>
<active>1</active>
<model>pay/pay</model>
<order_status>processing</order_status>
<title> Miempresa -
Modulo de Pago -</title>
</pay>
</payment>
</default>
</config>
-----------------------------------------------------------------------------------------------------------------------------
Crear la clase de modelo para nuestro método de pago en el lugar Miempresa_Pay_Model_Pay
como se menciona en la etiqueta
config.xml <model> (ver línea 12 del archivo config.xml, donde el primer pay de la directiva pay/pay se refiere a la etiqueta payment del archivo system.xml y el siguiente pay se refiere a la etiqueta pay de group del mismo archivo. Asi:
newmodule/paymentMethod
:: pay/pay
Note:
newmodule es un nombre arbitrario que en este caso es igual al paymentMethod
Se observa que el modelo simplemente invoca la
variable estática $_code donde determina que el modulo de clase abstracta es un
pago (pay) y a continuación dentro
de un comando echo de php sencillo invoca el enlace al botón de pago
externo de Miempresa en el Webservice.
Como el sistema debe llamar una paguina externa
donde esta el botón de pago debe hacer de acuerdo el MVC (modelo vista
controlador) , el Magento cuenta para tal efecto con el esquema
Blocks/Template, El bloque debe ser definido en el archivo config.xml y el model se debe configurar la variable $_formBlockType con la ruta donde el bloque que llama al template está definido (pay/pay) nos dice que el blocks esta
en el directorio/pay/Block/Pay.php de acuerdo a la notación de Magento.
El nombre del modelo se conforma de la
siguiente manera.
/app/code/local/<Namespace>/<Module>/Model/<Module>.php
app/code/local/Miempresa/Pay/Model/
Pay.php
Model
Class
Pay.php
<?php
class Miempresa_Pay_Model_Pay extends Mage_Payment_Model_Method_Abstract
{
protected $_code ='pay' ;
protected
$_formBlockType ='pay/pay' ;
}
?>
Magento requiere un modulo de activación de el modelo que se está instalando (ojoa la ruta de instalación
de este archuivo y el pay.phtml no están en la ruta
app/code/local/Miempresa/Pay, sino que tiene su propia ruta de acuerdo al MVC, este detalle me sacó canas, en rojo coloco la ruta
de mi modulo y puede ser usado como una guia para su propio desarrollo.
Miempresa_Pay.xml
app/etc/modules/Miempresa_Pay.xml
-----------------------------------------------------------
<?xml version="1.0"?>
<config>
<modules>
<Miempresa_Pay>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Payment />
</depends>
</Miempresa_Pay>
</modules>
</config>
Magento solicita el Helper,
aunque este vacío como en este caso particular, al momento de compilación
y actualización del cache muestra un error indicando que el modulo Data.php.
falta (error 520)
/app/code/local/<Namespace>/<Module>/Helper/Data.php
Data.php
/app/code/local/Miempresa/Pay/Helper/Data.php
----------------------------------------------------------------------------------------------------------/
<?php
class Miempresa_Pay_Helper_Data extends
Mage_Core_Helper_Abstract
{
}
Definición del Block que llama al template de presentación de la pagina
externa donde esta el botón de pago Miempresa, de debe notar que el archivo
definido en el Block, llama al archivo de flujo miempresa/pay.phtml , el cual
es un archivo combinado de instrucciones sencillas html y código empotrado php,
que ejecuta en la vista del usuario
Pay.php
/app/code/local/Miempresa/Pay/Block/Pay.php
<?php
class Miempresa_Pay_Block_Pay extends Mage_Payment_Block_Form
{
protected function _construct()
{
parent::_construct();
$this->setTemplate('miempresa/pay.phtml');
}
}
?>
El archivo Pay.phtml es el
archive que sirve de vista al controlador y presenta la información en el
frondend del cliente, allí se colocan
instrucciones tipo php + Html convencionales para que el sistema La presente de
forma convenciona de una paga web.
Este archivo se crea por fuera
del modulo generado en app-> code -> Miempresa -> Pay
En app -> design -> ..
En este caso particular el boton de pago Busca un likn externo a una pagina donde hay un medio de pago implementado en Web service externo a Magento (ver articulo en este mismo blog sobre webservice magento, Java)
Pay.phtml
/domains/tiendademarcas.com/public_html/app/design/frontend/base/default/template/miempresa/pay.phtml
-------------------------------------------------------------------------------------------------------------------
<?php
$_code=$this->getMethodCode() ?>
<div
id="iframe-warning" class="warning-message">
<?php echo $this->__('Por
Favor no actualice hasta completar el pago.') ?>
</div>
<ul
class="form-list" id="payment_form_<?php echo $_code
?>" style="display:none;">
<li>
<a href="http://www.miempresa.com/botontdm?categoria=tdm"
target="_self">
<img src="http://www.miempresa.com/opencms/export/system/modules/botonTdm/resources/img/CENTRAL/boton_de_pago.png"
/>
</a>
</li>
</ul>
<div>
------------------------------------------------------------------------------------------------------------------
hola he realizado tu tutorial, pero no me aparece la forma de pago en el front end, puedes publicar el codigo a ver si equivoque en algo por favor . gracias y saludos
ResponderEliminarsi aparece y funciona de maravilla
ResponderEliminarGrandes directrices !!, gracias a share.I han encontrado ofrecido Magento 2 extensiones y que están demostrado ser muy útil para me.That a hacer fácil y preferible a mi store.Checkout: https: //goo.gl/bFSQcX
ResponderEliminarTengo un problema esto no se muestra en el front-end
ResponderEliminarayuda no se muestra en el front end
ResponderEliminar