myfatoorah_flutter

为了简化您的应用程序与MyFatoorah支付平台的集成,我们开发了
一个尖端插件,该插件可与您的应用程序顺畅运行,并为您提供一种简单的方式来嵌入我们的支付
功能到您的应用程序中。

该插件将为您节省集成我们API的精力和时间,而不是使用普通的API调用,并且它将允许
您以一种快速、现代化和安全的方式准备好设置。

前提条件

为了使插件集成在实时环境中正常工作,请参阅
先决条件
并阅读以获取更多详细信息

集成

安装

1. 将MyFatoorah插件添加到您的pubspec.yaml文件中。

dependencies:
    myfatoorah_flutter: ^2.1.0	    
2. 通过运行以下命令安装插件。

$ flutter pub get

用法

在您的Dart代码中,执行以下操作:

1. 要开始使用MyFatoorah插件,请将其导入到您的Flutter应用程序中。

import 'package:myfatoorah_flutter/myfatoorah_flutter.dart';
2. 在initState()中初始化MyFatoorah插件。

MFSDK.init(<Put API URL here>, <Put your API token key here>);
  • 您可以从此处获取用于测试的API URLAPI Token Key
  • 测试完成后,只需将测试API URL / API令牌密钥替换为实时信息即可,点击
    此处了解更多信息。
3. (可选)。
  • 如果要设置AppBar的属性,请使用以下行。

      MFSDK.setUpAppBar(
          title: "MyFatoorah Payment",
          titleColor: Colors.white,  // Color(0xFFFFFFFF)
          backgroundColor: Colors.black, // Color(0xFF000000)
          isShowAppBar: true); // For Android platform only
    
  • 如果要隐藏AppBar,请使用此行。请注意,如果平台是iOS,此行将无效。

      MFSDK.setUpAppBar(isShowAppBar: false);
    

初始化/执行付款

  • 初始化付款:此步骤将返回您账户所有可用的付款方式以及实际
    客户将在网关上支付的费用。

      var request = new MFInitiatePaymentRequest(0.100, MFCurrencyISO.KUWAIT_KWD);
    
      MFSDK.initiatePayment(request, MFAPILanguage.EN,
              (MFResult<MFInitiatePaymentResponse> result) => {
    
            if(result.isSuccess()) {
              print(result.response.toJson().toString())
            }
            else {
              print(result.error.message)
            }
          });
    
  • 执行付款:付款初始化后,此步骤将在
    MyFatoorah平台创建实际交易,并将返回重定向客户进行付款的URL到您的应用程序。

      // The value 1 is the paymentMethodId of KNET payment method.
      // You should call the "initiatePayment" API to can get this id and the ids of all other payment methods
      String paymentMethod = 1;
    
      var request = new MFExecutePaymentRequest(paymentMethod, 0.100);
    
      MFSDK.executePayment(context, request, MFAPILanguage.EN,
              (String invoiceId, MFResult<MFPaymentStatusResponse> result) => {
    
            if(result.isSuccess()) {
              print(result.response.toJson().toString())
            }
            else {
              print(result.error.message)
            }
          });
    
  • 作为一种好的实践,您不必每次需要执行付款时都调用“初始化付款”函数,但
    您至少需要调用一次它来保存您需要调用“执行付款”的PaymentMethodId。

直接付款/令牌化

您需要了解以下步骤来理解它是如何工作的:

  • 通过调用initiatePayment来获取允许直接付款的付款方式,以获取paymentMethodId。

  • 从用户那里收集卡片信息 MFCardInfo(cardNumber: “51234500000000081”, cardExpiryMonth: “05”, cardExpiryYear: “21”, cardSecurityCode: “100”, saveToken: false)

  • 如果您想保存您的信用卡信息并获取用于下次付款的令牌,您需要将saveToken设置为true,并且您将在响应中获得令牌,有关令牌化的更多信息请参阅此处。

  • 如果您想通过已保存的令牌执行付款,您需要使用

    MFCardInfo(cardToken: "put your token here")
    
  • 现在您已准备好执行付款,请查看以下示例代码。

    // 值2是Visa/Master付款方式的paymentMethodId。
    // 您应该调用“initiatePayment” API来获取此id以及所有其他付款方式的id。
    String paymentMethod = 2;

    var request = new MFExecutePaymentRequest(paymentMethod, 0.100);

    // var mfCardInfo = new MFCardInfo(cardToken: “Put your token here”);

    var mfCardInfo = new MFCardInfo(“2223000000000007”, “05”, “21”, “100”,
    bypass3DS: false, saveToken: true);

    MFSDK.executeDirectPayment(context, request, mfCardInfo, MFAPILanguage.EN,
    (String invoiceId, MFResult result) => {

        if(result.isSuccess()) {
          print(result.response.toJson().toString())
        }
        else {
          print(result.error.message)
        }
      });
    

