magento payment gateway

Flujo de pago de Magento



payment gateway (1)

Esta es la forma en que siempre he entendido los conceptos y lo que necesitará saber para implementar un módulo de pago en Magento. Las respuestas a su "dónde sucede esto específico" están en negrita a continuación, aunque no es tan simple como usted espera.

Las transacciones de tarjetas de crédito pre-internet y ladrillo y mortero eran un proceso de dos etapas.

En el momento de una venta, cuando el comerciante tomaba una tarjeta de crédito del consumidor para comprarla, la deslizaban por un dispositivo de punto de venta que llamaba a la oficina central de la tarjeta de crédito y preguntaba "¿esta tarjeta está autorizada para esta red? es la línea de crédito disponible de este consumidor en particular lo suficientemente grande como para permitir esta compra ".

Si la compra fue aceptada (en lugar de rechazada), se dijo que el cargo estaba autorizado . El consumidor tomaría su producto, y el sistema de punto de venta / caja registradora notaría que la transacción fue autorizada. Luego, al final de un día o al final de la semana, en algún otro horario regular predeterminado, o cuando el propietario decidió dejar de beber, el comerciante revisará todos sus recibos autorizados y enviará otra solicitud a la oficina central. para capturar los fondos de la transacción autorizada . Capturar los fondos es lo que pone dinero en la cuenta del comerciante.

Este sigue siendo el modelo en uso por la mayoría de las puertas de enlace, y es el modelo de dominio que Magento Inc. decidió implementar para sus módulos de pago.

La forma en que se supone que se deben ejecutar las cosas es que, cuando un consumidor llega a los pasos finales de finalización de la compra en un sistema como Magento, Magento emite una solicitud de autorización a la API de la puerta de enlace. Si la transacción es exitosa, la orden se acepta en el sistema y se almacena una ID única de la solicitud de autorización. A continuación, cuando el barco de bienes del consumidor, el propietario de una tienda utiliza el administrador de Magento para crear una factura . La creación de esta factura emite una solicitud de captura (utilizando una identificación de tienda devuelta desde la solicitud de autorización). Aquí es donde se emiten estas llamadas a métodos en Magento .

Sin embargo, las cosas se vuelven complicadas porque cada pasarela de pago interpreta estos conceptos de manera un poco diferente, y cada comerciante interpreta sus responsabilidades de "no capturar hasta que hayamos enviado" de manera diferente. Además del escenario descrito anteriormente, los módulos de pago tienen un valor de configuración del sistema conocido como Acción de pago . Esto se puede establecer en Autorizar solamente , que implementará el flujo descrito anteriormente. También se puede configurar como Autorizar y Capturar , que autorizará y capturará un pago cuando se realice el pedido. Se vuelve aún más confuso porque, aunque el método se llama Authorize and Capture, las versiones actuales de Magento solo emitirán la solicitud de captura cuando se establezca en este modo (al menos para Authorize.net), y Authorize.net dejará, internamente, las solicitudes de captura. en un estado autorizado pero no capturado la mayor parte del día. La forma en que Magento maneja los pedidos y los pagos y las facturas es un área de la base de código que cambia mucho de una versión a otra.

Entonces, la idea detrás del sistema de módulos de pago de Magento es protegerlo del Clúster F, que es la programación de la lógica de Gateway de pago. En su método de authorize , implemente una llamada a la API autorizada de su pasarela de pagos (o realice las verificaciones y la lógica que desee que ocurra en este punto). A este método se le pasa un objeto de pago y una cantidad. Si hace que solicite / ejecute su lógica y determine que no es válido por el motivo que sea, emite una excepción con

Mage::throwException(''...'');

Esto le dice a Magento que la autorización falló, y actuará en consecuencia (mostrar un mensaje de error, etc.). De lo contrario, establezca los miembros de datos en el objeto Pago y emita un

return $this;

Los miembros de datos son cosas que necesitará más tarde, al capturar el pago. Lo que nos lleva al método de capture de su módulo de pago. A este método también se le envía un objeto de pago y una cantidad. En este método, emite su solicitud de captura. El objeto de pago tendrá cc_trans_id miembro de datos cc_trans_id

$payment->getCcTransId()

que le permitirá emitir una captura contra su puerta de enlace. Este es uno de los miembros de datos que usted es responsable de guardar en authorize . De nuevo, si su código determina que la captura ha fallado, lanza una excepción. De lo contrario, return $this .

El módulo de pago authorize.net tiene buenos ejemplos de cómo se hace esto.

app/code/core/Mage/Paygate/Model/Authorizenet.php

Por ejemplo, considere esta parte del método de capture

public function capture(Varien_Object $payment, $amount) { if ($payment->getCcTransId()) { $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE); } else { $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE); } $payment->setAmount($amount); $request= $this->_buildRequest($payment); $result = $this->_postRequest($request); //...

Aquí el método de captura es verificar si el pago tiene un cc_trans_id . Según el resultado, establece anet_trans_type en:

self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE self::REQUEST_TYPE_AUTH_CAPTURE

Este valor luego es utilizado por el objeto de solicitud API para enviar una llamada API para cualquiera

  1. Captura de una transacción preautorizada
  2. Captura inmediata

¡Espero que ayude y buena suerte!

Estoy trabajando en la implementación de un nuevo módulo de pago para Magento y quiero entender el concepto central detrás de esta lógica. Sé que tengo que extenderme desde Mage_Payment_Model_Method_Abstract o cualquiera de sus clases para niños, pero mi problema es cuándo usar y cómo usar métodos de captura y autorización en mi modelo. Por ejemplo, si dividí todo el proceso en pasos como este:

  1. El usuario llega al carrito de compras y elige decir algún método de pago que sea la puerta de enlace.
  2. El sistema intercepta la solicitud, recopila todos los datos enviados y envía al usuario a la url de la puerta de enlace.
  3. El usuario realiza su pedido (o cancela) en el sitio de la puerta de enlace que envía información sobre él a mi tienda.
  4. Mi tienda hace algunas modificaciones más al pedido con los datos recibidos y guarda el pedido con el estado completado o cancelado.

¿Dónde en estos pasos tendré que usar métodos de autorización y captura? Agradecería si alguien pudiera explicarme qué significa autorizar y capturar.