Інтеграція 1С-Бітрікс з платіжною системою Google Pay
Google Pay — спосіб швидкої оплати через браузер Chrome та Android-пристрої без введення даних картки. Як і Apple Pay, це не самостійна платіжна система, а інтерфейс токенізації картки поверх існуючого еквайрингу. Відмінність від Apple Pay: працює не лише в мобільному додатку, але й у Chrome на десктопі — якщо користувач зберіг картку в акаунті Google. Охоплення аудиторії ширше, реалізація через Google Pay API дещо простіша, ніж у Apple.
Принцип роботи
Google Pay API надає зашифрований платіжний токен (Google Pay token), який потрібно передати в процесинг еквайрера. Схема:
- JS-бібліотека Google Pay (
pay.google.com/gp/p/js/pay.js) завантажується на сторінці - Покупець натискає «Оплатити через Google Pay»
- Браузер показує нативний діалог підтвердження з прив'язаною карткою
- Google Pay повертає зашифрований токен
- Магазин передає токен в еквайринг (ЮКаса, Тінькофф, Сбер, Stripe)
Ініціалізація Google Pay API
У шаблоні сторінки оплати або в JS-файлі кастомного компонента:
const googlePayConfig = {
environment: 'PRODUCTION', // 'TEST' для тестування
apiVersion: 2,
apiVersionMinor: 0,
};
const paymentsClient = new google.payments.api.PaymentsClient(googlePayConfig);
const allowedPaymentMethods = [{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['MASTERCARD', 'VISA', 'MIR'],
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'yookassa', // або 'tinkoff', 'sberbank' тощо
gatewayMerchantId: 'SHOP_ID', // ваш ID в еквайрингу
},
},
}];
// Перевіряємо готовність користувача до оплати
paymentsClient.isReadyToPay({
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods,
}).then(response => {
if (response.result) {
const button = paymentsClient.createButton({
onClick: processPayment,
buttonColor: 'default',
buttonType: 'pay',
});
document.getElementById('google-pay-container').appendChild(button);
}
});
Запит платежу
function processPayment() {
const paymentDataRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods,
merchantInfo: {
merchantId: 'BCR2DN4T...', // Google Merchant ID з Google Pay Console
merchantName: 'Мій магазин',
},
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPrice: orderTotal.toString(), // рядок, наприклад '1500.00'
currencyCode: 'RUB',
countryCode: 'RU',
},
};
paymentsClient.loadPaymentData(paymentDataRequest)
.then(paymentData => {
const token = paymentData.paymentMethodData.tokenizationData.token;
return fetch('/bitrix/tools/gpay_charge.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ token, orderId }),
});
})
.then(res => res.json())
.then(data => {
if (data.success) window.location.href = data.redirect;
})
.catch(err => console.error('Google Pay error', err));
}
Серверна обробка токена
// /bitrix/tools/gpay_charge.php
$input = json_decode(file_get_contents('php://input'), true);
$gpToken = $input['token']; // JSON-рядок або об'єкт
$orderId = (int)$input['orderId'];
// Для ЮКаси передаємо токен безпосередньо
$payment = $yookassaClient->createPayment([
'amount' => ['value' => getOrderAmount($orderId), 'currency' => 'RUB'],
'payment_method_data' => [
'type' => 'google_pay',
'payment_methodology_token' => is_string($gpToken) ? $gpToken : json_encode($gpToken),
],
'capture' => true,
'description' => 'Замовлення №' . $orderId,
], uniqid('', true));
$success = $payment->getStatus() === 'succeeded';
if ($success) {
$bitrixPayment->setPaid('Y');
$bitrixPayment->save();
}
header('Content-Type: application/json');
echo json_encode([
'success' => $success,
'redirect' => $success ? '/personal/order/detail/' . $orderId . '/' : null,
]);
Тестування
У режимі TEST Google Pay повертає фіксований тестовий токен без реальної картки. Для повноцінного тестування з реальним токеном необхідні:
- Google Merchant ID (реєструється в Google Pay & Wallet Console)
- Підтверджений домен
- Тестові картки з Google Pay Console → Test Cards
Обов'язково тестувати в Chrome на Android-пристрої — там поведінка діалогу відрізняється від десктопа.
Терміни
| Завдання | Термін |
|---|---|
| JS-інтеграція кнопки Google Pay | 0.5 дня |
| Серверна обробка токена через еквайринг | 0.5 дня |
| Реєстрація в Google Pay Console + тестування | 1 день |







