# Android SDK

To integrate the PayKun Payment Gateway in your mobile app which can enable you to receive payments from your customers using the Android Devices you need to follow a few easy steps.

For the video tutorial to Integrate PayKun Payment Gateway in your Android App you may click [here](https://youtu.be/_6z8xW3KsoU)

Get the demo app from here - [Paykun Demo Android App](https://github.com/paykun-code/android_sdk_v2)

### **Checkout Android SDK requires**

* A registered [PayKun Merchant Account](https://dashboard.paykun.com/login)

### &#xD;How to install SDK in your app?

We have distributed our SDK via [Maven Central Repository](https://mvnrepository.com/artifact/com.paykun.sdk/paykun-androidx-sdk). You can add our latest PayKun SDK directly to your build.gradle file in the dependency section using the below given line:

```
implementation 'com.paykun.sdk:paykun-androidx-sdk:1.1.17'
```

```java
allprojects {
    repositories {
        mavenCentral()
    }
}
```

### Performing transaction

```java
// Initiate Transaction
public void createPayment()
{
  // Required data to be provided
  String merchantIdLive="<Marcent Id>";
  String accessTokenLive="<Mobile Access Token>";
  String productName="<Product Name>";
  String orderId= String.valueOf(System.currentTimeMillis()); // You can change this based on your requirement
  String amount="<Amount>";
  String customerName="<Customer Name>";
  String customerPhone="<Customer Mobile No>";
  String customerEmail="<Customer Email Id>";
  
  // You can customize which payment method should be provided
  // Here is the example for payment method customization, This is optional.
  
  // Create Map for payment methods
  HashMap<PaymentTypes, PaymentMethods> payment_methods = new HashMap<>();
  
  // Create payment method object to be added in payment method Map
  PaymentMethods paymentMethod = new PaymentMethods();
  paymentMethod.enable=true; // True if you want to enable this method or else false, default is true
  paymentMethod.priority=1; // Set priority for payment method order at checkout page
  paymentMethod.set_as_prefered=true; // If you want this payment method to show in prefered payment method then set it to true
  
  // Add payment method into our Map
  payment_methods.put(PaymentTypes.UPI, paymentMethod);
  
  // Example for netbanking
  paymentMethod = new PaymentMethods();
  paymentMethod.enable=true;
  paymentMethod.priority=2;
  paymentMethod.set_as_prefered=true;
  paymentMethod.sub_methods.add(new Sub_Methods(SubPaymentTypes.SBIN,1));
  paymentMethod.sub_methods.add(new Sub_Methods(SubPaymentTypes.HDFC,1));
  payment_methods.put(PaymentTypes.NB, paymentMethod);
  
  // Example for wallet
  paymentMethod = new PaymentMethods();
  paymentMethod.enable=false;
  paymentMethod.priority=3;
  paymentMethod.set_as_prefered=false;
  payment_methods.put(PaymentTypes.WA, paymentMethod);
  
  // Example for card payment
  paymentMethod = new PaymentMethods();
  paymentMethod.enable=true;
  paymentMethod.priority=3;
  paymentMethod.set_as_prefered=true;
  payment_methods.put(PaymentTypes.DCCC, paymentMethod);
  
  // Example for UPI Qr
  paymentMethod = new PaymentMethods();
  paymentMethod.enable=true;
  paymentMethod.priority=3;
  paymentMethod.set_as_prefered=true;
  payment_methods.put(PaymentTypes.UPIQRCODE, paymentMethod);
  
  // Example for EMI
  paymentMethod = new PaymentMethods();
  paymentMethod.enable=true;
  paymentMethod.priority=3;
  paymentMethod.set_as_prefered=true;
  payment_methods.put(PaymentTypes.EMI, paymentMethod);
  
  // Now, Create object for paykun transaction
  PaykunTransaction paykunTransaction=new PaykunTransaction(merchantIdLive,accessTokenLive,true);
  
  try {
    // Set all request data
    paykunTransaction.setCurrency("INR");
    paykunTransaction.setCustomer_name(customerName);
    paykunTransaction.setCustomer_email(customerEmail);
    paykunTransaction.setCustomer_phone(customerPhone);
    paykunTransaction.setProduct_name(productName);
    paykunTransaction.setOrder_no(orderId);
    paykunTransaction.setAmount(amount);
    paykunTransaction.setLive(true); // Currently only live transactions is supported so keep this as true
    
    // Optionally you can customize color and merchant logo for checkout page
    paykunTransaction.setTheme_color("<COLOR CODE>");
    paykunTransaction.setTheme_logo("<LOGO URL>");
    
    // Set the payment methods Map object that we have prepared above, this is optional
    paykunTransaction.setPayment_methods(payment_methods);
    
    new PaykunApiCall.Builder(PaymentActivity.this).sendJsonObject(paykunTransaction);
  } catch (Exception e) {
    e.printStackTrace();
  }
}
```

### **Handling transaction callback (Response)**

* &#x20;*You will get the result in* PaymentActivity *class after sending your data to Paykun.*
* Handling Payment callback, This Activity/Fragment Must implement PaykunResponseListener interface
* This interface provides callback methods ‘onPaymentSuccess’ and ‘onPaymentError’

```java
public class PaymentActivity extends AppCompatActivity implements PaykunResponseListener 
{
  @Override
    public void onPaymentSuccess(PaymentMessage message) {
        Log.e("onPaymentSuccess",message.toString());
        Toast.makeText(this,"Your Transaction is Success With Id "+message.getTransactionId(),Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPaymentError(PaymentMessage message) {
        if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_CANCELLED)){
            // do your stuff here
            Toast.makeText(this,"Your Transaction is cancelled",Toast.LENGTH_SHORT).show();
        }
        else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_FAILED)){
            // do your stuff here
            Toast.makeText(this,"Your Transaction is failed",Toast.LENGTH_SHORT).show();
        }
        else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_NETWORK_NOT_AVAILABLE)){
            // do your stuff here
            Toast.makeText(this,"Internet Issue",Toast.LENGTH_SHORT).show();

        }else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_SERVER_ISSUE)){
            // do your stuff here
            Toast.makeText(this,"Server issue",Toast.LENGTH_SHORT).show();
        }else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_ACCESS_TOKEN_MISSING)){
            // do your stuff here
            Toast.makeText(this,"Access Token missing",Toast.LENGTH_SHORT).show();
        }
        else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_MERCHANT_ID_MISSING)){
            // do your stuff here
            Toast.makeText(this,"Merchant Id is missing",Toast.LENGTH_SHORT).show();
        }
        else if(message.getResults().equalsIgnoreCase(PaykunHelper.MESSAGE_INVALID_REQUEST)){
            Toast.makeText(this,"Invalid Request",Toast.LENGTH_SHORT).show();
        }
    }
}
```

#### For any Assistance :

In case of any query, please contact to <tech@paykun.com>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.paykun.com/technical-guide/mobile-integration/android-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
