A better implementation of myfatoorah_flutter
myfatoorah_flutter
In order to simplify the integration of your application with MyFatoorah payment platforms, we have developed
a cutting-edge plugin that works smoothly with your application and provide you with a simple way to embed our payment
functions within your application.
The plugin will save your efforts and time instead of integrating with our API using normal API calls, and will allow
you to have the setup ready in a quick, modern and secured way.
Prerequisites
In order to have the plugin integration working on live environment, please refer to the section
Prerequisites
and read it for more details
Integration
Installation
1. Add MyFatoorah plugin to your pubspec.yaml file.
dependencies:
myfatoorah_flutter: ^2.1.0
2. Install the plugin by running the following command.
$ flutter pub get
Usage
Inside your Dart code do the following:
1. To start using MyFatoorah plugin, import it into your Flutter app.
import 'package:myfatoorah_flutter/myfatoorah_flutter.dart';
2. Initiate MyFatoorah Plugin inside initState().
MFSDK.init(<Put API URL here>, <Put your API token key here>);
- You can get the
API URL
andAPI Token Key
for testing from here - Once your testing is finished, simply replace the testing API URL / API token key with the live information, click
here for more information.
3. (Optional).
-
Use the following lines if you want to set up the properties of AppBar.
MFSDK.setUpAppBar( title: "MyFatoorah Payment", titleColor: Colors.white, // Color(0xFFFFFFFF) backgroundColor: Colors.black, // Color(0xFF000000) isShowAppBar: true); // For Android platform only
-
And use this line, if you want to hide the AppBar. Note, if the platform is iOS, this line will not affected
MFSDK.setUpAppBar(isShowAppBar: false);
Initiate / Execute Payment
-
Initiate Payment: this step will simply return you all available Payment Methods for the account with the actual
charge that the customer will pay on the gateway.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) } });
-
Execute Payment: once the payment has been initiated, this step will do execute the actual transaction creation at
MyFatoorah platform and will return to your application the URL to redirect your customer to make the payment.// 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) } });
-
As a good practice, you don’t have to call the Initiate Payment function every time you need to execute payment, but
you have to call it at least once to save the PaymentMethodId that you will need to call Execute Payment
Direct Payment / Tokenization
You have to know the following steps to understand how it works:
-
Get the payment method that allows Direct Payment by calling initiatePayment to get paymentMethodId
-
Collect card info from user MFCardInfo(cardNumber: “51234500000000081”, cardExpiryMonth: “05”, cardExpiryYear: “21”, cardSecurityCode: “100”, saveToken: false)
-
If you want to save your credit card info and get a token for next payment you have to set saveToken: true and you will get the token in the response read more in Tokenization
-
If you want to execute a payment through a saved token you have use
MFCardInfo(cardToken: "put your token here")
-
Now you are ready to execute the payment, please check the following sample code.
// The value 2 is the paymentMethodId of Visa/Master payment method.
// You should call the “initiatePayment” API to can get this id and the ids of all other payment methods
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) } });
Send Payment (Offline)
This will allow you to generate a payment link that can be sent by any channel we support and collect it once it’s
paid by your customer
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)
}
});
Payment Enquiry
This will enable your application to get the full details about a certain invoice / payment
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)
}
});
Embedded Payment (new)
Introduction
If you would like your customer to complete the payment on your checkout page without being redirected to another page (except for the 3D Secure
page) and the PCI DSS
compliance is a blocker, MyFatoorah embedded payment feature is your optimum solution.
Usage
Step 1:
Create instance of MFPaymentCardView
and add it to your build()
function like the following:
@override
Widget build(BuildContext context) {
return createPaymentCardView();
}
createPaymentCardView() {
mfPaymentCardView = MFPaymentCardView();
return mfPaymentCardView;
}
Note: you could custom a lot of properties of the payment card view like the following:
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",
);
Step 2:
You need to call initiateSession()
function to create session. You need to do this for each payment separately. Session
is valid for only one payment. and inside it’s success state, call load()
function and pass it the session response, to load the payment card view on the screen, like the following:
void initiateSession() {
MFSDK.initiateSession((MFResult<MFInitiateSessionResponse> result) => {
if(result.isSuccess())
mfPaymentCardView.load(result.response!)
else
print("Response: " + result.error!.toJson().toString().toString());
});
}
Note: The initiateSession()
function should called after MFSDK.init()
function (that we mentioned above).
Step 3:
After that, you need to handle your Pay
button to call the pay()
function, copy the below code to your pay event handler section:
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!;
})
}
});