cancel
Showing results for 
Search instead for 
Did you mean: 

Crear una modulo (Extensión) para que funcione con una API de pagos

Crear una modulo (Extensión) para que funcione con una API de pagos

Hola comunidad Magento.

Me encuentro con la siguiente dificultad.

He logrado mediante PHP comunicarme con una API generadora de pagos en mi país sin embargo esta API me devuelve una URL link de pago y tengo que añadir de alguna manera esto en mi forma de pago con tarjeta de tal manera que si elijo la opción de pago con tarjeta en algún momento me direccione a este link y pagar, yo le puedo decir mediante código php que me redirija a una url en caso de fallo y otra url en caso de que se ha procedaso con exito y a la vez el sistema se comunica con mi archivo callbackurl que me genera que paso con la solicitud.

La pregunta es como inserto esto en magento es posible coger este formulario que me retorna y añadirlo o responderlo mediante codigo de alguna manera para que no se abra como un link y se procese al final ?? el magento que utilizo es 1.9.2 de antemano muchas gracias. 

17 REPLIES

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Hola @rasanchez,

 

Por lo que describes, creo que el módulo de MercadoPago (disponible en github) se puede parecer bastante a lo que mencionas (en particular versiones más viejas del módulo).

Sino, como un módulo más sencillo (y discontinuado) que puede servir, creo, para entender el tema de las redirecciones, quizás pueda servirte esto también: https://github.com/barbanet/magento-dc-decidir

 

 

--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Gracias @Damian Culotta la verdad es que ya terminé de desarrollar todo en PHP y funciona de maravilla puedo hacer pagos con tarjeta y eliminar bauchers con un par de clicks ahora lo que tengo que hacer es juntar esto con magento y estaba pensandolo de la siguiente forma. Al momento de generar el pedido elijo la forma de pago avanza hasta ver el valor total y aceptar los términos y al momento de poner pagar salta la ventana con el link de pago que lo tengo que llamar pasando una referencia del pedido, valor total de la compra después de impuestos y envío, user id con esto mostraría en el link un pequeño formulario donde tiene que poner la información de su tarjeta y al colocar pagar si todo es correcto para a la notificación de que todo fuen un exito número de orden XXX sino lo manda a página de error, pero lo importante es que el callback de la web me retorna el estado de la compra y la referencia que le pase que en este caso sería el ID de la orden en donde debo indicar si el pago fue correcto actualice el pedido a cancelado. lo único malo es que no se como invocar las variables existentes en magento y hacer todo esto en el modulo como tal. Si tienes más información que me puedas compartir que me vaya a ayudar en hacerlo te lo agradecería un mundo!!! de antemano muchas gracias.

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Hola @rasanchez,

 

SI sigues mirando el módulo que te indiqué como ejemplo (sólo como eso, como ejemplo) puedes ver en este controller cómo se captura data enviada y qué sucede con la Orden.

 

https://github.com/barbanet/magento-dc-decidir/blob/master/app/code/community/Dc/Decidir/controllers...

 

 

--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Después de revisar una y otra vez ... leer algo de MVC de Zend Framework aquí estoy de nuevo Damian, ante todo feliz año 2018!! he avanzado bastante sin embargo me encuento con un problema que tal vez me puedas ayudar :

url.jpgComo te comenté en algún momento yo ya tenía montado todo el proceso en PHP normal pero no sabía como agregarlo o hacerlo un modulo en magento, pues ya he logrado que cuando cuando termine la orden en el magento guarde la orden y me direccione a la URL que está en con algunos rojos en la imagen normalmente ese texto lo he puesto con urlencode() en ambos solo que uno está en la carpeta model de mi plugin y el otro un archivo de texto php, debería si pongo un mail envíar el @ como %40 pero lo cambia a %2540 y el :// de las url automáticamente los cambia a %3A%2F%2F y esto me está causando problemas al momento de conectarme con la API ya que no es el mismo contenido por lo que incluso no genera un token valido ??? que crees que pueda ser?? o algo hace magento o necesito colocar alguna función especial ?? gracias @Damian Culotta de antemano por darte tiempo en contestar. Saludos!!!

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Hola @rasanchez,

 

No me queda claro (puede ser que esté ya muy quemado) cuál es la respuesta que te llega desde el gateway.

