Google Pay tramite API diretta
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:
- Ottieni i metodi di pagamento
- Inizializzare il Google Pay Web SDK
- 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
{
"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:
- Google Pay Web SDK Panoramica
- Criptografia dei dati di pagamento (ECv2)
- Prova con i simboli del campione
Importare il Google Pay JS SDK
Aggiungi il seguente script alla tua pagina:
<script src="https://pay.google.com/gp/p/js/pay.js"></script>Esempio di integrazione completo
// 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
{
"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
{
"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
{
"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:
{
"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"
}
}
}
}