Flutter 集成三方支付注意事项

3,782 阅读2分钟

一、支付宝支付

一、准备工作:

1、注册支付宝企业账号,开启支付以及分享功能

2、ios下需要添加urlScheme

集成tobias

import 'package:tobias/tobias.dart';
import 'package:tobias/tobias.dart' as tobias;

封装的支付方法

注意: 1、evn: AliPayEvn.ONLINE为线上环境,evn: AliPayEvn.SANDBOX为安卓沙盒环境 2、支付状态码成功为9000(字符串)

// 初始化支付宝的SDK
_initAlipaySDK() async {
  await registerAP(appId: 应用id);
}
在initState中调用

payAipay({BuildContext context, PayInfo data, int id, int orderType}) async {
  Map result = await tobias.aliPay(data.aliPay, evn: AliPayEvn.ONLINE);
  //data.aliPay为支付宝需要的支付信息字符串类型。
  debugPrint("支付宝支付:$result, ${result['resultStatus']}");
  if (result['resultStatus'] == "9000") {
    // 支付宝支付成功
    await showPayDialog(
        context: context,
        canClose: false,
        imageName: 'pay_success',
        title: '支付成功',
        buttons: ['关闭', '查看订单'],
        onTap: (index) {
          debugPrint('订单:支付成功,$index');
          if (index == 0) {
            Navigator.of(context).pop();
          } else if (index == 1) {
            Navigator.of(context).pop();
          }
        });
  } else {
    // 支付宝支付失败
    await showPayDialog(
        context: context,
        imageName: 'pay_faile',
        title: '支付失败',
        buttons: ['关闭', '重新支付'],
        onTap: (index) {
          debugPrint('订单:支付失败,$index');
          if (index == 0) {
            Navigator.of(context).pop();
          } else if (index == 1) {
            Navigator.of(context).pop();
            payAipay(
                context: context, data: data, id: id, orderType: orderType);
          }
        });
  }
}

二、微信支付

集成fluwx ios 下需在xcode中配置唤起微信权限

注意事项:微信唤起支付弹窗需在页面dispose时期使用cancel()方法进行销毁,否则会执行N次

import 'package:fluwx/fluwx.dart';
import 'package:fluwx/fluwx.dart' as fluwx;
/// 初始化微信SDK
_initWxSDK() async {
  await registerWxApi(
    appId: 微信开发平台appid,
    doOnAndroid: true,
    doOnIOS: true,
    universalLink: 协议地址,
  );
}
在在initState中调用

// 微信方法
payWechat({BuildContext context, PayInfo data, int id, int orderType}) async {
//data为微信支付返回的信息
  bool result = await fluwx.payWithWeChat(
    appId: 微信开发平台appid,
    partnerId: data.partnerid,
    prepayId: data.prepayid,
    packageValue: data.package,
    nonceStr: data.noncestr,
    timeStamp: data.timestamp,
    sign: data.sign,
  );
  var lis;
  lis = fluwx.weChatResponseEventHandler.listen((BaseWeChatResponse res) async {
    debugPrint('微信支付的回调结果:${res.errCode}');
    if (res is fluwx.WeChatPaymentResponse && res.errCode == 0) {
      debugPrint('微信支付:${fluwx.WeChatPaymentResponse}');
      // 微信支付成功
      await showPayDialog(
          context: context,
          imageName: 'pay_success',
          title: '支付成功',
          buttons: ['关闭', '查看订单'],
          onTap: (index) {
            //方法执行完需要手动关闭
            lis.cancel();
            debugPrint('订单:支付成功,$index');
            if (index == 0) {
              Navigator.of(context).pop();
            } else if (index == 1) {
              Navigator.of(context).pop();
            }
          });
    } else {
      // 微信支付失败
      await showPayDialog(
          context: context,
          imageName: 'pay_faile',
          title: '支付失败',
          buttons: ['关闭', '重新支付'],
          onTap: (index) {
            lis.cancel();
            debugPrint('订单:支付失败,$index');
            if (index == 0) {
              Navigator.of(context).pop();
            } else if (index == 1) {
              Navigator.of(context).pop();
              payWechat(
                  context: context, data: data, id: id, orderType: orderType);
            }
          });
    }
  });
  debugPrint('微信:$result');
}

三、支付宝代付(分享)

注意事项:安卓环境下打包代码混淆支付宝分享这个方法不进行代码混淆,否则在安卓环境下会导致可以唤起支付宝好友列表,但是无法选中的问题

集成:flutter_apopen

import 'package:flutter_apopen/flutter_apopen.dart' as apopen;

ShareWebWithImageUrl(分享网页)

void shareWebWithImageUrl() async{
	var result = await apopen.shareWebAndImgUrl(
	imageUrl: 'http://XXX.jpg',
	wepageUrl: 'https://www.XXX.com',
	title: 'Text Title',
	desc: 'Text desc',
	);
	print(result);
}