Files
front-hokm/lib/core/payment/payment_gateway.dart
T

43 lines
2.0 KiB
Dart

/// نتیجه‌ی یک خریدِ فروشگاهی، مستقل از اینکه کدام SDK آن را تولید کرده.
///
/// بک‌اند برای تأییدِ آفلاینِ RSA به [purchaseData] (JSONِ خام) و [signature]
/// نیاز دارد؛ [token] هم برای تأییدِ سمت‌سرور/سازگاری فرستاده می‌شود.
class PurchaseResult {
final bool success;
final String token;
final String purchaseData;
final String signature;
/// پاک‌سازیِ لازم پس از تأییدِ بک‌اند (مثلاً مایکت باید خرید را consume کند).
final Future<void> Function()? onConfirmed;
const PurchaseResult.success({
required this.token,
required this.purchaseData,
required this.signature,
this.onConfirmed,
}) : success = true;
const PurchaseResult.failure()
: success = false,
token = '',
purchaseData = '',
signature = '',
onConfirmed = null;
}
/// انتزاعِ SDKِ پرداختِ درون‌برنامه‌ایِ مخصوصِ هر فروشگاه. هر flavor یک پیاده‌سازی
/// ثبت می‌کند؛ بقیه‌ی اپ از SDK بی‌خبر می‌ماند.
abstract class PaymentGateway {
/// شناسه‌ی فروشگاه که به بک‌اند فرستاده می‌شود (`myket` | `bazaar`).
String get store;
/// جریانِ خریدِ [productSku] (همان UUIDِ محصول در پنلِ فروشگاه) را باز می‌کند.
/// [payload] در فروشگاه ذخیره و در پنلِ توسعه‌دهنده نمایش داده می‌شود؛ اینجا
/// شماره‌ی موبایلِ کاربر را می‌فرستیم تا خرید قابلِ ردیابی باشد.
Future<PurchaseResult> purchase(String productSku, {String payload = ''});
/// اتصالِ اولیه (در صورتِ نیاز). پیش از اولین خرید صدا زده می‌شود.
Future<void> connect() async {}
}