1. Pengantar
Yang akan Anda build
Setelah menyelesaikan codelab ini, Anda akan memiliki aplikasi Flutter yang layak minimum dengan integrasi Google Pay yang berfungsi untuk Android. Project ini mengambil token pembayaran yang dapat dikirim ke penyedia layanan pembayaran untuk diproses.
Yang akan Anda pelajari
- Cara menginstal dan mengonfigurasi library Google Pay Flutter
- Cara menampilkan tombol Google Pay dan menangani klik
- Cara meminta token pembayaran dari Google Pay
Yang Anda butuhkan
- Editor teks pilihan Anda untuk mengedit file Dart.
- Lingkungan pengembangan Flutter yang disiapkan untuk Android.
- Untuk produksi, Anda memerlukan
merchantIdGoogle Pay. Hanya perlu satu menit untuk mendaftar di Konsol Google Pay & Wallet, jadi sebaiknya selesaikan sekarang.
2. Buat project Flutter
Membuat file project
- Buat project Flutter baru bernama
googlepay_flutter.flutter create googlepay_flutter
- Instal library Google Pay Flutter.
cd googlepay_flutter flutter pub add pay
- Buka
lib/main.dartdi IDE pilihan Anda dan ganti kontennya dengan kode berikut: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. Mengonfigurasi Google Pay
Permintaan pembayaran Google Pay memerlukan objek permintaan. Objek yang ditentukan di sini sebagai _paymentItems berisi setelan umum minimum untuk semua permintaan. Setelan tambahan akan ditambahkan bergantung pada permintaan yang dibuat dan akan kita tinjau dalam codelab ini.
- Tambahkan konstanta konfigurasi Google Pay ke
lib/main.dart:
import 'package:pay/pay.dart';
const _paymentItems = [
PaymentItem(
label: 'Total',
amount: '14.95',
status: PaymentItemStatus.final_price,
)
];
- Tambahkan json konfigurasi pembayaran default ke jalur
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"
}
}
}
Resource
- Referensi API: Dokumentasi objek permintaan Google Pay API
- Referensi API: Lihat
PaymentMethoduntuk mengetahui informasi selengkapnya tentang metode otorisasi yang diizinkan, jaringan kartu yang diizinkan, dan spesifikasi tokenisasi termasuk nilai gateway yang tepat.
4. Menambahkan tombol Google Pay
Library pay mencakup komponen tombol Google Pay native.
Perbarui class _PaySampleAppState di lib/main.dart dengan kode berikut:
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.'),
],
),
),
);
}
}
Penjelasan kode
_paymentItemsmenjelaskan transaksi yang harus diproses dengan klik tombol ini.paymentConfigurationAssetdi widgetGooglePayButtonmemuat konfigurasi dari fileassets/google_pay_config.json.- Saat
GooglePayButtonditekan, fungsionGooglePayResultdipanggil. Fungsi ini menerima hasil pembayaran. - Setelah mendapatkan token pembayaran dari respons, Anda akan mengirimkannya ke gateway pembayaran untuk memproses transaksi.
5. Memicu pembayaran saat diklik
Mengetuk GooglePayButton akan membuka halaman Google Pay dan menampilkan hasil — tidak diperlukan panggilan "lakukan pembayaran" terpisah. Tambahkan pengendali untuk mencatat token, menampilkan error, dan secara opsional mencatat penekanan tombol.
- Tambahkan atau perbarui pengendali hasil di dalam
_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');
}
}
- Perbarui
GooglePayButtonuntuk menyertakan handler error dan tekan:
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()),
)
Catatan
- Ketukan itu sendiri memicu lembar pembayaran;
onPaymentResultmenerima payload. - Dalam produksi, kirim token ke penyedia layanan pembayaran Anda untuk menyelesaikan tagihan.
6. Kesimpulan
Selamat, Anda telah menyelesaikan Codelab ini. Anda telah mempelajari cara mengintegrasikan Google Pay API ke aplikasi Flutter untuk Android.
Menjalankan project
Jalankan perintah berikut untuk memulai aplikasi Anda:
flutter run
Tujuan berikutnya
Referensi lainnya
- Bergabung dalam percakapan di #payments channel di Discord
- Ikuti @GooglePayDevs di X
- Tonton video terkait Google Pay di YouTube