Flutter支付集成插件google_wallet的使用

Flutter支付集成插件google_wallet的使用

开始之前

在开始之前,请遵循Google Wallet在Android上的设置指南

使用方法

要开始使用这个插件,请将 google_wallet 作为依赖项添加到您的 pubspec.yaml 文件中:

flutter pub add google_wallet

示例代码

以下示例展示了如何检查Google Wallet API是否可用,并将通行证保存到用户的Google Wallet中:

import 'package:google_wallet/google_wallet.dart';

final googleWallet = GoogleWallet();
final String jwt = '...'; // 您自己的通行证JWT

example() async {
  bool? available;
  bool? saved = false;
  String text;

  // 检查Google Wallet是否可用
  try {
    available = await googleWallet.isAvailable();
    text = "Google Wallet is available: ${available}";
  } on PlatformException catch (e) {
    text = "Error: '${e.message}'.";
  }

  // 将通行证保存到Google Wallet
  try {
    if (available == true) {
      saved = await googleWallet.savePassesJwt(jwt);
      text = "Pass saved: ${saved}";
    } else {
      // 钱包不可用,
      // 通过网页保存通行证: "https://pay.google.com/gp/v/save/${jwt}"
      text = "Opened Google Wallet via web";
    }
  } on PlatformException catch (e) {
    text = "Error: '${e.message}'.";
  }
}

该插件还提供了一个Google Wallet按钮小部件:

GoogleWalletButton(
  style: GoogleWalletButtonStyle.condensed, // 或者 GoogleWalletButtonStyle.primary(默认)
  height: 90, // 按钮高度
  locale: Locale("language_code"), // 如果需要,显式设置语言环境
  onPressed: someFunc, // 回调函数
)

完整的示例可以在 example 目录中找到。

完整示例Demo

