Flutter集成Apple与Google Pay

一、Apple Pay 集成流程(Flutter)

1. 环境配置
yaml:
# pubspec.yaml
dependencies:
  flutter_apple_pay: ^2.0.0 # 使用第三方插件
2. iOS 原生配置
  1. 在苹果开发者后台创建 Merchant ID(如:merchant.com.yourcompany)
  2. 在 Xcode 项目配置中启用 Apple Pay 并添加对应的 Merchant ID
  3. 生成证书签名请求(CSR)并提交给支付网关提供商
3. Flutter 实现代码

dart:

import 'package:flutter_apple_pay/flutter_apple_pay.dart';

Future<void> initiateApplePay() async {
  // 1. 检查设备支持
  final canMakePayments = await FlutterApplePay.canMakePayments();
  if (!canMakePayments) return;

  // 2. 创建支付请求
  final paymentItems = [
    ApplePayPaymentSummaryItem(
      label: 'Total',
      amount: '99.99',
      isPending: false,
    )
  ];

  final paymentRequest = ApplePayRequest(
    countryCode: 'US',
    currencyCode: 'USD',
    merchantIdentifier: 'merchant.com.yourcompany',
    paymentSummaryItems: paymentItems,
  );

  try {
    // 3. 发起支付请求
    final paymentToken = await FlutterApplePay.makePayment(paymentRequest);
    
    // 4. 更新网关会话
    final response = await updateGatewaySession(
      paymentToken: paymentToken,
      provider: 'APPLE_PAY'
    );
    
    // 5. 处理支付结果
    if (response.success) {
      // 完成交易
    }
  } catch (e) {
    print('Apple Pay Error: $e');
  }
}

Future<Map<String, dynamic>> updateGatewaySession({
  required String paymentToken,
  required String provider,
}) async {
  // 实现与网关的通信
  final response = await http.post(
    Uri.parse('https://api.gateway.com/sessions/update'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({
      'sourceOfFunds': {
        'provided': {
          'card': {
            'devicePayment': {'paymentToken': paymentToken}
          }
        }
      },
      'order': {'walletProvider': provider}
    }),
  );
  return jsonDecode(response.body);
}

二、Google Pay 集成流程(Flutter)

1. 环境配置
yaml
# pubspec.yaml
dependencies:
  google_pay: ^3.0.0 # 使用第三方插件
  http: ^0.13.3
2. Android 原生配置
  1. 在 Google Pay API 控制台注册应用
  2. 配置 build.gradle

gradle

dependencies {
    implementation 'com.google.android.gms:play-services-wallet:19.1.0'
}
  1. 在 AndroidManifest.xml 添加 meta-data:

xml

<meta-data
    android:name="com.google.android.gms.wallet.api.enabled"
    android:value="true"/>
3. Flutter 实现代码
dart
import 'package:google_pay/google_pay.dart';

final _googlePay = GooglePay(
  environment: Environment.Test,
  paymentProfile: PaymentProfile(
    gateway: 'mpgs',
    gatewayMerchantId: 'YOUR_MERCHANT_ID',
  ),
  currencyCode: 'USD',
  countryCode: 'US',
);

void initGooglePay() {
  _googlePay.init(
    price: '99.99',
    items: const [
      GooglePayItem(
        label: 'Total',
        price: '99.99',
        status: GooglePayItemStatus.Final,
      )
    ],
  );
}

Future<void> launchGooglePay() async {
  // 1. 检查设备支持
  final isReady = await _googlePay.isReadyToPay();
  if (!isReady) return;

  // 2. 发起支付请求
  final paymentData = await _googlePay.makePayment();
  
  // 3. 处理支付令牌
  if (paymentData != null) {
    final token = paymentData['paymentMethodData']['tokenizationData']['token'];
    
    final response = await updateGatewaySession(
      paymentToken: token,
      provider: 'GOOGLE_PAY'
    );
    
    // 4. 处理交易结果
    if (response['status'] == 'SUCCESS') {
      // 完成交易
    }
  }
}

// 网关会话更新函数与Apple Pay示例相同

三、通用处理流程

1. 后端网关通信示例
dart
Future<Map<String, dynamic>> completePayment({
  required String sessionId,
  required double amount,
  required String currency,
}) async {
  final response = await http.post(
    Uri.parse('https://api.gateway.com/payments'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({
      'sessionId': sessionId,
      'transaction': {
        'type': 'PAY',
        'amount': amount,
        'currency': currency
      }
    }),
  );
  return jsonDecode(response.body);
}
2. 错误处理建议

dart

try {
  // 支付操作...
} on PlatformException catch (e) {
  // 处理原生平台错误
  print('Platform Error: ${e.message}');
} on HttpException catch (e) {
  // 处理网络错误
  print('HTTP Error: ${e.message}');
} catch (e) {
  // 通用错误处理
  print('Unexpected Error: $e');
}

四、测试注意事项

  1. Apple Pay 测试:

    • 使用沙盒测试账户
    • 在 TestFlight 中测试
    • 验证证书链有效性
  2. Google Pay 测试:

    • 使用 Environment.Test
    • 配置测试卡号:4111 1111 1111 1111
    • 检查 Google Play Services 版本
  3. 网关测试:

    • 使用测试商家 ID
    • 验证响应代码(如 00 表示成功)
    • 测试 3DS 验证流程

五、上线检查清单

  1. 证书验证:

    • 确认生产环境证书已部署
    • 更新网关商户 ID 为生产环境值
  2. 配置更新:

    dart

    // 生产环境配置
    const gatewayUrl = 'https://api.gateway.com/production';
    _googlePay.environment = Environment.Production;
  3. 监控配置:

    • 实施支付成功率监控
    • 设置错误报警阈值
    • 定期检查令牌有效性

以上实现基于典型支付网关的通用集成模式,具体参数(如网关URL、商户ID等)需要根据实际支付服务提供商的文档进行调整。建议开发时结合官方文档和沙盒环境进行充分测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值