搜尋套件、儲存庫與 APP 分類

套件詳情v2.6.0

flutter_paystack_plus

將 Paystack 結合至行動與 Web 應用程式,支援拆分付款與訂閱功能。

AndroidiOSWebmacOS
近 30 天下載
774
喜歡數
29
Pub 分數
140

安裝套件

flutter pub add flutter_paystack_plus

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Flutter Paystack Plus 是一個 Flutter 套件,可實現 Paystack 支付解決方案在 Android、iOS、Web 與 macOS 上的無縫整合。支援一次性付款、多方交易的拆分付款以及訂閱管理等核心功能。專為開發電商或 SaaS 應用程式的開發者設計,透過安全且一致的 API 簡化支付處理。該套件提供易用的方法,用於啟動付款、管理訂閱與處理 Webhook。適用於需要強大、可擴展支付處理並支援多平台的應用程式。

適用情境

  • 電子商務結帳
  • 訂閱計費
  • 在供應商之間拆分付款
  • 應用內購買
  • Web 與行動支付處理

主要特色

  • 支援拆分付款
  • 訂閱管理
  • 跨平台相容性
  • 安全支付網關整合
  • Webhook 事件處理

適合對象

  • 行動和網頁電商應用
  • 具有定期計費的SaaS平台
  • 需要供應商分潤的市場
  • 在多個平台上使用 Paystack 的開發者
  • 需要安全交易處理的應用程式

使用建議

  • 需要Paystack帳戶設定
  • 需要正確的環境配置
  • 可能需要後端進行 webhook 驗證
  • 僅限 Paystack 支援的地區
  • 支付期間依賴穩定的互聯網連接

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

flutter_paystack_plus

A Flutter plugin for making payments via the Paystack Payment Gateway — compatible with Android, iOS, and Web.


Features

Feature Mobile (Android/iOS) Web
Card Payment (VISA, Mastercard, etc.) ✅ ✅
Bank Transfer ✅ ✅
USSD ✅ ✅
Mobile Money ✅ ✅
QR Code ✅ ✅
Split Payments ✅ ✅
Subscription / Plan Payments ✅ ✅
Server-side initialization & verification ✅ —

Getting Started

Before using this package, make sure you have a Paystack account and have your public key (and optionally your secret key) ready from the dashboard.


Platform Setup

🌐 Web

Step 1: Create a file at web/paystack_interop.js and paste the following:

function paystackPopUp(publicKey, email, amount, ref, plan, currency, onClosed, callback) {
  let handler = PaystackPop.setup({
    key: publicKey,
    email: email,
    amount: amount,
    ref: ref,
    plan: plan,
    currency: currency,
    onClose: function () {
      onClosed();
    },
    callback: function (response) {
      callback();
    },
  });
  return handler.openIframe();
}

Step 2: In web/index.html, add the Paystack inline script and your interop file inside the <body> tag:

<body>
  <script src="https://js.paystack.co/v1/inline.js"></script>
  <script src="paystack_interop.js"></script>
  ...
</body>

🤖 Android

Set minSdkVersion to 19 or higher in android/app/build.gradle:

