Introduction

Backend JAVA SDK to integrate PhonePe PG APIs.

anchor image
Copied !

Requirements:

Add the dependency to your project’s POM file:

Maven users

Add the dependency to your project’s POM file:

<dependency> <groupId>com.phonepe</groupId> <artifactId>pg-sdk-java</artifactId> <version>2.1.0</version> </dependency>

Add the PhonePe repository where the PhonePe SDK artifact is hosted to the distributionManagement:

<repositories> <repository> <id>io.cloudrepo</id> <name> PhonePe JAVA SDK</name> <url>https://phonepe.mycloudrepo.io/public/repositories/phonepe-pg-sdk-java</url> </repository> </repositories>

Gradle users

Add the following to your project’s build.gradle file.

In the repositories section, add the URL for the PhonePe repository, and include the pg-sdk-java JAR in your dependencies.

repositories { maven { url "https://phonepe.mycloudrepo.io/public/repositories/phonepe-pg-sdk-java" } } dependencies { implementation 'com.phonepe:pg-sdk-java:2.1.0' }
anchor image
Copied !

To get your client ID and secret, refer to the PhonePe business dashboard in Production. For UAT, you can reach out to the Integration team.

String clientId = "<clientId>"; String clientSecret = "<clientSecret>"; Integer clientVersion = "<clientVersion>";

anchor image
Copied !

Class Initialisation

To create an instance of the StandardCheckoutClient class, you need the keys received at the time of onboarding.

Example usage:

import com.phonepe.sdk.pg.Env; import com.phonepe.sdk.pg.payments.v2.StandardCheckoutClient; String clientId = "<clientId>"; String clientSecret = "<clientSecret>"; Integer clientVersion = 1; //insert your client version here Env env = Env.SANDBOX; //change to Env.PRODUCTION when you go live StandardCheckoutClient client = StandardCheckoutClient.getInstance(clientId, clientSecret, clientVersion, env);

For detailed information on Class Initialisation – Refer here

Initiate an order using Checkout Page

To use the PhonePe Payment Gateway, we create the request using the StandardCheckoutPayRequest.builder() and then send this request to the pay() function.

You will get to initiate the order using the pay function :

code :

import com.phonepe.sdk.pg.payments.v2.models.request.StandardCheckoutPayRequest; import com.phonepe.sdk.pg.payments.v2.models.response.StandardCheckoutPayResponse; String merchantOrderId = UUID.randomUUID() .toString(); long amount = 100; String redirectUrl = "https://www.merchant.com/redirect"; StandardCheckoutPayRequest standardCheckoutPayRequest = StandardCheckoutPayRequest.buidler() .merchantOrderId(merchantOrderId) .amount(amount) .redirectUrl(redirectUrl) .build(); StandardCheckoutPayResponse standardCheckoutPayResponse = client.pay(standardCheckoutPayRequest); String checkoutPageUrl = standardCheckoutPayResponse.getRedirectUrl();

The data will be in a StandardCheckoutPayResponse object.
User should be redirected to the checkoutPageUrl received in the response.

For detailed information on Initiate Payment – Refer here

Check Status of a order

To check the status of the order.

import com.phonepe.sdk.pg.common.models.response.OrderStatusResponse; String merchantOrderId = "<merchantOrderId>"; //created at the time of order creation OrderStatusResponse orderStatusResponse = client.getOrderStatus(merchantOrderId); String state = orderStatusResponse.getState();

Returns an OrderStatusResponse Object

For detailed information on Check Order Status – Refer here

Order Callback Handling

Verify the validity of the callback received from PhonePe using the validateCallback function. You need to pass four parameters to the function

  1. username 
  2. password
  3. authorization (received in callback headers)
  4. responseBody (received in the callback payload)

code :

import com.phonepe.sdk.pg.common.models.response.CallbackResponse; String authorizationHeaderData = "5d8abfd6b13a5d1b74e885269474a3dd5bd6e9500a8cb4dee2924215fad3f711"; // received in the response headers String phonepeS2SCallbackResponseBodyString = "{\"event\": \"pg.order.completed\",\"payload\": {}}"; // callback body as string String usernameConfigured = "<MERCHANT_USERNAME>"; String passwordConfigured = "<MERCHANT_PASSWORD>"; CallbackResponse callbackResponse = client.validateCallback(usernameConfigured, passwordConfigured, authorizationHeaderData, phonepeS2SCallbackResponseBodyString); String orderId = callbackResponse.getPayload().getOrderId(); String state = callbackResponse.getPayload().getState();

The validateCallback will throw PhonePeException, if the callback is invalid.

Possible order callback states:

  1. checkout.order.completed
  2. checkout.order.failed
  3. checkout.transaction.attempt.failed

For detailed information on Order Callback Handling – Refer here

Create Order SDK Integration

This function is used when the merchant is using the Frontend SDK and backend is in Java. Merchant can call the function to get the token which can be used by the frontend to initiate an order

Use case – When your backend is in Java and you are using a Frontend SDK as well

The createSdkOrder() function is used to create a order.

import java.util.UUID; import com.phonepe.sdk.pg.payments.v2.models.request.CreateSdkOrderRequest; import com.phonepe.sdk.pg.payments.v2.models.response.CreateSdkOrderResponse; String merchantOrderId = UUID.randomUUID() .toString(); long amount = 1000; String redirectUrl = "https://redirectUrl.com"; CreateSdkOrderRequest createSdkOrderRequest = CreateSdkOrderRequest.StandardCheckoutBuilder() .merchantOrderId(merchantOrderId) .amount(amount) .redirectUrl(redirectUrl) .build(); CreateSdkOrderResponse createSdkOrderResponse = client.createSdkOrder(createSdkOrderRequest); String token = createSdkOrderResponse.getToken();

The function returns a CreateSdkOrderResponse object from which merchant should retrieve the Order Token.

For detailed information on Created Order SDK – Refer here