Fyber Flutter SDK
Official Fyber Payment SDK for Flutter. Process payments, manage customers, handle subscriptions, and more.
Installation
Add to your pubspec.yaml:
dependencies:
fyber: ^1.0.0
Then run:
flutter pub get
Quick Start
import 'package:fyber/fyber.dart';
// Initialize the client
final fyber = Fyber(
apiKey: 'sk_test_your_api_key',
environment: 'test', // or 'live'
);
// Create a payment
final payment = await fyber.payments.create(CreatePaymentRequest(
amount: 1000, // $10.00 in cents
currency: 'USD',
source: CardSource(
number: '4111111111111111',
expMonth: '12',
expYear: '2025',
cvv: '123',
),
));
print('Payment ${payment.id}: ${payment.status}');
Features
Payments
// Create a payment
final payment = await fyber.payments.create(CreatePaymentRequest(
amount: 1000,
currency: 'USD',
source: CardSource(...),
));
// Capture an authorized payment
await fyber.payments.capture(payment.id);
// Cancel a payment
await fyber.payments.cancel(payment.id);
// List payments
final payments = await fyber.payments.list(ListPaymentsOptions(
limit: 20,
status: 'succeeded',
));
Customers
// Create a customer
final customer = await fyber.customers.create(CreateCustomerRequest(
email: 'john@example.com',
name: 'John Doe',
));
// Update a customer
await fyber.customers.update(customer.id, UpdateCustomerRequest(
name: 'John Smith',
));
// List customers
final customers = await fyber.customers.list();
Tokens (Saved Cards)
// Tokenize a card
final token = await fyber.tokens.create(CreateTokenRequest(
customerId: customer.id,
card: CardSource(
number: '4111111111111111',
expMonth: '12',
expYear: '2025',
cvv: '123',
),
purpose: TokenPurpose.recurring,
));
// Use token for payment
final payment = await fyber.payments.create(CreatePaymentRequest(
amount: 1000,
currency: 'USD',
tokenId: token.id,
));
// Set as default
await fyber.tokens.setDefault(token.id);
// List customer's tokens
final tokens = await fyber.tokens.listByCustomer(customer.id);
Checkout Sessions
final session = await fyber.checkout.create(CreateCheckoutRequest(
currency: 'USD',
lineItems: [
CheckoutLineItem(name: 'Product', amount: 2999, quantity: 1),
],
successUrl: 'https://example.com/success',
cancelUrl: 'https://example.com/cancel',
));
// Redirect to session.url
Subscriptions
// Create subscription
final subscription = await fyber.subscriptions.create(CreateSubscriptionRequest(
customerId: customer.id,
tokenId: token.id,
amount: 999,
currency: 'USD',
interval: SubscriptionInterval.month,
trialDays: 14,
));
// Cancel subscription
await fyber.subscriptions.cancel(subscription.id, atPeriodEnd: true);
// Pause/resume
await fyber.subscriptions.pause(subscription.id);
await fyber.subscriptions.resume(subscription.id);
Installments (BNPL)
// Check eligibility
final eligibility = await fyber.installments.checkEligibility(
CheckEligibilityRequest(
customerId: customer.id,
amount: 50000,
currency: 'USD',
),
);
if (eligibility.eligible) {
// Create installment plan
final plan = await fyber.installments.create(CreateInstallmentRequest(
customerId: customer.id,
tokenId: token.id,
amount: 50000,
currency: 'USD',
installments: 4,
frequency: InstallmentFrequency.biweekly,
));
}
Webhooks
// Verify webhook signature
try {
final event = Fyber.verifyWebhook(
payload: rawBody,
signature: request.headers['fyber-signature']!,
secret: 'whsec_your_secret',
);
switch (event['type']) {
case 'payment.succeeded':
// Handle successful payment
break;
case 'subscription.canceled':
// Handle cancellation
break;
}
} on FyberException catch (e) {
print('Invalid webhook: ${e.message}');
}
Error Handling
try {
final payment = await fyber.payments.create(...);
} on FyberException catch (e) {
print('Error: ${e.message}');
print('Code: ${e.code}');
print('Status: ${e.statusCode}');
if (e.isAuthError) {
// Invalid API key
} else if (e.isValidationError) {
// Invalid request data
} else if (e.isRateLimitError) {
// Too many requests
}
}
Configuration
final fyber = Fyber(
apiKey: 'sk_test_xxx',
environment: 'test', // 'test' or 'live'
timeout: Duration(seconds: 30),
);
// Don't forget to close when done
fyber.close();
Requirements
- Dart SDK >= 3.0.0
- Flutter >= 3.0.0
License
MIT License - see LICENSE file for details.
Libraries
- fyber
- Fyber Payment SDK for Flutter