defaultConfig {
    applicationId "com.yourapp.id"
    minSdkVersion 19
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

🍎 iOS

No additional setup required.


Parameters

Parameter Required On Description
customerEmail All Email address of the customer
amount All Amount multiplied by 100 (e.g. ₦500 → "50000")
reference All Unique alphanumeric transaction reference
onSuccess All Callback fired when a transaction completes
onClosed All Callback fired when the user cancels or payment fails
publicKey Web only Your Paystack public key
context Mobile only Flutter BuildContext — required to open the WebView
callBackUrl Mobile only Redirect URL configured in your Paystack dashboard — helps the WebView detect when to close
secretKey Mobile (Package init) Your Paystack secret key. Required when you want the package to initialize and verify the transaction.
authorizationUrl Mobile (Server init) Pre-generated Paystack checkout URL from your own server. Use this instead of secretKey to keep your secret key out of the app.
currency Optional Payment currency. Defaults to NGN (Naira). See Supported Currencies
plan Optional Plan code for subscription payments
metadata Optional Extra key-value data attached to the transaction

Note: For mobile, you must provide either secretKey or authorizationUrl — but not both.


Supported Currencies

Paystack supports standard ISO 4217 currency codes. Pass the desired code to the currency parameter (e.g. 'NGN', 'USD'):

Currency Code Currency Name Primary Region / Availability
NGN Nigerian Naira Nigeria (default)
USD United States Dollar Nigeria & Kenya (for eligible accounts)
GHS Ghanaian Cedi Ghana
ZAR South African Rand South Africa
KES Kenyan Shilling Kenya
XOF West African CFA Franc Côte d'Ivoire
EGP Egyptian Pound Egypt

Note: Available currencies depend on where your Paystack merchant account is registered. Remember that transaction amounts must always be passed in the subunit of the chosen currency (e.g. multiplied by 100 for Kobo/Cents).


Usage

Mode 1 — Package handles initialization & verification

The simplest mode. Pass your secretKey and the package will:

  1. Call Paystack's /transaction/initialize to get the checkout URL
  2. Open the checkout in a WebView
  3. Call /transaction/verify/{reference} to confirm the result
  4. Fire onSuccess or onClosed accordingly
await FlutterPaystackPlus.openPaystackPopup(
  context: context,
  customerEmail: 'customer@example.com',
  amount: (amount * 100).toString(), // e.g. 500 * 100 = 50000
  reference: DateTime.now().millisecondsSinceEpoch.toString(),
  secretKey: 'sk_live_your_secret_key',
  callBackUrl: 'https://your-callback-url.com', // from your Paystack dashboard
  currency: 'NGN',
  onSuccess: () {
    debugPrint('Payment successful!');
  },
  onClosed: () {
    debugPrint('Payment cancelled or failed.');
  },
);

Mode 2 — Server-side initialization & verification

The more secure approach. Your backend holds the secret key — the app never sees it. You:

  1. Call your server to initialize a Paystack transaction and receive the authorization_url
  2. Pass that URL to authorizationUrl
  3. The package opens it in a WebView and fires onSuccess when the flow ends
  4. In onSuccess, call your server to verify the transaction using the reference
// Step 1: Initialize on your server
final authUrl = await myServer.initializePayment(
  email: 'customer@example.com',
  amount: 50000,
  reference: 'unique-ref-123',
);

// Step 2: Open the Paystack WebView
await FlutterPaystackPlus.openPaystackPopup(
  context: context,
  customerEmail: 'customer@example.com',
  amount: '50000',
  reference: 'unique-ref-123',
  authorizationUrl: authUrl, // from your server
  callBackUrl: 'https://your-callback-url.com',
  onSuccess: () {
    // Step 3: Verify on your server
    myServer.verifyPayment('unique-ref-123');
  },
  onClosed: () {
    debugPrint('Payment cancelled.');
  },
);

Advanced: Split Payments (Web)

To enable split payments, update your paystack_interop.js handler:

Single subaccount:

let handler = PaystackPop.setup({
  // ...existing fields...
  subaccount: 'ACCT_osl1da48je0lez6', // required
  transaction_charge: '2500',          // optional: flat fee override
  bearer: 'subaccount',               // optional: who bears transaction charges
});

Multiple subaccounts (split code):

let handler = PaystackPop.setup({
  // ...existing fields...
  split_code: 'SPL_98WF13Eb3w', // required
});

Advanced: Subscription Payments (Web)

To collect subscription payments, add a plan to your paystack_interop.js handler:

let handler = PaystackPop.setup({
  // ...existing fields...
  plan: 'PLN_your_plan_code', // required: plan code from your dashboard
  quantity: '1',              // optional: quantity multiplier for the plan amount
});

For mobile, simply pass the plan parameter directly to openPaystackPopup.


Contributors

This package stands on the shoulders of great contributors:


Contributing & Issues

Contributions are very welcome! If you experience a bug or want to request a feature, please open an issue and be as descriptive as possible. Thank you! 🙏

所屬分類

依賴

依賴清單 2 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。