Zoho Payments Flutter SDK
A Flutter plugin for integrating Zoho Payments checkout into your Android and iOS apps. Accept payments via cards, net banking, and UPI with a pre-built, secure checkout UI.
Features
- Pre-built checkout UI — no need to build payment forms
- Supports Card, Net Banking, and UPI payment methods
- Sandbox and Live environments for testing and production
- US and India domain support
- Type-safe result handling with Dart sealed classes
Requirements
| Platform | Minimum Version |
|---|---|
| Dart SDK | 3.4.0+ |
| Flutter | 3.22.0+ |
| Android | API 26 (Android 8.0)+ |
| iOS | 15.6+ |
Installation
Add the dependency to your pubspec.yaml:
dependencies:
zoho_payments_flutter_sdk: ^1.0.0
Then run:
flutter pub get
Android Setup
Add the Zoho Payments SDK maven repository to your project-level settings.gradle (or build.gradle):
allprojects {
repositories {
maven { url 'https://maven.zohodl.com' }
}
}
Quick Start
import 'package:zoho_payments_flutter_sdk/zoho_payments_flutter_sdk.dart';
// 1. Create an SDK instance
final sdk = ZohoPaymentsFlutterSdk();
// 2. Initialize with your credentials
await sdk.initialize(
apiKey: 'your_api_key',
accountId: 'your_account_id',
);
// 3. Configure checkout options
final options = ZohoPaymentsCheckoutOptions(
paymentSessionId: 'your_payment_session_id',
);
// 4. Show checkout and handle the result
final result = await sdk.showCheckout(
options,
domain: ZohoPaymentsDomain.india,
environment: ZohoPaymentsEnvironment.live,
);
switch (result) {
case ZohoPaymentsSuccess():
print('Payment ID: ${result.paymentId}');
print('Signature: ${result.signature}');
case ZohoPaymentsFailure():
print('Error: ${result.code} - ${result.message}');
}
Usage
Step 1: Obtain Credentials
Get your API Key and Account ID from the Zoho Payments Dashboard.
Step 2: Create a Payment Session
Create a payment session on your backend using the Payments Session API. The API returns a payment_session_id that you pass to the Flutter SDK.
Step 3: Initialize the SDK
Call initialize() before showing the checkout. This sets up the SDK with your merchant credentials.
final sdk = ZohoPaymentsFlutterSdk();
await sdk.initialize(
apiKey: 'your_api_key',
accountId: 'your_account_id',
);
Step 4: Configure Checkout Options
Create a ZohoPaymentsCheckoutOptions object with the payment session ID and optional customer details:
final options = ZohoPaymentsCheckoutOptions(
paymentSessionId: 'ps_xxxxxxxxxxxxxxx',
// Optional fields:
description: 'Order #1234',
invoiceNumber: 'INV-1234',
referenceNumber: 'REF-5678',
name: 'John Doe',
email: 'john@example.com',
phone: '+919876543210',
paymentMethod: ZohoPaymentsPaymentMethod.upi, // Pre-select a payment method
);
Step 5: Show Checkout
Launch the payment checkout UI. The method returns a ZohoPaymentsResult — either ZohoPaymentsSuccess or ZohoPaymentsFailure.
final result = await sdk.showCheckout(
options,
domain: ZohoPaymentsDomain.india, // or ZohoPaymentsDomain.us
environment: ZohoPaymentsEnvironment.live, // or .sandbox for testing
);
Step 6: Handle the Result
Use Dart's pattern matching on the sealed ZohoPaymentsResult class:
switch (result) {
case ZohoPaymentsSuccess():
// Payment succeeded
print('Payment ID: ${result.paymentId}');
print('Signature: ${result.signature}');
if (result.mandateId != null) {
print('Mandate ID: ${result.mandateId}');
}
// Verify the signature on your backend before fulfilling the order
case ZohoPaymentsFailure():
// Payment failed or was cancelled
print('Error Code: ${result.code}');
print('Error Message: ${result.message}');
}
Or use is checks:
if (result is ZohoPaymentsSuccess) {
// Handle success
} else if (result is ZohoPaymentsFailure) {
// Handle failure
}
Documentation
License
MIT License. See LICENSE for details.