Ho usato una nuova installazione per quanto segue usando Magento2 CE 2.2.0-dev, e ho lasciato anche il tema predefinito "Luma".
Per quanto riguarda i metodi di pagamento esterni (gateway) come MiGS , Braintree , PayPal e altri, Magento supporta questi gateway immediatamente , ma NON fornisce API per loro che è possibile utilizzare insieme ad altre API "Checkout".
Quindi, se stai pianificando di creare un'app / pagina di checkout usando le API di Magento, dovrai integrarti manualmente con questi servizi usando il loro SDK / API, per fortuna, puoi imparare molto controllando come Magento si integra con questi servizi nella build -in integrazioni.
Per capirlo, ho dovuto configurare Braintree poiché è il più semplice:
- Crea un account sandbox su https://www.braintreepayments.com/sandbox
- Accedi all'area di amministrazione di Magento.
- Negozi> Configurazione> Vendite> Metodi di pagamento> Braintree> Configura.
- Assicurati che "Ambiente" sia "Sandbox" e inserisci "ID commerciante", "Chiave pubblica" e "Chiave privata".
- Salva config.
- Potrebbe essere necessario reindicizzare e / o aggiornare la cache.
Dopo aver aggiunto un prodotto al carrello e procedendo al pagamento, nell'ultimo passaggio, scegli il metodo di pagamento Braintree, quindi dopo aver fatto clic sul pulsante "Effettua ordine", noterai le seguenti richieste AJAX:
- 2 richieste all'API di Braintree per convalidare la carta, eseguire la transazione e rispondere con lo stato della transazione.
- Una richiesta all'API di Magento
guest-carts/cartId/payment-information
con il solito corpo come spiegato nella documentazione dell'API di Magento.
Successivamente il processo continua come previsto con il reindirizzamento alla pagina di successo quando l'ultima richiesta risponde in JSON contenente l'ordine entity_id
Ciò conferma che le chiamate a servizi esterni -Braintree nel nostro esempio- vengono eseguite dalla pagina di checkout NON da Magento internamente, quindi dovremo fare lo stesso se vogliamo sviluppare la nostra pagina / app di checkout.
Per quanto riguarda il controllo dello stato dell'ordine, ho scavato più a fondo e ho scoperto che l'utilizzo di metodi di pagamento come MiGS, Braintree o PayPal, ha portato a un ordine con stato processing
anziché al solito pending
, sospettavo che si tratti di una configurazione del metodo di pagamento o di un osservatore , ma sembrava essere una configurazione, qui ci sono più dettagli.
Classe: Magento \ Vendite \ Modello \ Ordine \ Pagamento
Metodo: Place ()
Esiste un condizionale che controlla se Initialization
è richiesto per il metodo if ($methodInstance->isInitializeNeeded())
, in tal caso, initialize()
viene eseguito un metodo che si definisce e consente di specificare sia state
e status
.