He usado una instalación nueva para lo siguiente usando Magento2 CE 2.2.0-dev, y también he dejado el tema predeterminado "Luma".
Con respecto a los métodos de pago externos (puertas de enlace) como MiGS , Braintree , PayPal y otros, Magento admite estas puertas de enlace de forma inmediata , pero NO proporciona API para ellos que pueda usar junto con otras API de "Pago".
Entonces, si planea construir una aplicación / página de pago usando las API de Magento, necesitará integrarse manualmente con estos servicios usando su SDK / API, afortunadamente, puede aprender mucho al verificar cómo se integra Magento con estos servicios -en integraciones.
Para entender esto, tuve que configurar Braintree ya que es lo más fácil:
- Cree una cuenta de sandbox en https://www.braintreepayments.com/sandbox
- Acceda al área de administración de Magento.
- Tiendas> Configuración> Ventas> Métodos de pago> Braintree> Configurar.
- Asegúrese de que "Entorno" sea "Sandbox" e ingrese "ID de comerciante", "Clave pública" y "Clave privada".
- Guardar configuración
- Es posible que deba reindexar y / o actualizar la memoria caché.
Al agregar un producto al carrito y proceder al pago, en el último paso, elija el método de pago Braintree, luego de hacer clic en el botón "Realizar pedido", notará las siguientes solicitudes de AJAX:
- 2 solicitudes a Braintree API para validar la tarjeta, realizar la transacción y responde con el estado de la transacción.
- Una solicitud a la API de Magento
guest-carts/cartId/payment-information
con el cuerpo habitual como se explica en la documentación de la API de Magento.
Después de eso, el proceso continúa como se esperaba con la redirección a la página de éxito cuando la última solicitud responde en JSON que contiene el pedido entity_id
Esto confirma que las llamadas a servicios externos -Braintree en nuestro ejemplo- son realizadas por la página de pago NO por Magento internamente, por lo que tendremos que hacer lo mismo si queremos desarrollar nuestra propia página / aplicación de pago.
En cuanto al control del estado del pedido, profundicé y descubrí que el uso de métodos de pago como MiGS, Braintree o PayPal, resultó en un pedido con estado en processing
lugar de lo habitual pending
, sospeché que se trataba de una configuración de método de pago o un observador , pero parecía ser una configuración, aquí hay más detalles.
Clase: Magento \ Sales \ Model \ Order \ Payment
Método: Place ()
Hay un condicional que verifica si Initialization
es necesario para el método if ($methodInstance->isInitializeNeeded())
, si ese es el caso, initialize()
se ejecuta un método que usted define y le permite especificar ambos state
y status
.