If you are selling any product or providing any service in your android application, then you should have integrated a feature in your android application where you can allow users to make payment through your application. In this article, we will take a look at the implementation of payment gateway integration in Android. In this article, we will be using the Easy UPI Payment gateway library for adding this feature.
What we are going to build in this article?
We will be creating a simple application in which we will display multiple edit text fields in which we will be allowing users to enter the details for making a payment. After clicking on make payment button we will display a dialog box to our users for making payment through different apps which are installed in users device. Below is the video in which we will get to see what we are going to build in this article.
Step by Step Implementation
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.
Step 2: Adding a dependency for easy payment gateway in android
Navigate to the app > Gradle Scripts > build.gradle(:app) and add the below dependency in the dependencies section.
implementation ‘com.shreyaspatil:EasyUpiPayment:2.0’
After adding this dependency now sync your project and now we will move towards adding internet permissions.
Step 3: Adding internet permissions in AndroidManifest.xml.
Navigate to app > AndroidManifest.xml and add the below code to it.
XML
< uses-permission android:name = "android.permission.INTERNET" /> |
Step 4: Working with the activity_main.xml file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < RelativeLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" tools:context = ".MainActivity" > <!--edit text for entering amount to be paid--> < EditText android:id = "@+id/idEdtAmount" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginStart = "8dp" android:layout_marginTop = "15dp" android:layout_marginEnd = "8dp" android:hint = "Enter Amount to be paid" android:inputType = "numberDecimal" /> <!--edit text for entering the upi id to which we have to make payment--> < EditText android:id = "@+id/idEdtUpi" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/idEdtAmount" android:layout_marginStart = "8dp" android:layout_marginTop = "15dp" android:layout_marginEnd = "8dp" android:hint = "Enter your UPI Id" android:inputType = "text" /> <!--edit text for adding the name of the user whom we have to make payment--> < EditText android:id = "@+id/idEdtName" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/idEdtUpi" android:layout_marginStart = "8dp" android:layout_marginTop = "15dp" android:layout_marginEnd = "8dp" android:hint = "Enter your Name" android:inputType = "text" /> <!--edit text for adding the description for the payment which we are making--> < EditText android:id = "@+id/idEdtDescription" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/idEdtName" android:layout_marginStart = "8dp" android:layout_marginTop = "15dp" android:layout_marginEnd = "8dp" android:hint = "Enter Payment Description" android:inputType = "text" /> <!--button for making a payment--> < Button android:id = "@+id/idBtnMakePayment" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/idEdtDescription" android:layout_margin = "12dp" android:text = "Make Payment" android:textAllCaps = "false" /> <!--text view for displaying transaction status--> < TextView android:id = "@+id/idTVTransactionDetails" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_below = "@id/idBtnMakePayment" android:layout_marginTop = "30dp" android:text = "Transaction Details" android:textAlignment = "center" android:textColor = "@color/purple_700" android:visibility = "gone" /> </ RelativeLayout > |
Step 5: Working with the MainActivity.java file
Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.shreyaspatil.EasyUpiPayment.EasyUpiPayment; import com.shreyaspatil.EasyUpiPayment.listener.PaymentStatusListener; import com.shreyaspatil.EasyUpiPayment.model.TransactionDetails; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity implements PaymentStatusListener { // initializing variables for our edit text and button. private EditText amountEdt, upiEdt, nameEdt, descEdt; private TextView transactionDetailsTV; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initializing all our variables. amountEdt = findViewById(R.id.idEdtAmount); upiEdt = findViewById(R.id.idEdtUpi); nameEdt = findViewById(R.id.idEdtName); descEdt = findViewById(R.id.idEdtDescription); Button makePaymentBtn = findViewById(R.id.idBtnMakePayment); transactionDetailsTV = findViewById(R.id.idTVTransactionDetails); // on below line we are getting date and then we are setting this date as transaction id. Date c = Calendar.getInstance().getTime(); SimpleDateFormat df = new SimpleDateFormat( "ddMMyyyyHHmmss" , Locale.getDefault()); String transcId = df.format(c); // on below line we are adding click listener for our payment button. makePaymentBtn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // on below line we are getting data from our edit text. String amount = amountEdt.getText().toString(); String upi = upiEdt.getText().toString(); String name = nameEdt.getText().toString(); String desc = descEdt.getText().toString(); // on below line we are validating our text field. if (TextUtils.isEmpty(amount) && TextUtils.isEmpty(upi) && TextUtils.isEmpty(name) && TextUtils.isEmpty(desc)) { Toast.makeText(MainActivity. this , "Please enter all the details.." , Toast.LENGTH_SHORT).show(); } else { // if the edit text is not empty then // we are calling method to make payment. makePayment(amount, upi, name, desc, transcId); } } }); } private void makePayment(String amount, String upi, String name, String desc, String transactionId) { // on below line we are calling an easy payment method and passing // all parameters to it such as upi id,name, description and others. final EasyUpiPayment easyUpiPayment = new EasyUpiPayment.Builder() .with( this ) // on below line we are adding upi id. .setPayeeVpa(upi) // on below line we are setting name to which we are making payment. .setPayeeName(name) // on below line we are passing transaction id. .setTransactionId(transactionId) // on below line we are passing transaction ref id. .setTransactionRefId(transactionId) // on below line we are adding description to payment. .setDescription(desc) // on below line we are passing amount which is being paid. .setAmount(amount) // on below line we are calling a build method to build this ui. .build(); // on below line we are calling a start // payment method to start a payment. easyUpiPayment.startPayment(); // on below line we are calling a set payment // status listener method to call other payment methods. easyUpiPayment.setPaymentStatusListener( this ); } @Override public void onTransactionCompleted(TransactionDetails transactionDetails) { // on below line we are getting details about transaction when completed. String transcDetails = transactionDetails.getStatus().toString() + "\n" + "Transaction ID : " + transactionDetails.getTransactionId(); transactionDetailsTV.setVisibility(View.VISIBLE); // on below line we are setting details to our text view. transactionDetailsTV.setText(transcDetails); } @Override public void onTransactionSuccess() { // this method is called when transaction is successful and we are displaying a toast message. Toast.makeText( this , "Transaction successfully completed.." , Toast.LENGTH_SHORT).show(); } @Override public void onTransactionSubmitted() { // this method is called when transaction is done // but it may be successful or failure. Log.e( "TAG" , "TRANSACTION SUBMIT" ); } @Override public void onTransactionFailed() { // this method is called when transaction is failure. Toast.makeText( this , "Failed to complete transaction" , Toast.LENGTH_SHORT).show(); } @Override public void onTransactionCancelled() { // this method is called when transaction is cancelled. Toast.makeText( this , "Transaction cancelled.." , Toast.LENGTH_SHORT).show(); } @Override public void onAppNotFound() { // this method is called when the users device is not having any app installed for making payment. Toast.makeText( this , "No app found for making transaction.." , Toast.LENGTH_SHORT).show(); } } |
Now run your app and see the output of the app.
Note: Make sure to run your app on a real device and you should be having an app for making payments. And put the amount in decimal.
Output: