Skip to content

HayBTech/haybtech_flutter_sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HayBTech Flutter SDK

Official Flutter SDK for the HayBTech Payment Gateway -- integrate mobile money payments into your Flutter apps.

Pub Flutter License


SECURITY WARNING

NEVER use your Secret Key (sk_...) in a Flutter app. Secrets stored in mobile binaries (APK/IPA) can be easily extracted by attackers.

The Flutter SDK only accepts Public Keys (pk_...). All sensitive operations (like creating a payment) must be performed on your backend server using our server-side SDKs (PHP, Node.js, Python, Ruby, Java, Go, .NET).


Installation

Add this to your pubspec.yaml:

dependencies:
  haybtech_flutter_sdk: ^1.0.0
  webview_flutter: ^4.0.0

Then run:

flutter pub get

Secure Workflow

Flutter App                    Your Backend                  HayBTech API
    |                               |                            |
    |-- 1. Send order details ----->|                            |
    |                               |-- 2. Create payment ------>|
    |                               |<--- paymentUrl ------------|
    |<-- 3. Return paymentUrl ------|                            |
    |                               |                            |
    |-- 4. Open HayBTechCheckout -->|                            |
    |   (WebView with paymentUrl)   |                            |
  1. Your Flutter App sends order details to Your Backend.
  2. Your Backend creates a payment via HayBTech API (using Secret Key) and returns the paymentUrl.
  3. Your Flutter App receives the paymentUrl and opens it using the HayBTechCheckout widget.

Usage

1. Initialize Client

import 'package:haybtech_flutter_sdk/haybtech_flutter_sdk.dart';

final haybtech = HayBTechClient('pk_test_your_public_key');

2. Render Checkout

import 'package:flutter/material.dart';
import 'package:haybtech_flutter_sdk/haybtech_flutter_sdk.dart';

class PaymentPage extends StatelessWidget {
  final String paymentUrl; // Received from your backend

  const PaymentPage({super.key, required this.paymentUrl});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Paiement HayBTech")),
      body: HayBTechCheckout(
        paymentUrl: paymentUrl,
        onSuccess: (url) {
          Navigator.pop(context);
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text("Paiement reussi !")),
          );
        },
        onCancel: (url) => Navigator.pop(context),
        onFailure: (url) {
          Navigator.pop(context);
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text("Paiement echoue.")),
          );
        },
      ),
    );
  }
}

3. Navigate to Payment

// After receiving paymentUrl from your backend
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (_) => PaymentPage(paymentUrl: paymentUrl),
  ),
);

Backend Integration Example

Since the Flutter SDK only handles the frontend, your backend must generate the paymentUrl. Here is an example of what your backend team needs to do using our Server SDKs:

PHP Backend (using haybtech/php-sdk):

$result = HayBTech::payments()->create([
    'merchant_ref' => 'ORDER-123',
    'amount'       => 5000,
    'currency'     => 'XOF',
    'return_url'   => 'https://haybtech.sn/status=success', // Intercepted by Flutter
    'cancel_url'   => 'https://haybtech.sn/status=cancelled', // Intercepted by Flutter
]);

// Send this URL to your Flutter app
echo json_encode(['paymentUrl' => $result['data']['payment_url']]);

Node.js Backend (using @haybtech/sdk):

const payment = await haybtech.payments.create({
    merchant_ref: 'ORDER-123',
    amount: 5000,
    currency: 'XOF',
    return_url: 'https://haybtech.sn/status=success',
    cancel_url: 'https://haybtech.sn/status=cancelled'
});

// Send payment.data.payment_url to your Flutter app

Callback Events

Callback Triggered When
onSuccess Payment completed successfully
onCancel Customer cancelled the payment
onFailure Payment failed or an error occurred

Platform Configuration

Android

Add internet permission in android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET"/>

iOS

No additional configuration required. WebView is supported natively.


Security Features

  • Public Key Enforcement: The SDK throws an ArgumentError if a Secret Key (sk_...) is used.
  • Secure WebView Isolation: Uses webview_flutter with isolated navigation delegates.
  • No Sensitive Data on Device: The SDK acts as a pure UI layer; no card or credential data ever touches the mobile persistent storage.
  • URL Monitoring: Navigation delegate detects return/cancel/failure URLs without exposing internal state.

Requirements

Requirement Version
Flutter 3.0+
Dart 2.17+
webview_flutter 4.0+
Android SDK 21+
iOS 12.0+

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages