Google Pay API cho Flutter trên Android

1. Giới thiệu

Sản phẩm bạn sẽ tạo ra

Khi hoàn tất lớp học lập trình này, bạn sẽ có một ứng dụng Flutter khả thi tối thiểu với tính năng tích hợp Google Pay đang hoạt động cho Android. Dự án này truy xuất một mã thông báo thanh toán có thể được gửi đến một nhà cung cấp dịch vụ thanh toán để xử lý.

Kiến thức bạn sẽ học được

  • Cách cài đặt và định cấu hình thư viện Flutter của Google Pay
  • Cách hiển thị nút Google Pay và xử lý các lượt nhấp
  • Cách yêu cầu mã thông báo thanh toán từ Google Pay

Bạn cần có

  • Trình chỉnh sửa văn bản mà bạn chọn để chỉnh sửa tệp Dart.
  • Môi trường phát triển Flutter được thiết lập cho Android.
  • Đối với bản phát hành chính thức, bạn sẽ cần có Google Pay merchantId. Bạn chỉ mất một phút để đăng ký tại Google Pay & Wallet Console, vì vậy, bạn có thể thực hiện việc này ngay bây giờ.

2. Tạo dự án Flutter

Tạo tệp dự án

  1. Tạo một dự án Flutter mới có tên là googlepay_flutter.
    flutter create googlepay_flutter
    
  2. Cài đặt thư viện Flutter của Google Pay.
    cd googlepay_flutter
    flutter pub add pay
    
  3. Mở lib/main.dart trong IDE mà bạn chọn và thay thế nội dung bằng mã sau:
    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. Định cấu hình Google Pay

Yêu cầu thanh toán bằng Google Pay cần có một đối tượng yêu cầu. Đối tượng được xác định ở đây là _paymentItems chứa các chế độ cài đặt chung tối thiểu cho tất cả các yêu cầu. Các chế độ cài đặt bổ sung sẽ được thêm tuỳ thuộc vào yêu cầu được đưa ra mà chúng ta sẽ xem xét trong lớp học lập trình này.

  1. Thêm các hằng số cấu hình Google Pay vào lib/main.dart:
import 'package:pay/pay.dart';

const _paymentItems = [
  PaymentItem(
    label: 'Total',
    amount: '14.95',
    status: PaymentItemStatus.final_price,
  )
];
  1. Thêm json cấu hình thanh toán mặc định vào đường dẫn 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"
      }
    }
  }

Tài nguyên

  • Tài liệu tham khảo API: Tài liệu về các đối tượng yêu cầu API Google Pay
  • Tài liệu tham khảo API: Tham khảo PaymentMethod để biết thêm thông tin về các phương thức uỷ quyền được phép, các mạng thẻ được phép và thông số kỹ thuật về mã hoá thành mã thông báo, bao gồm cả giá trị cổng thích hợp.

4. Thêm nút Google Pay

Thư viện pay bao gồm một thành phần nút Google Pay gốc.

Cập nhật lớp _PaySampleAppState trong lib/main.dart bằng mã sau:

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.'),
          ],
        ),
      ),
    );
  }
}

Giải thích đoạn mã

  1. _paymentItems mô tả giao dịch cần được xử lý bằng lượt nhấp vào nút này.
  2. paymentConfigurationAsset trong tiện ích GooglePayButton tải cấu hình từ tệp assets/google_pay_config.json.
  3. Khi bạn nhấn GooglePayButton, hàm onGooglePayResult sẽ được gọi. Hàm này nhận kết quả thanh toán.
  4. Sau khi có mã thông báo thanh toán từ phản hồi, bạn sẽ gửi mã thông báo đó đến cổng thanh toán để xử lý giao dịch.

5. Kích hoạt thanh toán khi nhấp

Khi bạn nhấn vào GooglePayButton, trang tính Google Pay sẽ mở ra và trả về một kết quả – không cần gọi riêng "thực hiện thanh toán". Thêm trình xử lý để ghi lại mã thông báo, hiển thị lỗi và tuỳ ý ghi lại lượt nhấn nút.

  1. Thêm hoặc cập nhật trình xử lý kết quả bên trong _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');
  }
}
  1. Cập nhật GooglePayButton để đưa vào trình xử lý lỗi và lượt nhấn:
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()),
)

Ghi chú

  • Lượt nhấn sẽ kích hoạt trang tính thanh toán; onPaymentResult nhận tải trọng.
  • Trong bản phát hành chính thức, hãy gửi mã thông báo đến nhà cung cấp dịch vụ thanh toán để hoàn tất việc tính phí.

6. Kết luận

Chúc mừng bạn đã hoàn thành lớp học lập trình này! Bạn đã học được cách tích hợp API Google Pay vào ứng dụng Flutter cho Android.

Chạy dự án

Chạy lệnh sau để bắt đầu ứng dụng:

flutter run

Nội dung tiếp theo nên tìm hiểu

Tài nguyên khác