Google Pay
Google Account Setup
Before you begin the implementation, please also read Google Pay documentation on how to set up a Google account and create an initial request to the Google endpoint (e.g. via Javascript).
Note, that for security reasons, your integration must use the latest Google Pay API version 2.0, which includes the intermediateSigningKeyobject containing a key-value pair provided by Google. The Gateway ID 'fiservipg' needs to be included in the request as the parameter gateway.
| Element | Description |
|---|---|
gateway | Enter 'fiservipg' |
gatewayMerchantId | The IPG store ID which you received from the IPG boarding team |
merchantId | The merchant ID that identifies your store, which you received from Google |
Google Pay supports two card authentication methods:
| Authentication method | Description |
|---|---|
| PAN_ONLY | The payment data contains a card PAN and expiry. This may require 3-D Secure authentication depending on your setup and region. |
| CRYPTOGRAM_3DS | The payment data contains a network token and 3-D Secure cryptogram. If available, pass the cryptogram and ECI value in the payment request. |
Recommended Google Pay configuration:
"allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"]
Gateway Integration
To create a Google Pay payment, submit a primary transaction with one of the following request types:
| Use case | requestType |
|---|---|
| Sale | WalletSaleTransaction |
| Preauthorisation | WalletPreAuthTransaction |
Google Pay can be submitted in either encrypted or decrypted form.
Encrypted Google Pay
Use encryptedGooglePay when you want our gateway to process the encrypted Google Pay payload returned by Google Pay JavaScript.
The following JSON document represent an example request and response of an encrypted Google Pay payload:
{
"walletPaymentMethod":{
"encryptedGooglePay":{
"data":{
"encryptedMessage":"jlhEDaN0JXTxxxxxxxxxxxxxxxxxxg9J9r75yg==",
"ephemeralPublicKey":"BDBBVAe/C7BfSjxxxxxxxxxxxxxxxK6rdk0uBzqHmspxsI=",
"tag":"v2x7Ahxxxxxxxxxxec439oI="
},
"intermediateSigningKey":{
"signedKey":{
"keyValue":"MFkwEwYHKoZIzxxxxxxxxxxxxxxx+nBKsFX36h/afw5Vr4PWlbrA==",
"keyExpiration":"1734478642065"
},
"signatures":[
"MEUCIQCp3mxxxxxxxxxxxxxxxxxxxxy7Fd/m9BCrcjMPi8="
]
},
"signature":"MEUCIBmAOxvxxxxxxxxxxxxxxxxxx4eNMn2XEf0=",
"version":"ECv2"
},
"walletType":"EncryptedGooglePayWalletPaymentMethod"
},
"requestType":"WalletSaleTransaction",
"transactionAmount":{
"total":25,
"currency":"GBP",
"components":{
"subtotal":25
}
},
"storeId":"12xxxx01",
"transactionOrigin":"ECOM",
"order":{
"orderId":"PLxxxxxxx011",
"billing":{
"contact":{
},
"address":{
}
}
}
}
Decrypted Google Pay
Use decryptedGooglePay when your integration decrypts the Google Pay payload before submitting the payment request.
Required fields:
| Field | Required | Description |
|---|---|---|
accountNumber | Yes | Card PAN or tokenized card number from the decrypted Google Pay payload |
expiration | Yes | Expiry date in 'MMYYYY' format |
cardholderName | No | Cardholder name, if available |
brand | No | Card brand, if available |
cryptogram | Conditional | Send when Google Pay returns a 'CRYPTOGRAM_3DS' payload |
eciIndicator | Conditional | Send when available with the Google Pay cryptogram |
storedCredentials | No | Stored credential details, if the transaction is part of a stored credential use case |
Example with cryptogram:
{
"requestType": "WalletSaleTransaction",
"storeId": "123456789",
"transactionOrigin": "ECOM",
"transactionAmount": {
"total": 25.00,
"currency": "GBP",
"components": {
"subtotal": 25.00
}
},
"walletPaymentMethod": {
"walletType": "DecryptedGooglePayWalletPaymentMethod",
"decryptedGooglePay": {
"accountNumber": "4111111111111111",
"expiration": "012030",
"cardholderName": "John Doe",
"brand": "VISA",
"cryptogram": "BB81SRsADvooHCUcDogjMAACAAA=",
"eciIndicator": "05"
}
}
}
Example for PAN-only payload:
{
"requestType": "WalletSaleTransaction",
"storeId": "123456789",
"transactionOrigin": "ECOM",
"transactionAmount": {
"total": 25.00,
"currency": "GBP",
"components": {
"subtotal": 25.00
}
},
"walletPaymentMethod": {
"walletType": "DecryptedGooglePayWalletPaymentMethod",
"decryptedGooglePay": {
"accountNumber": "4111111111111111",
"expiration": "012030",
"cardholderName": "John Doe",
"brand": "VISA"
}
}
}
3-D Secure Handling
For 'CRYPTOGRAM_3DS' Google Pay payments, send the cryptogram and eciIndicator when they are available in the decrypted payload.
For 'PAN_ONLY' Google Pay payments, no cryptogram is available. These payments may require 3-D Secure authentication depending on your merchant configuration, region, and applicable SCA requirements.
If 3-D Secure authentication is required, include either authenticationRequest to initiate authentication or authenticationResult if authentication has already been completed.
Example PAN-only request with 3-D Secure authentication request:
{
"requestType": "WalletSaleTransaction",
"storeId": "123456789",
"transactionOrigin": "ECOM",
"transactionAmount": {
"total": 25.00,
"currency": "GBP",
"components": {
"subtotal": 25.00
}
},
"walletPaymentMethod": {
"walletType": "DecryptedGooglePayWalletPaymentMethod",
"decryptedGooglePay": {
"accountNumber": "4111111111111111",
"expiration": "012030",
"brand": "VISA"
}
},
"authenticationRequest": {
"authenticationType": "Secure3DAuthenticationRequest",
"termURL": "https://yourwebsite.example/acs/authresult",
"methodNotificationURL": "https://yourwebsite.example/acs/notifications",
"challengeIndicator": "01",
"challengeWindowSize": "05",
"authenticationIndicator": "01",
"skipTRA": false
}
}
Testing
Test both Google Pay authentication methods before going live:
| Scenario | Expected payload |
|---|---|
CRYPTOGRAM_3DS | Includes cryptogram and may include ECI |
PAN_ONLY | Includes PAN and expiry, but no cryptogram |
For PAN-only transactions, also test the 3-D Secure flow if your merchant setup requires authentication.
Updated 26 days ago