/*
 * Copyright 2024 Google LLC.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_wallet/google_wallet.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Google Wallet Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Google Wallet Flutter Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final googleWallet = GoogleWallet();
  final String jwt = 'eyJ0eXAiOiAiSldUIiwgImFsZyI6ICJSUzI1NiIsICJraWQiOiAiMjVmNjgzZDEwNzRhOTZkZmEwMGRiNDEwMjkwMzIwNTAyNzhiOTMwYiJ9.eyJpc3MiOiAiZGV2bW9kZXRlc3RAbXVzaWMtMjA1MjIyLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwgImF1ZCI6ICJnb29nbGUiLCAib3JpZ2lucyI6IFsid3d3LmV4YW1wbGUuY29tIl0sICJ0eXAiOiAic2F2ZXRvd2FsbGV0IiwgInBheWxvYWQiOiB7ImdlbmVyaWNPYmplY3RzIjogW3siaWQiOiAiMzM4ODAwMDAwMDAyMjE4NDQwMy50ZXN0MTIzNTY2NzNzcyJ9XX19.06qERcEP9l9dGQwbqueXWFF_UI50TX21x0PdmTyj--di2aNTFLsWB_yGOdS-nPT0X6_mn0nVmcrqnXkT0tcb7kye9jxwD-lVwjHYwn4R3Y7l7dWcQNcjeGPopeOoJmWiQF6uZoRmpmfr0q0kSS23QAPqbOiPpX4z_InARsG1p8XN1OQkCb9bx-YWu1bT-E5Be1UE5Si4NUOEZfyl4pis_HE2aKxtC7Rg-7VGNuSyyatJHZZ3bm_uU9QCG99rpRTHST4ggLW_npiPCBh6r7L3bR3PsKYejyn1zD6NQykQ3bHB9BSSNOtCDKI_8q121jjwc4KKz4dAonKxiYQhSYbrzg';
  bool? _available = false;
  String _text = 'Loading';

  [@override](/user/override)
  void initState() {
    super.initState();
    _checkAvailable();
  }

  _checkAvailable() async {
    bool? available;
    String text;
    try {
      available = await googleWallet.isAvailable();
      text = "Google Wallet is available: ${available}";
    } on PlatformException catch (e) {
      text = "Error: '${e.message}'.";
    }
    setState(() {
      _available = available;
      _text = text;
    });
  }

  _savePass() async {
    bool? saved = false;
    String text;
    try {
      if (this._available == true) {
        saved = await googleWallet.savePassesJwt(jwt);
        text = "Pass saved: ${saved}";
      } else {
        // 钱包不可用,
        // 通过网页保存通行证
        await _savePassBrowser();
        text = "Opened Google Wallet via web";
      }
    } on PlatformException catch (e) {
      text = "Error: '${e.message}'.";
    }
    setState(() {
      _text = text;
    });
  }

  _savePassBrowser() async {
    String url = "https://pay.google.com/gp/v/save/${jwt}";
    if (await canLaunchUrl(Uri.parse(url))) {
      await launchUrl(Uri.parse(url));
    } else {
      throw 'Could not open Google Wallet via web';
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            GoogleWalletButton(
              style: GoogleWalletButtonStyle.condensed,
              height: 90,
              onPressed: _savePass,
              // 如果需要,显式设置语言环境:
              // locale: Locale("en_US"),
            ),
            Text(_text),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter支付集成插件google_wallet的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter支付集成插件google_wallet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成Google Wallet支付插件,可以通过google_wallet包来实现。以下是一个基本的代码示例,展示了如何在Flutter应用中集成和使用Google Wallet支付。

前提条件

  1. Flutter环境:确保你已经设置好Flutter开发环境。
  2. Google Cloud项目:创建一个Google Cloud项目,并启用Google Wallet API。
  3. 商户信息:配置你的商户信息,包括Google Pay商户ID和公钥证书。

步骤一:添加依赖

在你的pubspec.yaml文件中添加google_wallet依赖:

dependencies:
  flutter:
    sdk: flutter
  google_wallet: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤二:配置Google Wallet

在集成Google Wallet之前,你需要在Google Cloud平台上配置你的项目,并获取必要的凭证(如Google Pay商户ID和公钥证书)。

步骤三:集成代码

以下是一个简单的示例,展示了如何在Flutter应用中集成Google Wallet支付:

import 'package:flutter/material.dart';
import 'package:google_wallet/google_wallet.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GoogleWalletPaymentPage(),
    );
  }
}

class GoogleWalletPaymentPage extends StatefulWidget {
  @override
  _GoogleWalletPaymentPageState createState() => _GoogleWalletPaymentPageState();
}

class _GoogleWalletPaymentPageState extends State<GoogleWalletPaymentPage> {
  final GoogleWallet _googleWallet = GoogleWallet();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Wallet Payment Integration'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 配置支付请求
              final GoogleWalletPaymentRequest request = GoogleWalletPaymentRequest(
                googleMerchantId: '你的Google Merchant ID',
                environment: GoogleWalletEnvironment.test, // 替换为production用于生产环境
                transactionInfo: GoogleWalletTransactionInfo(
                  totalPrice: '10.00',
                  currencyCode: 'USD',
                ),
                // 其他可选配置,如shippingOptions等
              );

              // 发起支付请求
              final GoogleWalletPaymentResponse response = await _googleWallet.loadPaymentData(request);
              print('Payment Data: ${response.toJson()}');
              // 处理支付响应,例如发送到你的服务器进行验证和完成交易
            } catch (e) {
              print('Error: $e');
            }
          },
          child: Text('Pay with Google Wallet'),
        ),
      ),
    );
  }
}

注意事项

  1. 测试环境:在开发阶段,使用GoogleWalletEnvironment.test环境进行测试。发布到生产环境时,应替换为GoogleWalletEnvironment.production
  2. 安全性:确保你的Google Pay商户ID和公钥证书配置正确,以保障支付过程的安全性。
  3. 支付处理:在获取到支付数据后,需要将数据发送到你的服务器进行验证和处理,以完成交易流程。

以上代码提供了一个基本的集成示例,实际应用中可能需要根据具体需求进行调整和扩展。

回到顶部