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>
------------------------------------------------------------------------------------------------------------------

Comentarios

  1. 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

    ResponderEliminar
  2. Grandes 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

    ResponderEliminar
  3. Tengo un problema esto no se muestra en el front-end

    ResponderEliminar
  4. ayuda no se muestra en el front end

    ResponderEliminar

Publicar un comentario

Entradas populares