Интеграция 1С-Битрикс с платёжной системой Google Pay
Google Pay технически проще Apple Pay: не требует сертификатов домена и аккаунта разработчика для тестирования. Финальная транзакция проходит через банк-эквайер — Google Pay предоставляет зашифрованный токен карты, который банк расшифровывает на своей стороне. Для продакшна потребуется регистрация в Google Pay Console, но тестировать можно сразу с параметром environment: 'TEST'.
Принцип работы
- Страница загружает
https://pay.google.com/gp/p/js/pay.js -
isReadyToPay()проверяет наличие карт у пользователя в аккаунте Google - При клике отображается платёжный лист
- Пользователь подтверждает → Google возвращает зашифрованный токен
- Токен передаётся в банк-эквайер через API
JavaScript: полная реализация
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', // или tinkoff, yoomoney и др.
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: 'Ваш магазин',
},
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('Ошибка оплаты: ' + json.error);
}
Серверная обработка токена
// local/api/google-pay-process.php
$input = json_decode(file_get_contents('php://input'), true);
$token = $input['token'] ?? '';
$orderId = (int)($input['orderId'] ?? 0);
// Передаём токен в 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']]);
}
Регистрация в Google Pay Console
В TEST-режиме merchantId не нужен. Для продакшна:
- Перейти на pay.google.com/business/console
- Создать профиль продавца
- Пройти верификацию — Google вручную проверяет страницу оплаты на соответствие брендинг-гайдлайнам
- Получить
merchantIdдля PRODUCTION
Брендинг важен: кнопка Google Pay должна соответствовать официальным гайдлайнам по цвету и размеру.
Сроки
| Задача | Срок |
|---|---|
| Интеграция через агрегатор | 1–2 дня |
| Кастомная интеграция с Google Pay JS API | 2–3 дня |
| Регистрация и верификация в Google Pay Console | 2–7 рабочих дней |







