flutter微信支付之项目实战篇

fluwx官网

yaml文件中引入

dependencies:
  fluwx: ^3.11.0+1

dart文件中引入

import 'package:fluwx/fluwx.dart';

初始化时候检查微信是否安装

  @override
  void initState() {
    super.initState();
    _initFluwx();
  }

  _initFluwx() async {
    await registerWxApi(
      appId: 'wxd930ea5d5a258f4f',
      doOnAndroid: true,
      doOnIOS: true,
      universalLink: 'https://your.univerallink.com/link/',
    );
    var result = await isWeChatInstalled;
    print('is installed $result');
  }

请求后端接口需要设置参数,填入即可

   fluwx
                .payWithWeChat(
                appId: result['appid'].toString(),
                partnerId: result['partnerid'].toString(),
                prepayId: result['prepayid'].toString(),
                packageValue: result['package'].toString(),
                nonceStr: result['noncestr'].toString(),
                timeStamp: result['timestamp'],
                sign: result['sign'].toString(),
              )

监听微信端返回数据

fluwx.weChatResponseEventHandler.listen((event) {
      if (event is fluwx.WeChatPaymentResponse) {
        if (event.errCode == 0) {
          print("展示页面成功");
        } else {
          print("微信支付失败");
        }
      }
    });

支付源码

注意

监听需要在整个页面结束之后注销,因为每次打开页面listen被多次赋值?导致之前的listen
也被调用,打开过多少次就有多少个listen被调用,Stream需要在dispose注销掉,本身第三方没有提供注销方式,需要自定义一个数据流接受控制,流中提供的ondata方法可以执行回调结果,但是会回调n次,还提供了一个ondone方法在数据流完成时候调用一次ondone方法,但是在微信监听过程是一个持续性的。

 bool isPay = await Unity.payWechat(sealPrice);

怎么解决?

使用方式

定义数据流监听

 StreamSubscription  subscription ;

初始化执行

  _payListen = fluwx.weChatResponseEventHandler.listen((event) {
      if (event is fluwx.WeChatPaymentResponse) {
        if (event.errCode == 0) {
          print("展示页面成功");
        } else {
          print("微信支付失败");
        }
      }
    });

页面销毁

   _payListen?.cancel();

单例模式

import 'dart:async';
import 'package:fluwx/fluwx.dart' as fluwx;
class WePay{
  //单例
  static WePay _instance;
  static  StreamSubscription  subscription ;
  WePay._();

  static WePay getInstance() {
    if (_instance == null) {
      _instance = WePay._();
    }
    return _instance;
  }

  StreamSubscription subscribe<T extends fluwx.BaseWeChatResponse>(onData(T event),
      {Function onError, void onDone(), bool cancelOnError}) {
      subscription = fluwx.weChatResponseEventHandler.listen(onData)
    return subscription;
  }
  //关闭流
  void unsubscribe(StreamSubscription subscription) {
    subscription.cancel();
  }
}
 payListen = WePay.getInstance().subscribe((statusData) {
      if (statusData is fluwx.WeChatPaymentResponse) 
        if (statusData.errCode == 0) {
          print("展示页面成功");
        }else{
          print("微信支付失败");
        }
      }
    });

也可以做成请求后端查看是否支付成功

优化:禁用按钮 如果前后端改成未支付的订单还能继续支付 不需要禁用按钮
参考资料
StreamSubscription
源文档fluwx
讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可鸭~

想吃糖~我会甜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值