1. Giriş
Ne oluşturacaksınız?
Bu codelab'i tamamladığınızda, Android için çalışan bir Google Pay entegrasyonuna sahip minimum düzeyde işlevsel bir Flutter uygulamanız olacak. Bu proje, işlenmek üzere bir ödeme hizmeti sağlayıcısına gönderilebilecek bir ödeme jetonu alır.
Neler öğreneceksiniz?
- Google Pay Flutter kitaplığını yükleme ve yapılandırma
- Google Pay düğmesini görüntüleme ve tıklamaları işleme
- Google Pay'den ödeme jetonu isteme
İhtiyacınız olanlar
- Dart dosyalarını düzenlemek için istediğiniz bir metin düzenleyici.
- Android için ayarlanmış bir Flutter geliştirme ortamı.
- Üretim için Google Pay
merchantIdgerekir. Google Pay ve Cüzdan Konsolu'na kaydolmak yalnızca bir dakika sürer. Bu nedenle, kaydınızı hemen yapabilirsiniz.
2. Flutter projesini oluşturun
Proje dosyaları oluşturma
googlepay_flutteradlı yeni bir Flutter projesi oluşturun.flutter create googlepay_flutter
- Google Pay Flutter kitaplığını yükleyin.
cd googlepay_flutter flutter pub add pay
- Tercih ettiğiniz IDE'de
lib/main.dartdosyasını açın ve içeriğini aşağıdaki kodla değiştirin: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'i yapılandırma
Google Pay ödeme isteği için istek nesnesi gerekir. Burada _paymentItems olarak tanımlanan nesne, tüm istekler için minimum ortak ayarları içerir. Yapılan isteğe bağlı olarak ek ayarlar eklenecektir. Bu ayarları bu codelab'de inceleyeceğiz.
- Google Pay yapılandırma sabitlerini
lib/main.dart'ya ekleyin:
import 'package:pay/pay.dart';
const _paymentItems = [
PaymentItem(
label: 'Total',
amount: '14.95',
status: PaymentItemStatus.final_price,
)
];
- Varsayılan ödeme yapılandırması JSON'unu
assets/google_pay_config.jsonyoluna ekleyin:
{
"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"
}
}
}
Kaynaklar
- API Referansı: Google Pay API istek nesneleri dokümanları
- API Referansı: İzin verilen yetkilendirme yöntemleri, izin verilen kart ağları ve uygun ağ geçidi değeri de dahil olmak üzere belirteç oluşturma spesifikasyonları hakkında daha fazla bilgi için
PaymentMethodbölümüne bakın.
4. Google Pay düğmesini ekleme
pay kitaplığı, yerel bir Google Pay düğmesi bileşeni içerir.
lib/main.dart içindeki _PaySampleAppState sınıfını aşağıdaki kodla güncelleyin:
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.'),
],
),
),
);
}
}
Kod açıklaması
_paymentItems, bu düğme tıklamasıyla işlenmesi gereken işlemi açıklar.GooglePayButtonwidget'ındakipaymentConfigurationAsset, yapılandırmayıassets/google_pay_config.jsondosyasından yükler.GooglePayButtontuşuna basıldığındaonGooglePayResultişlevi çağrılır. Bu işlev, ödeme sonucunu alır.- Yanıtla birlikte ödeme jetonunu aldıktan sonra, işlemi işlemek için ödeme ağ geçidinize gönderirsiniz.
5. Tıklamada ödemeyi tetikleme
GooglePayButton simgesine dokunulduğunda Google Pay sayfası açılır ve sonuç döndürülür. Ayrı bir "ödeme yap" çağrısı gerekmez. Jetonu kaydetmek, hataları göstermek ve isteğe bağlı olarak düğmeye basma işlemini kaydetmek için işleyiciler ekleyin.
_PaySampleAppStateiçinde sonuç işleyiciyi ekleyin veya güncelleyin:
void onGooglePayResult(dynamic paymentResult) {
try {
final token = paymentResult['paymentMethodData']['tokenizationData']['token'];
debugPrint('Google Pay payment token: $token');
} catch (e) {
debugPrint('Unexpected payment result: $e');
}
}
GooglePayButtonöğesini, basma ve hata işleyicileri içerecek şekilde güncelleyin:
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()),
)
Notlar
- Dokunma işlemi, ödeme sayfasını tetikler.
onPaymentResult, yükü alır. - Üretim ortamında, ödemeyi tamamlamak için jetonu ödeme hizmeti sağlayıcınıza gönderin.
6. Sonuç
Bu Codelab'i tamamladığınız için tebrikler. Google Pay API'yi Android için bir Flutter uygulamasına nasıl entegre edeceğinizi öğrendiniz.
Projeyi yürütme
Uygulamanızı başlatmak için aşağıdaki komutu çalıştırın:
flutter run
Şimdi beni ne bekliyor?
Ek kaynaklar
- Discord'daki #payments kanalında sohbete katılın.
- X'te @GooglePayDevs hesabını takip edin.
- YouTube'da Google Pay ile ilgili videoları izleyin.