发送付款(离线)

这将允许您生成一个支付链接,该链接可以通过我们支持的任何渠道发送,并在客户支付后进行收款。
已由您的客户支付。

var request = MFSendPaymentRequest(invoiceValue: 0.100, customerName: "Customer name",
	notificationOption: MFNotificationOption.LINK);

MFSDK.sendPayment(context, MFAPILanguage.EN, request, 
        (MFResult<MFSendPaymentResponse> result) => {
  
  if(result.isSuccess()) {
    print(result.response.toJson().toString())
  }
  else {
    print(result.error.message)
  }
});

付款查询

这将使您的应用程序能够获取特定发票/付款的完整详细信息。

var request = MFPaymentStatusRequest(invoiceId: "12345");

MFSDK.getPaymentStatus(MFAPILanguage.EN, request,
        (MFResult<MFPaymentStatusResponse> result) => {

      if(result.isSuccess()) {
        print(result.response.toJson().toString())
      }
      else {
        print(result.error.message)
      }
    });

嵌入式付款(新)

简介

如果您希望您的客户在您的结账页面上完成付款,而不被重定向到其他页面(3D Secure页面除外),并且PCI DSS合规性是一个障碍,那么MyFatoorah嵌入式付款功能将是您的最佳解决方案。

用法

步骤1

创建MFPaymentCardView的实例,并将其添加到您的build()函数中,如下所示:

  @override
  Widget build(BuildContext context) {
    return createPaymentCardView();
  }

  createPaymentCardView() {
    mfPaymentCardView = MFPaymentCardView();
    return mfPaymentCardView;
  }
注意:您可以像下面这样自定义付款卡视图的许多属性:

mfPaymentCardView = MFPaymentCardView(
      inputColor: Colors.red,
      labelColor: Colors.yellow,
      errorColor: Colors.blue,
      borderColor: Colors.green,
      fontSize: 14,
      borderWidth: 1,
      borderRadius: 10,
      cardHeight: 220,
      cardHolderNameHint: "card holder name hint",
      cardNumberHint: "card number hint",
      expiryDateHint: "expiry date hint",
      cvvHint: "cvv hint",
      showLabels: true,
      cardHolderNameLabel: "card holder name label",
      cardNumberLabel: "card number label",
      expiryDateLabel: "expiry date label",
      cvvLabel: "securtity code label",
    );
步骤2

您需要调用initiateSession()函数来创建会话。您需要为每个付款单独执行此操作。Session仅对一次付款有效。在其成功状态下,调用load()函数并传递会话响应,以便在屏幕上加载付款卡视图,如下所示:

void initiateSession() {
    MFSDK.initiateSession((MFResult<MFInitiateSessionResponse> result) => {
      if(result.isSuccess()) 
        mfPaymentCardView.load(result.response!)
      else
        print("Response: " + result.error!.toJson().toString().toString());
    });
  }
注意:initiateSession()函数应在MFSDK.init()函数(如上所述)之后调用。
步骤3

之后,您需要处理您的Pay按钮以调用pay()函数,将以下代码复制到您的支付事件处理程序部分:

var request = MFExecutePaymentRequest.constructor(0.100);

mfPaymentCardView.pay(
    request,
    MFAPILanguage.EN,
        (String invoiceId, MFResult<MFPaymentStatusResponse> result) =>
    {
      if (result.isSuccess())
        {
          setState(() {
            print("Response: " + result.response!.toJson().toString());
            _response = result.response!.toJson().toString();
          })
        }
      else
        {
          setState(() {
            print("Error: " + result.error!.toJson().toString());
            _response = result.error!.message!;
          })
        }
    });

GitHub

查看 Github