Flujo de pedidos de la API Magento2 Rest

13

Estoy haciendo llamadas a la API REST al sitio web de magento para realizar pedidos. A continuación se muestra la secuencia de mis llamadas.

  1. Crea un carrito rest/V1/guest-carts/
  2. Consigue el carrito rest/V1/guest-carts/bae0af147b83f1561f66cc4e3c97916e
  3. Agregar productos al carrito rest/V1/guest-carts/24/items
  4. Agregue información de facturación, establezca el método de pago y realice el pedido rest/V1/guest-carts/24/payment-information

En esta secuencia, el pedido obtiene el pedido con el estado de pedido "pendiente". Me pregunto cómo se captura el pago a través de la API si hay alguna pasarela de pago (por ejemplo, PayPal) para procesar el pago y generar la factura.

¿Falta alguna API en el flujo anterior para capturar pagos?

blakcaps
fuente

Respuestas:

11

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:

  1. Cree una cuenta de sandbox en https://www.braintreepayments.com/sandbox
  2. Acceda al área de administración de Magento.
  3. Tiendas> Configuración> Ventas> Métodos de pago> Braintree> Configurar.
  4. Asegúrese de que "Entorno" sea "Sandbox" e ingrese "ID de comerciante", "Clave pública" y "Clave privada".
  5. Guardar configuración
  6. 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:

  1. 2 solicitudes a Braintree API para validar la tarjeta, realizar la transacción y responde con el estado de la transacción.
  2. Una solicitud a la API de Magento guest-carts/cartId/payment-informationcon 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

ingrese la descripción de la imagen aquí

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 processinglugar 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 Initializationes 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 statey status.

Mahmoud Tantawy
fuente
se puede compartir la carga útil para la API de pago en la información
blakcaps
1
{"cartId": "a98697cba964d6ba0d3b64d78a31df33", "billingAddress": {"countryId": "EG", "regionId": null, "region": "," street ": [" street "," "]," company ":" mi empresa "," teléfono ":" 12346987 "," código postal ":" 12345 "," ciudad ":" ciudad "," nombre ":" f nombre "," apellido ":" l nombre "," saveInAddressBook ": null}," paymentMethod ": {" method ":" braintree "," adicionales_datos ": {" payment_method_nonce ":" ef27df81-7c29-4a74-9049-15de33f1f49f "}}," email ":" email @ ejemplo .com "}
Mahmoud Tantawy
Gracias por la carga útil. Me pregunto cómo generar "payment_method_nonce".
blakcaps
Realmente no lo sé, pero creo que al inspeccionar las solicitudes de ida y vuelta, se puede descubrir fácilmente nonce, si realmente funciona como nonce.
Mahmoud Tantawy
1
Braintree parece fácil de integrar a través de la API REST. Pero, ¿cómo integrar la pasarela de pago de redirección externa como Papal o Ingenico?
Franck Garnier