razorpay / razorpay-flutter

Razorpay Flutter Plugin
MIT License
106 stars 149 forks source link

Help Required: Unable to integrate razorpay with flutter #261

Open SiddheshKanawade opened 2 years ago

SiddheshKanawade commented 2 years ago

Description

I am not able to integrate flutter with razorpay. I have refereed to the official documentation but couldn't resolve the issue. Ideally, on clicking on the button, it should initiate the razorpay instance but in my case nothing happens, rather I get some error in terminal. I have provided relevant information below. Any help is highly appreciated.

Flutter Version :

dependencies:
  async: ^2.8.2
  cupertino_icons: ^1.0.2
  dropdown_date_picker: ^0.1.1+2
  flutter:
    sdk: flutter
  google_place: ^0.4.7
  hexcolor: ^2.0.7
  http: ^0.13.4
  intl: ^0.17.0
  modal_progress_hud_nsn: ^0.1.0-nullsafety-1
  rflutter_alert: ^2.0.4
  sms_autofill: ^2.2.0
  snippet_coder_utils: ^1.0.12
  flutter_svg: ^1.1.1+1
  razorpay_flutter: 1.3.2

dev_dependencies:
  flutter_lints: ^2.0.1
  flutter_test:
    sdk: flutter

flutter sdk version = 21

Code

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:razorpay_flutter/razorpay_flutter.dart';
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/framework.dart';

class PaymentScreen extends StatefulWidget {
  const PaymentScreen({Key? key}) : super(key: key);

  @override
  State<PaymentScreen> createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  // RAZORPAY INSTANCE
  late Razorpay _razorpay;

  @override
  void initState() {
    // TODO: implement initState
    _razorpay = Razorpay();
    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
    _razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
    super.initState();
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) {
    // Do something when payment succeeds
    print("Paymnet Succeed");
  }

  void _handlePaymentError(PaymentFailureResponse response) {
    // Do something when payment fails
    print("Payment failed");
  }

  void _handleExternalWallet(ExternalWalletResponse response) {
    // Do something when an external wallet was selected
    print("externalhandler used");
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    _razorpay.clear();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Text("Payment Gateway"),
            CupertinoButton(
              child: Text("Pay Now"),
              color: Colors.pink[300],
              onPressed: () {
                // PAYMENT
                openCheckout;
              },
            )
          ],
        ),
      ),
    );
  }

  void openCheckout() async {
    var options = {
      'key': 'rzp_test_9UYFdFVTHCqjuq',
      'amount': 500, //in the smallest currency sub-unit // in paise
      'name': 'Company Name',
      'order_id': 'order_Jyj6aKtnrkWrOu', // Generate order_id using Orders API
      'description': 'Screening Cost',
      'timeout': 60, // in seconds
      'prefill': {
        'contact': '7488165456',
        'email': 'sample@gmail.com'
      }
    };
    try {
      _razorpay.open(options);
    } catch (e) {
      debugPrint('Error: e');
    }
  }
}

After doing some research, I came across some stackoverflow issues, which suggested some changes in build.gradle. Even after doing those, I was not able to resolve the issue.

build.gradle:

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.agreement_page"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
        minSdkVersion 21
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
            minifyEnabled false
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

}

I am unable to figureout why I am getting this issue.