็ฎ€ไฝ“ไธญๆ–‡ | English

koi_pay_kit

pub package License: MIT

A universal, robust payment engine for Flutter. Supports any payment SDK through pluggable adapters with built-in order caching, crash recovery, polling verification, and guard mechanisms.

Why koi_pay_kit

Payment integration in Flutter is repetitive - every project rebuilds the same order caching, SDK invocation, result verification, and crash recovery logic.

koi_pay_kit solves this by providing a universal engine:

  • ๐Ÿ”Œ Pluggable SDK adapters โ€” integrate any payment SDK (Alipay, WeChat Pay, Stripe, etc.)
  • ๐Ÿ›ก๏ธ Pre-payment Guard โ€” prevents duplicate payments on the same channel
  • ๐Ÿ’พ Crash recovery โ€” orders cached before SDK invocation, survives app kills
  • ๐Ÿ”„ Exponential backoff polling โ€” automatic verification for "processing" states
  • ๐Ÿ“ฆ Channel isolation โ€” independent caches per business channel
  • ๐Ÿ” Silent reconciliation โ€” recover() for startup self-healing
  • ๐Ÿ“Š Observable โ€” optional PaymentLogger callback for monitoring
  • โฑ๏ธ Cache expiry โ€” auto-purge stale orders (default 24h)

Installation

Add the package to your pubspec.yaml:

dependencies:
  koi_pay_kit: ^0.1.0

Then install dependencies:

flutter pub get

Quick Start

import 'package:koi_pay_kit/koi_pay_kit.dart';
import 'package:koi_pay_kit_alipay/koi_pay_kit_alipay.dart';

final engine = PaymentEngine(
  backend: MyOrderBackend(apiClient),
  sdks: {'alipay': AlipaySdk()},
  cache: SharedPrefsCache(prefs),
);

// Pay
final sn = await engine.pay(
  sdkId: 'alipay',
  title: 'ๅ……ๅ€ผ',
  amountInCents: 10000,  // 100.00 ๅ…ƒ
  channel: 2,
  payload: {'days': 30, 'count': 5},
);

// Step 4: your business logic
await myApi.recharge(sn: sn);
await engine.clearOrder(2);

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Your App            โ”‚
โ”‚   โ”œ UI / Providers    โ”‚
โ”‚   โ”” OrderBackend impl โ”‚  โ† You implement this
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   koi_pay_kit         โ”‚
โ”‚   โ”” PaymentEngine     โ”‚  โ† Guard โ†’ Cache โ†’ Invoke โ†’ Verify โ†’ Poll
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   SDK Adapters        โ”‚
โ”‚   โ”œ koi_pay_kit_alipayโ”‚
โ”‚   โ”œ koi_pay_kit_wechatโ”‚  โ† Future
โ”‚   โ”” koi_pay_kit_stripeโ”‚  โ† Future
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Interfaces

Interface Purpose
OrderBackend Server API: create orders + verify payments
PaymentSdk SDK adapter: invoke native payment
PaymentCache Persistence: read/write/delete cached orders

Configuration

PaymentEngine(
  // ...
  config: PaymentConfig(
    pollDelays: [2, 4, 8],        // exponential backoff (seconds)
    cacheExpireMs: 86400000,       // 24 hours
    enableGuard: true,             // prevent duplicate payments
    maxPollAttempts: 10,           // safety limit
  ),
  logger: (level, msg, [err]) => print('[$level] $msg'),
);

Recovery

Call recover() on page init to handle app kills during payment:

final recovery = await engine.recover(channel);
switch (recovery.status) {
  case RecoveryStatus.paymentConfirmed:
    await handleBusiness(recovery.cachedOrder!.sn);
    await engine.clearOrder(channel);
  case RecoveryStatus.expired:
  case RecoveryStatus.paymentFailed:
  case RecoveryStatus.noCachedOrder:
    break; // nothing to do
  case RecoveryStatus.needsManualRecovery:
    showRecoveryBanner(recovery.cachedOrder!);
}

Main Public APIs

  • PaymentEngine โ€” core payment orchestrator
  • PaymentSdk โ€” SDK adapter interface
  • OrderBackend โ€” server API interface
  • PaymentCache โ€” persistence interface
  • SharedPrefsCache โ€” built-in SharedPreferences implementation
  • PaymentConfig โ€” engine configuration
  • PaymentLogger โ€” logging callback
  • PaymentOrder, OrderRequest, CachedOrder โ€” models
  • SdkPayResult, VerifyResult, RecoveryResult โ€” result models
  • PaymentPhase, PendingOrderException, PaymentException โ€” flow types

Documentation

License

MIT. See LICENSE.

Libraries

koi_pay_kit
koi_pay_kit โ€” Universal Payment Engine koi_pay_kit โ€” ้€š็”จๆ”ฏไป˜ๅผ•ๆ“Ž