1. Einführung
Aufgaben
Nach Abschluss dieses Codelabs haben Sie eine minimal funktionsfähige Flutter-App mit einer funktionierenden Google Pay-Integration für Android. Dieses Projekt ruft ein Zahlungstoken ab, das zur Verarbeitung an einen Zahlungsdienstleister gesendet werden kann.
Lerninhalte
- Google Pay Flutter-Bibliothek installieren und konfigurieren
- Google Pay-Button anzeigen und Klicks verarbeiten
- Zahlungstoken von Google Pay anfordern
Voraussetzungen
- Ein Texteditor Ihrer Wahl zum Bearbeiten von Dart-Dateien.
- Eine für Android eingerichtete Flutter-Entwicklungsumgebung.
- Für die Produktion benötigen Sie eine Google Pay
merchantId. Die Registrierung in der Google Pay & Wallet Console dauert nur eine Minute. Sie können sie also jetzt erledigen.
2. Flutter-Projekt erstellen
Projektdateien erstellen
- Erstellen Sie ein neues Flutter-Projekt mit dem Namen
googlepay_flutter.flutter create googlepay_flutter
- Installieren Sie die Google Pay Flutter-Bibliothek.
cd googlepay_flutter flutter pub add pay
- Öffnen Sie
lib/main.dartin Ihrer IDE und ersetzen Sie den Inhalt durch den folgenden Code: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. Google Pay konfigurieren
Für eine Google Pay-Zahlungsanfrage ist ein Anfrageobjekt erforderlich. Das hier als _paymentItems definierte Objekt enthält die gemeinsamen Mindesteinstellungen für alle Anfragen. Je nach Anfrage werden zusätzliche Einstellungen hinzugefügt, die wir in diesem Codelab durchgehen.
- Fügen Sie die Google Pay-Konfigurationskonstanten zu
lib/main.darthinzu:
import 'package:pay/pay.dart';
const _paymentItems = [
PaymentItem(
label: 'Total',
amount: '14.95',
status: PaymentItemStatus.final_price,
)
];
- Fügen Sie die JSON-Standardkonfiguration für Zahlungen zum Pfad
assets/google_pay_config.jsonhinzu:
{
"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"
}
}
}
Ressourcen
- API-Referenz: Dokumentation zu Google Pay API-Anfrageobjekten
- API-Referenz: Unter
PaymentMethodfinden Sie weitere Informationen zu den zulässigen Autorisierungsmethoden, zulässigen Kartennetzwerken und Tokenisierungsspezifikationen, einschließlich des richtigen Gateway-Werts.
4. Google Pay-Button hinzufügen
Die pay Bibliothek enthält eine native Google Pay-Button-Komponente.
Aktualisieren Sie die _PaySampleAppState Klasse in lib/main.dart mit dem folgenden Code:
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.'),
],
),
),
);
}
}
Erläuterung zum Code
_paymentItemsbeschreibt die Transaktion, die mit diesem Button-Klick verarbeitet werden soll.- Mit
paymentConfigurationAssetim WidgetGooglePayButtonwird die Konfiguration aus der Dateiassets/google_pay_config.jsongeladen. - Wenn auf
GooglePayButtongeklickt wird, wird die FunktiononGooglePayResultaufgerufen. Diese Funktion empfängt das Zahlungsergebnis. - Sobald Sie das Zahlungstoken aus der Antwort haben, senden Sie es an Ihr Zahlungsgateway, um die Transaktion zu verarbeiten.
5. Zahlung per Klick auslösen
Wenn Sie auf GooglePayButton tippen, wird das Google Pay-Sheet geöffnet und ein Ergebnis zurückgegeben. Ein separater Aufruf zum Ausführen der Zahlung ist nicht erforderlich. Fügen Sie Handler hinzu, um das Token zu protokollieren, Fehler anzuzeigen und optional den Button-Klick zu protokollieren.
- Fügen Sie den Ergebnishandler in
_PaySampleAppStatehinzu oder aktualisieren Sie ihn:
void onGooglePayResult(dynamic paymentResult) {
try {
final token = paymentResult['paymentMethodData']['tokenizationData']['token'];
debugPrint('Google Pay payment token: $token');
} catch (e) {
debugPrint('Unexpected payment result: $e');
}
}
- Aktualisieren Sie
GooglePayButton, um Handler für Klicks und Fehler einzufügen:
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()),
)
Hinweise
- Durch das Tippen selbst wird das Zahlungs-Sheet ausgelöst.
onPaymentResultempfängt die Nutzlast. - Senden Sie das Token in der Produktion an Ihren Zahlungsdienstleister, um die Belastung abzuschließen.
6. Fazit
Sie haben dieses Codelab abgeschlossen. Sie haben gelernt, wie Sie die Google Pay API in eine Flutter-App für Android einbinden.
Projekt ausführen
Führen Sie den folgenden Befehl aus, um Ihre App zu starten:
flutter run
So geht es weiter
Zusätzliche Ressourcen
- Unterhalten Sie sich im Kanal#payments auf Discord.
- Folgen Sie @GooglePayDevs auf X.
- Sehen Sie sich Videos zu Google Pay auf YouTube an.