Passa al contenuto principale
In questa pagina

Questa guida copre come integrare Google Pay direttamente con l'API di DEUNA. L'integrazione diretta consente di controllare il flusso di pagamento, rendendolo ideale per i commercianti che hanno bisogno di implementazioni personalizzate o di sistemi di pagamento esistenti. Questa integrazione supporta i pagamenti a tempo parziale.

Google Pay con DEUNA#

Di seguito è il processo standard per un acquisto Google Pay con DEUNA:

  1. Ottieni i metodi di pagamento
  2. Inizializzare il Google Pay Web SDK
  3. Acquistare con Google Pay

1. Ottenere i metodi di pagamento#

Recuperare i parametri di configurazione di Google Pay e ID di configurazione SDK.

→ Vedi Ottieni i metodi di pagamento API di riferimento

Restituisce l’ordine elaborato con

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. Inizializzare il Google Pay Web SDK#

Per il riferimento completo, fare riferimento alla seguente documentazione di Google Pay:

Importare il Google Pay JS SDK

Aggiungi il seguente script alla tua pagina:

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

Esempio di integrazione completo

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. Acquistare con Google Pay#

Una volta che il cliente autorizza il pagamento, loadPaymentData() risolve e fornisce un token ECv2 crittografato tramite paymentData.paymentMethodData.tokenizationData.token. Questo token deve essere inviato come-è, senza alcuna modifica, a DEUNA.

Hai tre opzioni a seconda del caso di utilizzo:

3.1 Creare la carta

Utilizzare questa opzione quando si desidera salvare la carta per gli acquisti futuri. Il segno da tokenizationData.token viene inviato al punto finale Crea carta, che restituisce un card_id che può essere riutilizzato in acquisti successivi.

→ Vedere Creare la scheda API di riferimento

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

Utilizzare questa opzione quando la scheda è già stata salvata tramite Create Card. Questa è una richiesta standard di acquisto V2 utilizzando card_id restituito dal punto di vista della carta Creata — nessun token di Google Pay necessario.

→ Vedere Acquisto V2 API di riferimento

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 Acquisto diretto

Utilizzare questa opzione per i pagamenti di una volta in cui non è necessario salvare la carta. Il segno da tokenizationData.token viene inviato direttamente nella richiesta di acquisto.

→ Vedere Acquisto V2 API di riferimento

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

Risposta:

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