123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import 'package:flutter/material.dart';
- import 'package:plugin_platform/engine/notify/notify_engine.dart';
- import 'package:plugin_platform/platform_export.dart';
- import 'package:shared/utils/log_utils.dart';
- //定义一个top-level(全局)变量,页面引入该文件后可以直接使用
- var stripeService = StripeService();
- class StripeService {
- StripeService._internal();
- //保存单例
- static final StripeService _singleton = StripeService._internal();
- //工厂构造函数
- factory StripeService() => _singleton;
- bool _isInitialized = false;
- //初始化 Stripe
- Future<void> _ensureInitialized() async {
- if (_isInitialized) return;
- Stripe.publishableKey = 'pk_test_51RMmxaRpg7SPAcNndAqMUMEOkRFsY5mL0JqJmdunL3vspxrYsGjGARQddaVu3ZQVEy1e1WTF8yalt0cYZCY8sK9R0005VIg5mC';
- await Stripe.instance.applySettings();
- Log.d("Stripe 初始化完成");
- _isInitialized = true;
- }
- ///执行支付
- Future<bool> executePayment({
- required String orderId,
- }) async {
- try {
- await _ensureInitialized();
- // 实际开发中应从服务端获取 clientSecret
- final clientSecret = await _fetchPaymentIntent(orderId);
- await _initializePaymentSheet(clientSecret);
- await Stripe.instance.presentPaymentSheet();
- Log.d("presentPaymentSheet 关闭,用户操作完成 !");
- return await _verifyPaymentResult(clientSecret);
- } on StripeException catch (e) {
- _handleStripeError(e);
- return false;
- } catch (e) {
- _handleGenericError(e);
- return false;
- }
- }
- ///调用网络请求
- Future<String> _fetchPaymentIntent(String orderId) async {
- // 实际开发中调用后端接口获取
- return "pi_3ROERGRpg7SPAcNn0sPDWCQI_secret_EZPly9t0IbKqaKA2CQwkUNIjd";
- }
- Future<void> _initializePaymentSheet(String clientSecret) async {
- await Stripe.instance.initPaymentSheet(
- paymentSheetParameters: SetupPaymentSheetParameters(
- customFlow: false,
- paymentIntentClientSecret: clientSecret,
- merchantDisplayName: 'Your App Demo',
- style: ThemeMode.light,
- allowsDelayedPaymentMethods: false,
- ),
- );
- }
- Future<bool> _verifyPaymentResult(String clientSecret) async {
- final paymentIntent = await Stripe.instance.retrievePaymentIntent(clientSecret);
- switch (paymentIntent.status) {
- case PaymentIntentsStatus.Succeeded:
- NotifyEngine.showSuccess('支付成功');
- return true;
- case PaymentIntentsStatus.RequiresPaymentMethod:
- NotifyEngine.showFailure('支付方式无效');
- return false;
- case PaymentIntentsStatus.Processing:
- return await _handleProcessingPayment(clientSecret);
- default:
- return false;
- }
- }
- Future<bool> _handleProcessingPayment(String clientSecret) async {
- // 处理需要等待的支付状态
- await Future.delayed(const Duration(seconds: 2));
- final updatedIntent = await Stripe.instance.retrievePaymentIntent(clientSecret);
- return updatedIntent.status == PaymentIntentsStatus.Succeeded;
- }
- void _handleStripeError(StripeException e) {
- final errorMessage = e.error.localizedMessage ?? '支付失败';
- Log.e('Stripe Error: ${e.error.code} - $errorMessage');
- NotifyEngine.showError(errorMessage);
- }
- void _handleGenericError(dynamic e) {
- Log.e('System Error: $e');
- NotifyEngine.showError('支付系统异常');
- }
- }
|