| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /// 支付宝 Native 实现(Android/iOS,封装 alipay_kit)
- library;
- import 'dart:async';
- import 'package:alipay_kit/alipay_kit.dart';
- /// 支付宝支付结果
- class AlipayPayResult {
- final int? resultStatus;
- final String? memo;
- AlipayPayResult({this.resultStatus, this.memo});
- bool get isSuccessful => resultStatus == 9000;
- bool get isCancelled => resultStatus == 6001;
- }
- /// 支付宝封装(App 支付)
- class AlipayFlow {
- AlipayFlow._();
- static final AlipayFlow instance = AlipayFlow._();
- StreamSubscription<AlipayResp>? _sub;
- /// 拉起支付宝 App 支付
- /// [orderStr] 后端 sdkExecute 生成的调起字符串
- ///
- /// alipay_kit 的支付结果是异步流(payResp),需先订阅再发起,避免丢失结果。
- Future<AlipayPayResult> pay(String orderStr) async {
- final completer = Completer<AlipayPayResult>();
- // 先订阅结果流
- await _sub?.cancel();
- _sub = AlipayKitPlatform.instance.payResp().listen((resp) {
- if (!completer.isCompleted) {
- completer.complete(
- AlipayPayResult(resultStatus: resp.resultStatus, memo: resp.memo),
- );
- }
- });
- // 发起支付(原生弹起支付宝;结果经 payResp 流返回)
- await AlipayKitPlatform.instance.pay(orderInfo: orderStr);
- // 等待结果(超时兜底,避免永远阻塞)
- return completer.future.timeout(
- const Duration(seconds: 90),
- onTimeout: () => AlipayPayResult(resultStatus: 6002, memo: '支付超时'),
- );
- }
- }
|