Eu usei uma nova instalação para o seguinte, usando o Magento2 CE 2.2.0-dev, e também deixei o tema "Luma" padrão.
Em relação aos métodos de pagamento externos (gateways), como MiGS , Braintree , PayPal e outros, o Magento suporta esses gateways , mas não fornece APIs para eles que você pode usar junto com outras APIs "Checkout".
Portanto, se você planeja criar um aplicativo / página de checkout usando as APIs do Magento, precisará integrar-se manualmente com esses serviços usando o SDK / API deles, felizmente, poderá aprender muito verificando como o Magento se integra a esses serviços em integrações.
Para entender isso, eu tive que configurar o Braintree, pois é o mais fácil:
- Crie uma conta sandbox em https://www.braintreepayments.com/sandbox
- Acesse a área de administração do Magento.
- Lojas> Configuração> Vendas> Métodos de Pagamento> Braintree> Configurar.
- Verifique se "Ambiente" é "Sandbox" e insira "ID do comerciante", "Chave pública" e "Chave privada".
- Salvar configuração.
- Pode ser necessário reindexar e / ou atualizar o cache.
Ao adicionar um produto ao carrinho e proceder ao checkout, na última etapa, escolha o método de pagamento Braintree e, depois de clicar no botão "Fazer pedido", você notará as seguintes solicitações AJAX:
- 2 solicitações à Braintree API para validar o cartão, executar a transação e responder com o status da transação.
- Uma solicitação para a API do Magento
guest-carts/cartId/payment-information
com o corpo usual, conforme explicado na documentação da API do Magento.
Depois disso, o processo continua conforme o esperado com o redirecionamento para a página de sucesso quando a última solicitação responde em JSON que contém o pedido entity_id
Isso confirma que as chamadas para serviços externos - Braintree em nosso exemplo - são realizadas pela página de checkout NÃO pelo Magento internamente, portanto, precisaremos fazer o mesmo para desenvolver nossa própria página / aplicativo de checkout.
Quanto ao controle do status do pedido, examinei mais profundamente e descobri que o uso de métodos de pagamento como MiGS, Braintree ou PayPal resultou em um pedido com status em processing
vez do usualpending
. Suspeitei que essa seja uma configuração do método de pagamento ou um observador , mas parecia ser uma configuração, veja mais detalhes.
Classe: Magento \ Vendas \ Modelo \ Pedido \ Pagamento
Método: Place ()
Existe uma condicional que verifica se Initialization
é necessário para o método if ($methodInstance->isInitializeNeeded())
, se for esse o caso, initialize()
é executado um método que você define e permite especificar ambos state
e status
.