Proceso del medio de pago en el checkout

Cuando añadimos un producto al carrito, se crea el quote. Cuando estás en la parte #shipping del checkout, y clicas el next, se lanza una petición a shipping-information. Por esta petición se crea el quote_address, que puede ser del tipo shipping o billing. Magento presupone que las 2 direcciones son las mismas. Es por eso que en la parte #payment del checkout Magento te pregunta si la dirección del billing va a ser la misma o no.

Cuando seleccionas un método de pago, se lanza una petición a set-payment-information. Por esta petición se crea el quote_payment. Si el usuario es Guest se usa el método SavePaymentInformation de la clase GuestPaymentInformationManagement. Si el usuario es Loggeado se usa el método SavePaymentInformation de la clase PaymentInformationManagement.

Ahora bien, si el usuario clica el botón "Place Order", se lanza una petición a payment-information. Por esta petición, se creará el order y el order_payment a partir del quote. Si el usuario es Guest, se usará el método SavePaymentInformationAndPlaceOrder de la clase GuestPaymentInformationManagement para crear el order y order payment Si el usuario está loggeado, se usaré el método SavePaymentInformationAndPlaceOrder de la clase PaymentInformationManagement para crear el order y order payment.

Si queremos añadir algún campo en la tabla quote_paymento o sales_order_payment usaremos el fichero db_schema.xml. Usaremos el fichero fieldset.xml (Recordar usar event) para copiar valor de unas tablas a otras. En este caso del quote* a order*- Usaremos el fichero extension_attributes para añadir propiedades adicionales a los Api data interfaces y así Magento poder guardar estos datos adicionales. Previamente tendremos que sacar datos de los extension attributes y añadirlos al objeto model del quote, quote_payment etc. Usaremos 2 ficheros de js para que envíe datos a la base de datos. Estos son place_order.js y el set-payment-information-extended.js. En estos ficheros , añadiremos valor del extension attributes . Creo que en los magento antiguos usaban el set-payment-information.

Obs: Para usar la tabla quote_payment podemos usar el código: quote->getPayment()