Jio Payment SDK for Flutter

pub package


πŸ“‘ Table of Contents

  1. Overview
  2. Features
  3. Installation
  4. Usage
  5. Security
  6. ProGuard / Obfuscation

πŸ“– Overview

The Jio Payment SDK provides a seamless way to integrate Jio Payments (UPI, NetBanking, Cards, QR, VPA) into your Flutter applications.
It’s secure, fast, and customizable, built for production-grade payment flows.


✨ Features

  • πŸ”’ Secure Jio Payments integration
  • πŸ’³ Supports UPI, NetBanking, QR, VPA, Cards
  • πŸ“¦ Easy to add and configure
  • 🎨 Customizable merchant branding
  • πŸ“± Example app included

πŸ“¦ Installation

Add the dependency to your pubspec.yaml:

dependencies:
  jio_payment_sdk: ^0.0.8

Then run:

flutter pub get

⚑ Usage

Import the SDK:

import 'package:jio_payment_sdk/jio_payment_sdk.dart';

Initialize payments:

To initialize the Jio Payment SDK, you need to call JioPaymentSdk.initializeJioPayments() with the required configuration.

JioPaymentSdk.initializeJioPayments(
    /// Required Params.............................
    context,
    callback: this,
    amount: am,
    env: JioPaymentEnv.uat, // Change to JioPaymentEnv.prod in production
    merchantId: 'JP2000000000031',
    aggId: "",
    secretKey: "abc",
    email: 'test@gmail.in',
    userName: 'Test User',
    merchantName: 'Reliance',
    merchantImage: "asset/Ajio logo.png",
    merchantTrId:merchantTxnNo() ,
    isAssetMerchantImage: true,


    /// Optional Params.............................
    orderSummary: OrderSummary(title: "Order Summary", items: orderDetailList),
    addlParam1: "",
    addlParam2: "",
    theme: CustomTheme(primaryColor: const Color.fromRGBO(227, 155, 43, 1), secondaryColor: Colors.black87),
    paymentMethod: PaymentMethod.netBanking,
    allowedPaymentTypes: ["CARD", "NB", "UPI_QR","UPI_INTENT","UPI_VPA"],
    timeOut: 1000,

);

Callback Handling

Your widget’s state should implement the PaymentCallback interface to handle payment results.

@override
void onPaymentCompletedResponse(PaymentResult result) {
  setState(() => _isPaying = false);

  if (result.success) {
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(
        content: Text("Payment Successful πŸŽ‰"),
        backgroundColor: Colors.green,
      ),
    );
    Future.delayed(const Duration(seconds: 2), () {
      Navigator.pop(context);
    });
  } else {
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(
        content: Text("Payment Failed ❌"),
        backgroundColor: Colors.red,
      ),
    );
    _showFailureDialog();
  }
}

Parameters

Parameter Description
amount Amount to be charged (double)
env Environment (JioPaymentEnv.uat or JioPaymentEnv.prod)
merchantId Provided by JioPay
secretKey Secret key for authentication
merchantTrId Unique transaction ID
orderSummary Details of products in the order
theme Customize payment UI colors
allowedPaymentTypes List of allowed payment modes (CREDIT_CARD, DEBIT_CARD, NB, UPI_QR, UPI_INTENT, UPI_VPA)
timeOut Timeout in seconds for transaction

Open Checkout

In this example, the checkout is triggered in initState() so the payment flow starts as soon as the screen opens.

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    _startPayment();
  });
}

πŸ”’ Security

  • ❌ Do not hardcode sensitive keys in your app.
  • βœ… Always keep your secretKey secure.
  • πŸ”„ Rotate keys regularly.
  • πŸ›‘οΈ Enable obfuscation in production builds.

πŸ›‘οΈ ProGuard / Obfuscation

For Android builds:

flutter build apk --release --obfuscate --split-debug-info=build/debug-info

If you are using ProGuard, add these rules:

-keepattributes *Annotation*
-dontwarn com.yourcompany.jio_payment_sdk.**
-keep class com.yourcompany.jio_payment_sdk.** {*;}

Libraries

jio_payment_sdk