1. Wprowadzenie
Co utworzysz
Po ukończeniu tego ćwiczenia będziesz mieć działającą aplikację Flutter z zintegrowaną usługą Google Pay na Androida. Ten projekt pobiera token płatności, który może zostać wysłany do dostawcy usług płatniczych w celu przetworzenia.
Czego się nauczysz
- Instalowanie i konfigurowanie biblioteki Google Pay Flutter
- Wyświetlanie przycisku Google Pay i obsługa kliknięć
- Jak poprosić o token płatności w Google Pay
Czego potrzebujesz
- dowolny edytor tekstu do edytowania plików Dart;
- Środowisko programistyczne Fluttera skonfigurowane pod kątem Androida.
- W przypadku środowiska produkcyjnego potrzebujesz
merchantIdGoogle Pay. Rejestracja w Konsoli usług Google Pay i Portfela Google zajmuje tylko minutę, więc warto to zrobić od razu.
2. Tworzenie projektu Fluttera
Tworzenie plików projektu
- Utwórz nowy projekt Flutter o nazwie
googlepay_flutter.flutter create googlepay_flutter
- Zainstaluj bibliotekę Google Pay Flutter.
cd googlepay_flutter flutter pub add pay
- Otwórz plik
lib/main.dartw wybranym IDE i zastąp jego zawartość tym kodem:import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: PaySampleApp(), ); } } class PaySampleApp extends StatefulWidget { const PaySampleApp({super.key}); @override State<PaySampleApp> createState() => _PaySampleAppState(); } class _PaySampleAppState extends State<PaySampleApp> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Google Pay Codelab'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('Transaction info and errors will be logged to the console.'), ], ), ), ); } }
3. Konfigurowanie Google Pay
Żądanie płatności Google Pay wymaga obiektu żądania. Obiekt zdefiniowany tutaj jako _paymentItems zawiera minimalne wspólne ustawienia wszystkich żądań. W zależności od zgłoszenia zostaną dodane dodatkowe ustawienia, które omówimy w tym laboratorium.
- Dodaj stałe konfiguracji Google Pay do parametru
lib/main.dart:
import 'package:pay/pay.dart';
const _paymentItems = [
PaymentItem(
label: 'Total',
amount: '14.95',
status: PaymentItemStatus.final_price,
)
];
- Dodaj domyślną konfigurację płatności w formacie JSON do ścieżki
assets/google_pay_config.json:
{
"provider": "google_pay",
"data": {
"environment": "TEST",
"apiVersion": 2,
"apiVersionMinor": 0,
"allowedPaymentMethods": [
{
"type": "CARD",
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "example",
"gatewayMerchantId": "exampleGatewayMerchantId"
}
},
"parameters": {
"allowedCardNetworks": ["VISA", "MASTERCARD"],
"allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
"billingAddressRequired": true,
"billingAddressParameters": {
"format": "FULL",
"phoneNumberRequired": true
}
}
}
],
"merchantInfo": {
"merchantName": "Example Merchant Name"
},
"transactionInfo": {
"countryCode": "US",
"currencyCode": "USD"
}
}
}
Zasoby
- Dokumentacja API: dokumentacja obiektów żądań interfejsu Google Pay API
- Dokumentacja interfejsu API: więcej informacji o dozwolonych metodach autoryzacji, dozwolonych sieciach kart i specyfikacjach tokenizacji, w tym o prawidłowej wartości bramy, znajdziesz w
PaymentMethod.
4. Dodawanie przycisku Google Pay
Biblioteka pay zawiera natywny komponent przycisku Google Pay.
Zaktualizuj klasę _PaySampleAppState w pliku lib/main.dart za pomocą tego kodu:
class _PaySampleAppState extends State<PaySampleApp> {
late final Future<PaymentConfiguration> _gpayConfig;
void onGooglePayResult(paymentResult) {
// Send 'token' to your payment service provider (PSP)
print(paymentResult);
}
@override
void initState() {
super.initState();
_gpayConfig = PaymentConfiguration.fromAsset('google_pay_config.json');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Google Pay Codelab')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FutureBuilder<PaymentConfiguration>(
future: _gpayConfig,
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return const Center(child: CircularProgressIndicator());
}
if (snapshot.hasError || !snapshot.hasData) {
return const Text('Error loading Google Pay config');
}
return GooglePayButton(
paymentConfiguration: snapshot.data!,
onPaymentResult: onGooglePayResult,
paymentItems: _paymentItems,
height: 48,
type: GooglePayButtonType.buy,
theme: GooglePayButtonTheme.dark,
margin: const EdgeInsets.only(top: 15.0),
loadingIndicator: const Center(
child: CircularProgressIndicator(),
),
);
},
),
const Text('Transaction info and errors will be logged to the console.'),
],
),
),
);
}
}
Wyjaśnienie kodu
_paymentItemsopisuje transakcję, która powinna zostać przetworzona po kliknięciu tego przycisku.- Widżet
paymentConfigurationAssetwGooglePayButtonwczytuje konfigurację z plikuassets/google_pay_config.json. - Gdy naciśniesz
GooglePayButton, wywoływana jest funkcjaonGooglePayResult. Ta funkcja otrzymuje wynik płatności. - Gdy uzyskasz token płatności z odpowiedzi, wyślij go do bramy płatności w celu przetworzenia transakcji.
5. Wywoływanie płatności po kliknięciu
Kliknięcie ikony GooglePayButton otwiera arkusz Google Pay i zwraca wynik – nie jest wymagane osobne wywołanie „dokonaj płatności”. Dodaj moduły obsługi, aby rejestrować token, wyświetlać błędy i opcjonalnie rejestrować naciśnięcia przycisku.
- Dodaj lub zaktualizuj moduł obsługi wyników w sekcji
_PaySampleAppState:
void onGooglePayResult(dynamic paymentResult) {
try {
final token = paymentResult['paymentMethodData']['tokenizationData']['token'];
debugPrint('Google Pay payment token: $token');
} catch (e) {
debugPrint('Unexpected payment result: $e');
}
}
- Zaktualizuj
GooglePayButton, aby uwzględnić obsługę naciśnięć i błędów:
GooglePayButton(
paymentConfiguration: snapshot.data!,
paymentItems: _paymentItems,
onPaymentResult: onGooglePayResult,
onError: (Object err) => debugPrint('Google Pay error: $err'),
onPressed: () => debugPrint('Google Pay button pressed'),
height: 48,
type: GooglePayButtonType.buy,
theme: GooglePayButtonTheme.dark,
margin: const EdgeInsets.only(top: 15.0),
loadingIndicator: const Center(child: CircularProgressIndicator()),
)
Uwagi
- Kliknięcie powoduje wyświetlenie arkusza płatności, a
onPaymentResultotrzymuje ładunek. - W środowisku produkcyjnym wyślij token do dostawcy usług płatniczych, aby dokończyć obciążenie.
6. Podsumowanie
Gratulujemy ukończenia tego ćwiczenia! Wiesz już, jak zintegrować Google Pay API z aplikacją Flutter na Androida.
Uruchamianie projektu
Aby uruchomić aplikację, wpisz to polecenie:
flutter run
Co dalej
Dodatkowe materiały
- Dołącz do rozmowy na kanale#payments w Discordzie
- Obserwuj @GooglePayDevs na X
- Oglądaj filmy związane z Google Pay w YouTube