¿Podrías mostrar la respuesta raw?

--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Como estás @Damian Culotta como me indicaste seguí el programa de elemplo que me pasaste y efectivamente hay en el model la sintaxis donde creal la URL que tiene que redireccionar la web al momento de hacer el pedido esta URL es un método GET 

 

El problema está en que toda la url está completa pero por ejemplo la url que tengo que redireccionar es la siguiente:

 

http://www.webderedireccionamiento.com/?User=rafast90@hotmail.com

 

la API de destino me indica que hay un error porq no acepta el simbolo @ entonces le coloco la función urlencode($user); y me devuelve este valor una vez hecho el cambio:

http://www.webderedireccionamiento.com/?User=rafast90%40hotmail.com

y lo procesa normalmente la API.

 

Ahora hago lo mismo en magento pero no me devuelve el mismo valor sino rafast90%2540hotmail.com lo mismo sucede con los espacios en una descripción o el :// que normalmente están en una url los simplos que aparecen no son los mismos por lo que la API devuelve error.

Entonces no se que hacer para que salgan los valores correctos.????

 

 

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Hola @rasanchez,

 

¿No deberías hacer un urldecode para inrgesar los datos en Magento?

--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Haber lo que pasa es que no vale el urlencode, estoy en una función en la carpeta model del modulo en Decidir.php

 

public function getCheckoutFormFields()
{
$order = Mage::getModel('sales/order');
$order->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());


$authtime = time();
$product_description="pago con tarjeta de credito";
$id_transaction = 'application_code=' . $this->getMerchantId();
$id_transaction .= '&dev_reference='. $order->getIncrementId();
$id_transaction .= '&product_amount=' . number_format(($order->getBaseTotalDue()), 2, '.', '');
$id_transaction .= '&product_code=' . "tcw01";
$id_transaction .= '&product_description=' . htmlspecialchars_decode($product_description, ENT_NOQUOTES);
$id_transaction .= '&uid=' . htmlspecialchars_decode($order->getCustomerEmail(), ENT_NOQUOTES);
$id_transaction .= '&'. $authtime;
$id_transaction .= '&' . $this->getMerchantPassword();

 

$id_transaction debería devolverme algo así:

application_code=MKCE-EC&uid=rafast90%40hotmail.com&auth_timestamp=1516735205

 

pero me lo devuelve así:

application_code%3DMKCE-EC%26uid%3Drafast90%40hotmail.com%26auth_timestamp=1516735205

 

Si revisas lentamente te darás cuenta que cambia el "=" por %3D y el "&" por %26

he tratado de pasarlo por esta función, para que me muestre el caracter que quiero pero no resulta y el problema es que necesito generar con este contenido un hash sha256 que es el que valida la API de mi proveedor y para que coincida ese token el valor debe ser exactamente el mismo.

 

<?php
function myUrlEncode($string) {
    
$entities = array('%21''%2A''%27''%28''%29''%3B''%3A''%40''%26''%3D''%2B''%24''%2C''%2F''%3F''%25''%23''%5B''%5D');
    
$replacements = array('!''*'"'""("")"";"":""@""&""=""+""$"",""/""?""%""#""[""]");
    return 
str_replace($entities$replacementsurlencode($string));
}
?>

 

@Damian Culotta espero haya quedado un poco más claro el problema, pls!!! debes tener alguna idea de lo que sucede he usado htmlspecialchars_decode() y con esto pude resolver los espacios porque no los ponía con el signo "+" pero con estos dos caracteres no me funciona he hecho algunas pruebas pero aun no doy con la respuesta. si se te ocurre algo me comentas muchas gracias por tu valioso tiempo.

Re: Crear una modulo (Extensión) para que funcione con una API de pagos

Hola @rasanchez,


He estado leyendo y releyendo el thread.

No entiendo muy bien por qué aquí haces un decode:

 

$id_transaction .= '&uid=' . htmlspecialchars_decode($order->getCustomerEmail(), ENT_NOQUOTES);

Entiendo que $order->getCustomerEmail() no está encodeado.

 

¿Puedes compartir el código que usás para encodear? (o mejor aún, documentación oficial de ese gateway para repasar los requerimientos del string que debes enviarle?

--
If you've found one of my answers useful, please give "Kudos" or "Accept as Solution"