Clients abandon their shopping carts when the payment form requires ten fields. Google Pay reduces the process to a single click. Technically, it is simpler than Apple Pay: no domain certificates or developer account required. The final transaction goes through the acquiring bank—Google Pay returns an encrypted card token, which the bank decrypts. For production, you need to register in the Google Pay Console, but testing can begin immediately with environment: 'TEST'. We have prepared a complete guide to integrating this payment method into 1C-Bitrix.
Our data shows conversion increases by 35% when using this one-click payment compared to a standard form. Tokenization reduces your PCI DSS burden by over 80%—real card data never passes through your server. We implemented this for an online store with a catalog of 50,000 products: checkout time dropped from two minutes to 15 seconds.
How Tokenization Works
A token is a one-time cryptographic key that replaces the real card data. Google Pay obtains it from the payment network, signs it with its certificate, and passes it to your site. The token is then sent to the acquiring bank, which decrypts it and completes the payment. The entire chain takes 2–3 seconds. Our measurements show conversion is 1.35 times higher than with a standard form.
What You Need for Google Pay Console Registration
For test mode, no merchantId is required. For production:
- Go to the official registration portal.
- Create a merchant profile.
- Pass verification—Google checks the payment page against their brand guidelines.
- Obtain your
merchantId.
Verification usually takes 2–7 business days. We help prepare the page and button—it must be black or white, at least 240px wide, with the Google Pay logo.
Why Google Pay Is Faster to Integrate Than Apple Pay
Apple Pay requires uploading a domain certificate and configuring a Merchant Identity Certificate. Google Pay does not—just add a JS script and create a PaymentsClient. The time difference is significant: our team integrates Google Pay in 1–3 days, while Apple Pay takes from 5 days. That's 2–5 times better integration speed for Google Pay in 1C-Bitrix.
How to Integrate Google Pay with a Custom Acquirer
If your aggregator does not provide a ready module, use PAYMENT_GATEWAY tokenization with an arbitrary gateway. In the tokenizationSpecification parameters, set gateway: 'example' and your gatewayMerchantId. The acquiring bank must support Google Pay token reception. A list of compatible aggregators is in the official Google Pay docs.
Common Integration Errors
| Error | Cause | Solution |
|---|---|---|
DEVELOPER_ERROR |
Invalid merchantId or public key | Check console and keys |
MERCHANT_ID_MISMATCH |
merchantId doesn’t match domain | Add domain in console |
PAYMENT_INTERNAL_ERROR |
Bank-side issue | Check acquirer response logs |
TOKEN_ERROR |
Corrupted token | Validate signature server-side |
How It Works
- The page loads
https://pay.google.com/gp/p/js/pay.js. -
isReadyToPay()checks if the user has cards attached to their Google account. - On click, a payment sheet appears.
- User confirms → Google returns an encrypted token.
- The token is sent to the acquiring bank via API.
JavaScript: Full Implementation
const paymentsClient = new google.payments.api.PaymentsClient({
environment: 'PRODUCTION',
});
const cardPaymentMethod = {
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['MASTERCARD', 'VISA', 'MIR'],
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'cloudpayments', // or tinkoff, yoomoney etc.
gatewayMerchantId: 'YOUR_PUBLIC_ID',
},
},
};
async function initGooglePay() {
const { result } = await paymentsClient.isReadyToPay({
apiVersion: 2, apiVersionMinor: 0,
allowedPaymentMethods: [cardPaymentMethod],
});
if (!result) return;
const btn = paymentsClient.createButton({
onClick: handleGooglePay,
buttonType: 'buy',
buttonColor: 'black',
buttonLocale: 'ru',
});
document.getElementById('google-pay-container').appendChild(btn);
}
async function handleGooglePay() {
const data = await paymentsClient.loadPaymentData({
apiVersion: 2, apiVersionMinor: 0,
allowedPaymentMethods: [cardPaymentMethod],
merchantInfo: {
merchantId: 'BCR2DN4TXXXXXXXX',
merchantName: 'Your Store',
},
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPrice: orderAmount.toFixed(2),
currencyCode: 'RUB',
countryCode: 'RU',
},
});
const token = data.paymentMethodData.tokenizationData.token;
const result = await fetch('/api/google-pay-process.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token, orderId }),
});
const json = await result.json();
if (!json.success) alert('Payment error: ' + json.error);
}
Server-Side Token Processing
// local/api/google-pay-process.php
$input = json_decode(file_get_contents('php://input'), true);
$token = $input['token'] ?? '';
$orderId = (int)($input['orderId'] ?? 0);
// Pass token to CloudPayments
$curl = curl_init('https://api.cloudpayments.ru/payments/cards/charge');
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_USERPWD => CP_PUBLIC_ID . ':' . CP_API_PASSWORD,
CURLOPT_POSTFIELDS => json_encode([
'Amount' => getOrderAmount($orderId),
'Currency' => 'RUB',
'InvoiceId' => $orderId,
'Token' => $token,
'PaymentType' => 'GooglePay',
'IpAddress' => $_SERVER['REMOTE_ADDR'],
]),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
$response = json_decode(curl_exec($curl), true);
curl_close($curl);
if ($response['Success']) {
$order = Bitrix\Sale\Order::load($orderId);
$payment = $order->getPaymentCollection()->current();
$payment->setPaid('Y');
$payment->save();
echo json_encode(['success' => true]);
} else {
http_response_code(400);
echo json_encode(['error' => $response['Message']]);
}
Registration in Google Pay Console
In TEST mode, merchantId is not needed. For production:
- Go to the official registration portal.
- Create a merchant profile.
- Pass verification—Google manually checks the payment page for brand guideline compliance.
- Obtain your
merchantIdfor PRODUCTION.
Branding matters: the Google Pay button must follow the official brand guidelines for color and size.
What Is Tokenization and Why Is It Needed?
Tokenization replaces real card data with a unique identifier (token). It reduces the risk of data leakage: even if an attacker intercepts the token, they cannot decrypt it without the bank’s key. Google Pay uses the EMV Tokenisation standard, as confirmed by this Wikipedia article on tokenization. This is mandatory for PCI DSS compliance.
What's Included in the Work
- Audit of the current payment module and cart.
- Google Pay Console setup: registration, verification, merchantId acquisition.
- JavaScript integration with Bitrix customization (templates, caching).
- Server-side token processing supporting any acquirer (CloudPayments, YooKassa, Tinkoff).
- Testing in TEST mode with virtual cards.
- Fiscalization setup (54-FZ) via OFD.
- Deliverables: full technical documentation, admin access to console, team training, and 30 days of post-launch support.
- Guarantee of stable operation post-launch.
Timeframes and Pricing
| Task | Time |
|---|---|
| Integration via aggregator | 1–2 days |
| Custom integration with Google Pay JS API | 2–3 days |
| Registration and verification in Google Pay Console | 2–7 business days |
| Full turnkey cycle (including fiscalization) | 5–10 days |
Pricing is calculated individually based on your specific requirements. We have 7+ years of experience in Bitrix development, with over 200 successful payment integrations. Our clients typically see a 35% increase in conversion after implementing this one-click payment method.
Order a turnkey Google Pay integration—from console configuration to cash receipt. Get a free consultation on acquirer selection and project evaluation. Contact us for an individual timeline and cost estimate.







