Aller au contenu principal
Sur cette page

Ce guide explique comment intégrer Google Pay directement à l'API de DEUNA. L'intégration directe vous donne un contrôle total sur le flux de paiement, ce qui la rend idéale pour les commerçants qui ont besoin d'implémentations personnalisées ou qui disposent de systèmes de paiement existants. Cette intégration prend en charge les paiements uniques.

Google Pay avec DEUNA#

Voici le processus standard pour un achat Google Pay avec DEUNA :

  1. Obtenez les modes de paiement
  2. Initialiser le SDK Web Google Pay
  3. Acheter avec Google Pay

1. Obtenez les modes de paiement#

Récupérez l'identifiant d'identification Google Pay et les paramètres de configuration du SDK.

→ Voir la référence de l'API Obtenir les méthodes de paiement.

Renvoie la commande traitée avec son

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. Initialisez le SDK Web Google Pay#

Reportez-vous à la documentation Google Pay suivante pour obtenir la référence complète :

Importer le SDK Google Pay JS

Ajoutez le script suivant à votre page :

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

Exemple d'intégration complète

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. Achetez avec Google Pay#

Une fois que le client autorise le paiement, loadPaymentData() résout et fournit un jeton ECv2 chiffré via paymentData.paymentMethodData.tokenizationData.token. Ce token doit être envoyé tel quel, sans aucune modification, à DEUNA.

Vous disposez de trois options en fonction de votre cas d'utilisation :

3.1 Créer une carte

Utilisez cette option lorsque vous souhaitez enregistrer la carte pour de futurs achats. Le jeton de tokenizationData.token est envoyé au point de terminaison Create Card, qui renvoie un card_id qui pourra être réutilisé lors d’achats ultérieurs.

→ Voir la référence de l'API Créer une carte

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

Utilisez cette option lorsque la carte a déjà été enregistrée via Créer une carte. Il s'agit d'une demande d'achat standard V2 utilisant le card_id renvoyé par le point de terminaison Create Card – aucun jeton Google Pay n’est nécessaire.

→ Voir la référence de l'API Achat 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 Achat direct

Utilisez cette option pour les paiements uniques pour lesquels vous n'avez pas besoin de sauvegarder la carte. Le jeton de tokenizationData.token est envoyé directement dans la demande d'achat.

→ Voir la référence de l'API Achat 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..."
        }
    }
}

Réponse :

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"
      }
    }
  }
}