fib_online_payment 1.1.2 copy "fib_online_payment: ^1.1.2" to clipboard
fib_online_payment: ^1.1.2 copied to clipboard

A Flutter package for handling FIB Online Payments, including authentication, payment creation, cancellation, status checks, and refunds.

FIB Online Payment #

A Flutter package for handling FIB Online Payments securely and efficiently.

Features #

  • Authentication: Verifies client credentials to generate access tokens.
  • Create Payment: Initiates payments with flexible parameters and defaults.
  • Check Payment Status: Retrieves real-time payment status updates.
  • Cancel Payment: Cancels pending/unpaid transactions.
  • Refund Payment: Processes refunds for completed transactions.

Installation #

Add to pubspec.yaml:

dependencies:
  fib_online_payment: ^1.1.2

Then, run:

flutter pub get

Service Initialization #

final fibPayment = FibPayment(
  clientId: 'elec-top-up',       // Your application/client ID
  clientSecret: 'your-secret',   // Client Secret key for authentication
  environment: 'dev',            // API environment: dev/stage/prod
);

Parameter Descriptions:

Parameter Required Description
clientId Yes Unique client ID.
clientSecret Yes Unique client Secret key.
environment Yes Determines API endpoint (dev, stage, or prod)

Payment Request Parameters #

When creating payments using PaymentRequest:

PaymentRequest(
  amount: '100.00',                  // Required: Transaction amount
  description: 'Test Payment',       // Required: Human-readable description
  statusCallbackUrl: 'your-url',     // Required: A callback URL
  redirectUri: 'your-redirect-uri',  // Optional: Used to redirect to a specified add or web URL after the payment is done.
  expiresIn: 'PT1H',                 // Optional: expiration duration
  refundableFor: 'PT24H',            // Optional: Refund time
);

Parameter Details:

Parameter Required Default Value Description
amount Yes - Transaction amount as string (e.g., '100.00')
description Yes 'FIB Payment' Payment description shown to users
statusCallbackUrl Yes Platform-default URL A callback URL
redirectUri No Null A redirect URL used to redirect the user after the payment is done.
expiresIn No 'PT8H6M12.345S' Duration until payment expiration
refundableFor No 'PT48H' (48 hours) duration for refund eligibility

Feature Examples #

1. Create Payment #

final payment = await fibPayment.createPayment(
  PaymentRequest(
    amount: '50.00',
    description: 'Coffee Order',
    statusCallbackUrl: 'https://your-app.com/callback',
    redirectUri: 'https://your-app.com',
    expiresIn: 'PT12H', // Expires in 12 hours
  ),
  token,
);
// Returns: 
// PaymentResponse{
//   paymentId: 'PAY-123', 
//   qrCode: '...', 
//   readableCode: '1234-5678',
//   personalAppLink: 'https://personal.dev.first-iraqi-bank.co...', 
//   businessAppLink: 'https://business.dev.first-iraqi-bank.co...', 
//   corporateAppLink: 'https://corporate.dev.first-iraqi-bank.co...',
//   validUntil: '2025-03-05T11:46:24.181Z',
// }

2. Check Payment Status #

final status = await fibPayment.checkPaymentStatus('PAY-123', token);
// Returns: 
// PaymentStatus{
//   paymentId: 'PAY-123',
//   status: 'PAID',
// }

3. Cancel Payment #

await fibPayment.cancelPayment('PAY-123', token);
// Successful cancellation returns HTTP 204 (No Content)

4. Refund Payment #

await fibPayment.refundPayment('PAY-123', token);
// Successful refund initiation returns HTTP 202 (Accepted)

Response Models #

PaymentResponse #

{
  "paymentId": "PAY-123",                                              // Unique payment identifier
  "qrCode": "base64-image-data",                                       // QR code for payment scanning
  "readableCode": "1234-5678",                                         // Human-friendly payment code
  "personalAppLink": 'https://personal.dev.first-iraqi-bank.co...',    // Personal App link
  "businessAppLink": 'https://business.dev.first-iraqi-bank.co...',    // Business App link
  "corporateAppLink": 'https://corporate.dev.first-iraqi-bank.co...',  // Corporate App link
  "validUntil": '2025-03-05T11:46:24.181Z',                            // Payment validity
}

PaymentStatus #

{
  "paymentId": "PAY-123",         // Original payment ID
  "status": "PAID",               // Current status
}

Error Handling #

Wrap operations in try-catch blocks:

try {
  // Payment operations
} catch (e) {
  print('Error: ${e.toString()}');
  // Example error: "API Error: 401 - Invalid credentials"
}

Full Example Usage #

import 'package:flutter/material.dart';
import 'package:fib_online_payment/fib_online_payment.dart';
import 'package:fib_online_payment/src/models/payment_request.dart';
import 'package:fib_online_payment/src/models/payment_status.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // Pass your credentials through the constructor.
  final FibPayment fibPayment = FibPayment(clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', environment: 'YOUR_ENVIRONMENT');

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('FIB Online Payment Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                // Authenticate before performing any operations.
                await fibPayment.authenticate();
                
                // Create a payment.
                final payment = await fibPayment.createPayment(
                  PaymentRequest(
                    amount: '100.00',
                    description: 'Test Payment',
                    statusCallbackUrl: 'https://your-callback-url.com',
                    redirectUri: 'https://your-redirect-url.com'
                  ),
                  token,
                );
                print('Payment Created: ${payment.paymentId}');
                print('Payment QR Code: ${payment.qrCode}');
                print('Payment readable code: ${payment.readableCode}');
                
                // Check payment status.
                final status = await fibPayment.checkPaymentStatus(payment.paymentId, token);
                print('Payment Status: ${status.status}');
                
                // Cancel payment example.
                await fibPayment.cancelPayment(payment.paymentId, token);
                await Future.delayed(Duration(seconds: 5)); // Wait for cancellation to process.
                final postCancelStatus = await fibPayment.checkPaymentStatus(payment.paymentId, token);
                print('Post Cancel Status: ${postCancelStatus.status}');
                
                // Refund payment example.
                await fibPayment.refundPayment(payment.paymentId);
                print('Payment Refunded');
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text('Process Payment'),
          ),
        ),
      ),
    );
  }
}

License #

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

6
likes
140
points
16
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for handling FIB Online Payments, including authentication, payment creation, cancellation, status checks, and refunds.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

flutter, flutter_dotenv, http, json_annotation

More

Packages that depend on fib_online_payment