Integração de Pagamentos com Storefront API
Documentação Geral: Integração de Pagamentos com Storefront API
Esta documentação descreve o fluxo necessário para implementar a funcionalidade de pagamentos em uma aplicação headless utilizando o Storefront API da Wake.
A principal premissa é que a aplicação cliente será responsável por construir a interface do usuário, mas deverá respeitar:
- Estrutura de dados retornada pela API
- Fluxo de chamadas
- Atributos HTML obrigatórios
Isso garante compatibilidade com os scripts de pagamento dos gateways.
Para exemplos de referência, utilize o repositório:
👉 wake-components
Pré-requisitos: Scripts Essenciais
Antes de iniciar o fluxo de pagamento, é fundamental garantir que os seguintes scripts estejam carregados na aplicação:
<script>
var Fbits = Fbits || {};
Fbits.Debug = { IsDebug: false };
</script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://static.fbits.net/j/jquery.mask.min.js"></script>
<script src="https://static.fbits.net/scripts/checkout/Fbits.Util.js"></script>
<script src="https://static.fbits.net/scripts/checkout/Fbits.Gateway.Framework.js"></script>
Fluxo Geral de Implementação
O processo de pagamento segue três etapas principais:
- Seleção e Renderização – a aplicação seleciona o método de pagamento, renderiza os formulários e carrega os scripts necessários.
- Atualização de Valores – caso múltiplos métodos de pagamento sejam utilizados, a aplicação deve recalcular valores e parcelamentos.
- Finalização da Compra – a aplicação coleta, formata e envia os dados para a API para completar o checkout.
Etapa 1: Seleção do Método de Pagamento e Renderização
1.1 Consultar Possibilidades de Combinação
Quando o usuário optar por combinar meios de pagamento (ex.: Pix + Cartão, ou Carteira de Créditos + Cartão), utilize a query abaixo para exibir as combinações possíveis:
query MultiplePaymentMethodsSelector($checkoutId: Uuid!, $selected: [String]) {
multiplePaymentMethodsSelector(
checkoutId: $checkoutId
selected: $selected
) {
selections {
displayName
optionId
selected
canBeSelected
balance
}
selectedPaymentMethod {
id
name
type
}
}
}
- O campo
selections
informa quais métodos podem ser combinados (canBeSelected = true
). - O campo
selected
indica quais opções foram enviadas no arrayselected
. - Quando uma combinação válida é encontrada, o campo
selectedPaymentMethod
retorna oid
do pagamento a ser selecionado pela mutation de seleção.
1.2 Executar a Mutation de seleção
Quando o usuário seleciona um método de pagamento (ex.: cartão de crédito, Pix, múltiplos cartões, ou combinação de pagamentos), utilize a mutation:
mutation CheckoutSelectPaymentMethod($checkoutId: Uuid!, $paymentMethodId: ID!, $customerAccessToken: String!) {
result: checkoutSelectPaymentMethod(
checkoutId: $checkoutId
paymentMethodId: $paymentMethodId
customerAccessToken: $customerAccessToken
) {
selectedPaymentMethods {
id
paymentMethodId
html
scripts
value
minInstallmentValue
installments { number total value adjustment }
selectedInstallment { number }
saveCard
suggestedCards { key name number brand }
}
total
}
}
1.2 Renderizar a Interface
Para cada método de pagamento retornado:
- Crie um container principal com
data-payment-transaction-id="{{payment.id}}"
. - Adicione campos do formulário (“fake form”) para dados do cartão (número, nome, validade, CVV).
- Preencha o campo de valor (
payment.value
) e renderize as opções de parcelamento (payment.installments
). - Injete o HTML retornado no campo
html
(contém inputs e tokens do gateway). - Carregue dinamicamente os scripts listados em
payment.scripts
. - Após o carregamento, execute
Fbits.Gateway.ExecuteLoadedCallbacks()
. - Inicialize bibliotecas de UI, como InitializeJpCardLibrary(isMultiPayment) para aplicar máscara e validar inputs de cartão.
Etapa 2: Atualização de Valores (Múltiplos Métodos)
Quando múltiplos métodos de pagamento forem usados (ex.: dois cartões de crédito), os valores devem ser recalculados pela API.
2.1 Mutation de Atualização
mutation CheckoutChangeMultiPaymentValues($checkoutId: Uuid!, $payments: [MultiPaymentValueInput!]!) {
checkout: checkoutChangeMultiPaymentValues(
checkoutId: $checkoutId
payments: $payments
) {
selectedPaymentMethods {
id
value
installments { number total value adjustment }
selectedInstallment { number }
}
}
}
2.2 Considerações
- Capture a alteração de valor no campo do pagamento (ex.: input do primeiro cartão).
- Envie apenas os inputs habilitados para a API (ex.: se houver 2 pagamentos, somente 1 input deve estar habilitado).
- Atualize os valores e parcelamentos exibidos conforme a resposta da mutation.
Exemplo prático: em um fluxo com 2 cartões, ao alterar o valor do primeiro, o segundo é automaticamente ajustado pela API.
Etapa 3: Finalização da Compra
3.1 Executar Callbacks do Gateway
Antes de enviar os dados, execute os callbacks de validação e pagamento:
const validateResult = await Fbits.Gateway.ExecuteValidateCallbacks();
if (!validateResult.every(item => item === true)) {
// Mostra erro de validação
return;
}
await Fbits.Gateway.ExecutePayCallbacks();
3.2 Coletar e Formatar os Dados
- Crie um array com todos os pagamentos exibidos.
- Cada item deve conter:
paymentId
: do atributodata-payment-transaction-id.
paymentData
: query string com inputs do formulário + tokens gerados pelo gateway.
Exemplo de estrutura:
[
{
"paymentId": "d39a3b...",
"paymentData": "name=...&cardToken=tk_123..."
},
{
"paymentId": "e45b1c...",
"paymentData": "name=...&cardToken=tk_456..."
}
]
- Converta o array em JSON (
JSON.stringify
). - Codifique em Base64 (
btoa
).
3.3 Enviar para a API
Mutation de finalização:
mutation checkoutComplete($checkoutId: Uuid!, $paymentData: String!) {
data: checkoutComplete(checkoutId: $checkoutId, paymentData: $paymentData) {
completed
orders {
orderId
totalValue
}
}
}
Se bem-sucedido, redirecione o usuário para a página de confirmação do pedido.
Considerações Finais
- Este fluxo é genérico e funciona para qualquer cliente que deseje integrar pagamentos via Wake de forma headless.
- Para múltiplos métodos de pagamento, adapte conforme a necessidade (exemplo: 2 cartões, cartão + Pix, etc.).
- Sempre utilize o repositório wake-components como referência prática para a implementação.
Updated 1 day ago