- Как добавить Google Pay в Flutter-приложение: пошаговое руководство для реального запуска
- Почему Google Pay, а не что-то другое?
- Что тебе нужно, чтобы начать
- Шаг 1: Добавь зависимости в pubspec.yaml
- Шаг 2: Настрой Android
- Шаг 3: Получи merchantId и настрой Google Pay
- Шаг 4: Запусти Google Pay и обработай ответ
- Сравнение шлюзов: что выбрать
- Что выбрать в зависимости от ситуации
- Частые ошибки (и как их избежать)
- Как лучше сделать — практические рекомендации
- Итог: что делать прямо сейчас
Как добавить Google Pay в Flutter-приложение: пошаговое руководство для реального запуска
Ты хочешь, чтобы пользователи твоего приложения могли платить одним касанием — без ввода карты, без логина, без лишних шагов. Google Pay — идеальный инструмент для этого. Но когда ты впервые лезешь в документацию Google, всё выглядит как каша из терминов: PaymentMethodToken, Gateway, MerchantInfo, Environment… И ты начинаешь сомневаться: а стоит ли это того?
Да, стоит. И я покажу, как это сделать без лишней головной боли — как делают те, кто уже запустил оплату в реальных приложениях. Не теория, не копипаст с StackOverflow, а рабочий алгоритм, проверенный на практике.
Почему Google Pay, а не что-то другое?
Ты можешь подумать: «А зачем мне Google Pay, если есть Apple Pay и Stripe?»
Ответ прост: если твои пользователи — на Android, и ты хочешь, чтобы они платили сразу, без прокачки карты в приложении — Google Pay это твой лучший выбор. Он уже встроен в Android 6+, работает с большинством банков, и пользователь не вводит ничего вручную. Это не просто удобно — это снижает отказы на 30–50% по сравнению с формами ввода карты.
Но есть нюанс: Google Pay не работает сам по себе. Он — это просто способ передать данные карты от пользователя к твоему платежному шлюзу. То есть тебе всё равно нужен платёжный провайдер: Stripe, Adyen, PayPal, Square, или локальный провайдер вроде СБП или Яндекс.Кассы.
Что тебе нужно, чтобы начать
Перед тем как писать код — собери три вещи:
- Аккаунт Google Pay для разработчиков — зарегистрируйся на Google Pay Business Console. Там ты получишь
merchantIdиmerchantName. Без них — ничего не заработает. - Платёжный шлюз — выбери один, который поддерживает Google Pay через
PaymentMethodToken. Stripe — самый простой для старта. Adyen — если уже используешь его. СБП — если твоя аудитория в России и СНГ. - Сертификат SSL — твой сервер должен быть доступен по HTTPS. Без этого Google Pay просто откажется работать.
Если у тебя нет шлюза — начни с Stripe. Он даст тебе тестовый ключ за 5 минут, и ты сможешь всё протестировать без денег.
Шаг 1: Добавь зависимости в pubspec.yaml
В твой pubspec.yaml добавь:
dependencies:
flutter:
sdk: flutter
google_pay: ^4.0.0
http: ^1.1.0
Запусти flutter pub get. Не используй старые версии — в версиях ниже 4.0.0 есть баги с токенизацией на Android 12+.
Шаг 2: Настрой Android
Открой android/app/src/main/AndroidManifest.xml и добавь:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
...
android:networkSecurityConfig="@xml/network_security_config">
Создай папку android/app/src/main/res/xml и положи туда файл network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config> Это нужно, чтобы твой app мог безопасно общаться с Google и твоим шлюзом. Без этого — ошибка Network security configuration на Android 9+.
Шаг 3: Получи merchantId и настрой Google Pay
В Google Pay Business Console ты получишь:
merchantId— например,12345678901234567890merchantName— например,MyApp Store
В коде ты будешь использовать их так:
import 'package:google_pay/google_pay.dart';
final googlePay = GooglePay(
merchantId: '12345678901234567890',
merchantName: 'MyApp Store',
environment: GooglePayEnvironment.test, // Для теста — test, для продакшена — production
);
final paymentDataRequest = PaymentDataRequest(
transactionInfo: TransactionInfo(
totalPriceStatus: 'FINAL',
totalPrice: '19.99',
currencyCode: 'USD',
),
paymentMethodTypes: ['CARD'],
cardRequirements: CardRequirements(
allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMERICAN_EXPRESS'],
allowedCardAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
),
billingAddressRequired: true,
billingAddressFormat: BillingAddressFormat.full,
);
Обрати внимание на environment: GooglePayEnvironment.test. Всегда тестируй в тестовом режиме. В продакшене ты не сможешь отменить транзакцию, а тестовый режим позволяет делать это сколько угодно раз.
Шаг 4: Запусти Google Pay и обработай ответ
Теперь добавь кнопку в интерфейс:
ElevatedButton(
onPressed: () async {
try {
final paymentData = await googlePay.requestPayment(paymentDataRequest);
final token = paymentData.paymentData?.paymentMethodData?.tokenizationData?.token;
if (token != null) {
// Отправь токен на свой сервер
final response = await http.post(
Uri.parse('https://yourserver.com/payment'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'paymentMethodToken': token,
'amount': '19.99',
'currency': 'USD',
}),
);
if (response.statusCode == 200) {
// Успешно — покажи сообщение
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Оплата прошла!')),
);
} else {
// Ошибка сервера — покажи пользователю
showErrorMessage('Ошибка оплаты. Попробуйте позже.');
}
}
} catch (e) {
// Пользователь отменил или не поддерживает Google Pay
if (e is GooglePayException) {
showErrorMessage('Google Pay не доступен на этом устройстве.');
} else {
showErrorMessage('Ошибка: ${e.toString()}');
}
}
},
child: Text('Оплатить Google Pay'),
) Ты не обрабатываешь карту напрямую — ты отправляешь токен на сервер. Это безопасно. Сервер твоего шлюза (например, Stripe) получит токен, расшифрует его, получит реальные данные карты и выполнит платёж. Ты даже не видишь номер карты — это хорошо.
Сравнение шлюзов: что выбрать
Вот как выглядят популярные варианты:
| Шлюз | Поддержка Google Pay | Сложность интеграции | Комиссия | Лучше подходит для |
|---|---|---|---|---|
| Stripe | Да, отлично | Очень низкая | 2.9% + $0.30 | Стартапы, международные проекты |
| Adyen | Да, глубокая | Средняя | От 1.4% (по договору) | Крупные компании, много стран |
| PayPal | Да, но через PayPal Button | Средняя | 2.9% + $0.30 | Если пользователи уже используют PayPal |
| СБП (Россия) | Частично — через QR | Высокая | 0.1–0.5% | Локальные приложения в РФ |
| Яндекс.Касса | Да, через API | Средняя | 2.5% | Приложения с русскоязычной аудиторией |
Если ты только начинаешь — выбирай Stripe. Он даст тебе всё: тестовый режим, документацию на русском, примеры кода под Flutter, и поддержку 24/7. Другие шлюзы — если у тебя уже есть договор с ними или специфические требования (например, СБП для российского рынка).
Что выбрать в зависимости от ситуации
- Ты в России, твоя аудитория — 90% русскоязычная → Используй Яндекс.Кассу или СБП. Google Pay там работает, но не так популярен, как в Европе. СБП — дешевле, но требует QR-кода или номера телефона.
- Ты делаешь приложение для США, Европы, Канады → Google Pay + Stripe — идеальный дуэт. Уже 70% пользователей Android используют Google Pay как основной способ оплаты.
- Ты запускаешь MVP и не хочешь тратить время на юридические вопросы → Stripe. Он сам решает вопросы PCI-DSS, 3D Secure, и возвращает тебе токен — ты не хранить данные карты.
- Ты уже используешь Adyen для веба → Делай то же самое и в приложении. Единая система — меньше ошибок.
Частые ошибки (и как их избежать)
- Тестируешь в production — Google Pay откажет, если твой сервер не имеет сертификата SSL, или если ты используешь тестовый merchantId в продакшене. Всегда сначала тестируй в
GooglePayEnvironment.test. - Не проверяешь поддержку Google Pay на устройстве — не на всех Android-устройствах он есть. Добавь проверку:
final isAvailable = await googlePay.isAvailable(); if (!isAvailable) { showErrorMessage('Google Pay не поддерживается на этом устройстве.'); return; } - Отправляешь токен без проверки — токен может быть пустым или повреждённым. Всегда проверяй:
if (token == null || token.isEmpty) { showErrorMessage('Ошибка получения токена. Попробуйте снова.'); return; } - Игнорируешь валюту — если ты указал
currencyCode: 'USD', а пользователь в России — он может получить ошибку. Убедись, что твой шлюз поддерживает валюту пользователя. Лучше использоватьcurrencyCodeиз локали устройства. - Не обрабатываешь отмену — пользователь может нажать «Назад» или закрыть окно Google Pay. Ты должен ловить исключение
GooglePayExceptionи показывать понятное сообщение: «Оплата отменена» — не «Ошибка».
Как лучше сделать — практические рекомендации
- Покажи Google Pay как первый вариант — если пользователь на Android, вынеси кнопку Google Pay на первое место. Это увеличит конверсию.
- Используй одинаковые суммы — если в приложении цена 19.99, то в Google Pay — тоже19.99. Никаких скрытых сборов. Google Pay откажется, если сумма не совпадает с тем, что видит пользователь.
- Проверяй на реальных устройствах — эмуляторы часто не проходят проверку Google Pay. Тестируй на реальном Android-телефоне с установленным Google Play Services и привязанной картой.
- Не забудь про логи — добавь логирование ошибок. Особенно:
isAvailable(),requestPayment(), и ответ от сервера. Это спасёт тебя, когда пользователь скажет: «Не работает» — и ты не поймёшь почему. - Добавь fallback — если Google Pay не доступен — покажи кнопку «Оплатить картой». Не оставляй пользователя без выбора.
Итог: что делать прямо сейчас
Если ты хочешь добавить Google Pay в своё Flutter-приложение — сделай это по шагам:
- Зарегистрируйся в Google Pay Business Console и получи
merchantId. - Выбери шлюз — Stripe, если ты новичок. У него есть готовые инструкции для Flutter.
- Добавь
google_pay: ^4.0.0вpubspec.yaml. - Настрой AndroidManifest.xml и network_security_config.xml — не пропускай это.
- Напиши код запроса с
GooglePayEnvironment.test. - Протестируй на реальном телефоне с привязанной картой.
- После успешного теста — переключись на
productionи запусти.
Всё это займёт у тебя 3–5 часов, если ты знаешь Flutter. Не больше. И это не «надо», а «стоит». Потому что пользователь, который платит через Google Pay, в 2 раза чаще возвращается, чем тот, кто вводит карту вручную.
Ты не должен быть экспертом по платежам. Ты должен быть экспертом по своему приложению. Google Pay — это инструмент. Используй его правильно — и он будет работать на тебя.
Информация в этой статье носит ознакомительный характер. Оплата через мобильные приложения связана с финансовыми рисками. Перед запуском оплаты проконсультируйся с юристом и финансовым специалистом, чтобы убедиться, что твои действия соответствуют законодательству страны, в которой ты работаешь.



