Pular para o conteúdo principal
Nesta página

Este guia aborda como integrar o Google Pay diretamente com a API da DEUNA. A integração direta oferece controle total sobre o fluxo de pagamento, tornando-a ideal para comerciantes que precisam de implementações personalizadas ou possuem sistemas de pagamento existentes. Esta integração suporta pagamentos únicos.

Google Pay com DEUNA#

A seguir está o processo padrão para uma compra do Google Pay com DEUNA:

  1. Obtenha os métodos de pagamento
  2. Inicialize o SDK da Web do Google Pay
  3. Compre com Google Pay

1. Obtenha os métodos de pagamento#

Recupere o ID da credencial do Google Pay e os parâmetros de configuração do SDK.

→ Consulte a referência da API Obter métodos de pagamento

Resposta

JSON
{
  "data": [
    {
      "allow_installments_plan": true,
      "credentials": {
        "external_merchant_id": "DEUNA_GOOGLE_MERCHANT_ID"
      },
      "enabled": true,
      "extra_params": {
        "allowed_auth_methods": [
          "PAN_ONLY",
          "CRYPTOGRAM_3DS"
        ],
        "allowed_card_networks": [
          "VISA",
          "MASTERCARD",
          "AMEX"
        ],
        "merchant_name": "Test DEUNA"
      },
      "id": "ef2319fe-f88d-4d8d-b4d1-e4fa08f18651",
      "method_type": "wallet",
      "payment_provider": "google_pay",
      "processor_name": "google_pay"
    }
  ]
}

2. Inicialize o SDK da Web do Google Pay#

Consulte a seguinte documentação do Google Pay para referência completa:

Importe o SDK JS do Google Pay

Adicione o seguinte script à sua página:

HTML
<script src="https://pay.google.com/gp/p/js/pay.js"></script>

Exemplo completo de integração

JavaScript
// 1. Check availability
const paymentsClient = new google.payments.api.PaymentsClient({
  environment: 'PRODUCTION' // or 'TEST' for sandbox
});

const isReadyToPayRequest = {
  apiVersion: 2,
  apiVersionMinor: 0,
  allowedPaymentMethods: [
    {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'], // from extra_params.allowed_auth_methods
        allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMEX'] // from extra_params.allowed_card_networks
      }
    }
  ]
};

paymentsClient.isReadyToPay(isReadyToPayRequest).then((response) => {
  if (!response.result) {
    // Google Pay not available — hide the button or show a fallback
  }
});

// 2. Build the payment data request (use values from Get Payment Methods endpoint)
const paymentDataRequest = {
  apiVersion: 2,
  apiVersionMinor: 0,
  allowedPaymentMethods: [
    {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
        allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMEX']
      },
      tokenizationSpecification: {
        type: 'PAYMENT_GATEWAY',
        parameters: {
          gateway: 'deuna',
          gatewayMerchantId: '{external_merchant_id}' // from credentials.external_merchant_id
        }
      }
    }
  ],
  merchantInfo: {
    merchantId: '{google-merchant-id}',
    merchantName: 'Test DEUNA' // from extra_params.merchant_name
  },
  transactionInfo: {
    countryCode: 'MX',
    currencyCode: 'MXN',
    totalPrice: '1.00',
    totalPriceStatus: 'FINAL'
  }
};

// 3. Load payment data on button click (must be inside a user gesture)
// The credential-id comes from the `id` field in the Get Payment Methods response
paymentsClient.loadPaymentData(paymentDataRequest).then((paymentData) => {
  // 4. Handle payment authorization
  // Extract the raw token string — send it as-is to DEUNA, without parsing or re-serializing
  const googlePayToken = paymentData.paymentMethodData.tokenizationData.token;

  // Use googlePayToken in step 3 — Create Card or Purchase V2
}).catch((err) => {
  console.error('Google Pay error:', err);
});

3. Compre com Google Pay#

Assim que o cliente autorizar o pagamento, loadPaymentData() resolve e entrega um token ECv2 criptografado via paymentData.paymentMethodData.tokenizationData.token. Este token deve ser enviado tal como está, sem qualquer modificação, para a DEUNA.

Você tem três opções dependendo do seu caso de uso:

3.1 Criar cartão

Utilize esta opção quando quiser guardar o cartão para compras futuras. O token de tokenizationData.token é enviado para o endpoint Create Card, que retorna um card_id que podem ser reutilizados em compras subsequentes.

→ Consulte a referência da API de criação de cartão

JSON
{
  "google_pay": {
    "paymentData": {
      "token": {
        "protocolVersion": "ECv2",
        "signature": "MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biHQS9nwiiNwOrr24RyPeHA0Q==",...
        "intermediateSigningKey": {
          "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFJeFRxyCw==\"}",...
          "signatures": [
            "MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQWpeNmIP+z+tCQHQxP0v"...
          ]
        },
        "signedMessage": "{\"tag\":\"jpGz1F1BVrKbRU9K8+7cZs=\",\"en:\"mKOoXwi8OavZ...\"}"...
      }
    }
  },
  "credential_source": "google_pay"
}

3.2 Purchase with Card ID

Utilize esta opção quando o cartão já tiver sido salvo através de Criar Cartão. Esta é uma solicitação de compra padrão V2 usando o card_id retornado pelo endpoint Create Card – não é necessário token do Google Pay.

→ Consulte a referência da API de compra V2

JSON
{
  "order_token": "{order-token}",
  "order_type": "DEUNA_CHECKOUT",
  "payer_info": {
    "email": "customer@example.com",
    "card_holder_dni": "12345678"
  },
  "payment_source": {
    "method_type": "credit_card",
    "card_info": {
      "card_id": "{deuna-card-id}"
    }
  }
}

3.3 Compra Direta

Use esta opção para pagamentos únicos onde você não precisa salvar o cartão. O token de tokenizationData.token é enviado diretamente na solicitação de compra.

→ Consulte a referência da API de compra V2

JSON
{
    "order_token": "{{order-token}}",
    "order_type": "DEUNA_CHECKOUT",
    "payer_info": {
        "email": "{{random_user}}@testuser.com",
        "card_holder_dni": "12345678"
    },
    "payment_source": {
        "method_type": "credit_card",
        "card_info": {
            "credential_source": "google_pay",
            "credential_source_config": {
                "type": "google_pay",
                "values": {
                    "system": "DIRECT",
                    "encrypted_data": "{\"signature\":\"MEUCI...Qb27X0\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEw...dwluLc74w\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1732...316\\\"}\",\"signatures\":[\"MEU...z+94I\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"06PdX...wYvlX4\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BNPW...4O2S6j0\\\\u003d\\\",\\\"tag\\\":\\\"m3Iv...KY8g\\\\u003d\\\"}\"}"
                }
            }
        }
    },
    "anti_fraud_info": {
        "device": {
            "id": "eyJPUEVOUEFZIjoiIiwiTUVSQ0FET1BBzAzLTk2NjRkYzE3MWQzYiJ9..."
        }
    }
}

Resposta:

JSON
{
  "order_type": "DEUNA_CHECKOUT",
  "order_token": "4598f493-de86-4fe0-b9fd-c4c6c9847e39",
  "order": {
    "order_id": "DEUNA_CHECKOUT_b6a5c0b6-3df9-4b3b-b778-7086c190062b",
    "currency": "MXN",
    "total_amount": 10000,
    "display_total_amount": "MXN 100,00",
    "status": "succedeed",
    "payment": {
      "data": {
        "status": "processed"
      }
    }
  }
}