This method is used to initiate a payment via the PhonePe PG.
The pay() method is used to initiate an order via various instruments.
Instruments :
UPI INTENT
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | Yes | Unique order ID generated by merchant |
amount | long | Yes | Amount of order in Paisa |
contraints | List | No | Different type of constraints that must be applied to the payment |
deviceOS | String | No | Operating system of the device. Allowed values are: 1. IOS 2. ANDROID |
merchantCallbackScheme | String | No | Required only in case targetApp = PHONEPE and deviceOS = IOS |
targetApp | String | No | The target app identifier for the UPI Intent flow. For IOS: PHONEPE, GPAY, PAYTM. For Android: com.phonepe.app, net.one97.paytm |
Example
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import java.util.UUID;
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID()
.toString();
long amount = 100;
String deviceOS = "IOS";
String targetApp = "PHONEPE";
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.UpiIntentPayRequestBuilder()
.merchantOrderId(merchantOrderId)
.amount(amount)
.targetApp(targetApp)
.deviceOS(deviceOS)
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
String intentUrl = pgPaymentResponse.getIntentUrl();
Extract the intentUrl
from the response received.
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
IntentUrl | String | Intent url according to the targetApp mentioned in the request |
UPI COLLECT
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | yes | Unique order ID generated by merchant |
amount | long | yes | Amount of order in Paisa |
contraints | List | yes | Different type of constraints that must be applied to the payment |
VPA | String | Yes | VPA against which collect request need to be raised |
Example :
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
import java.util.UUID;
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID().toString();
long amount = 100;
String vpa = "<VALID_VPA>";
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.UpiCollectPayViaVpaRequestBuilder()
.vpa(vpa)
.amount(amount)
.merchantOrderId(merchantOrderId)
.message("Collect Message")
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
The function will raise the collect request to the above mentioned vpa
.
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
UPI QR
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | Yes | Unique order ID generated by merchant |
amount | long | Yes | Amount of order in Paisa |
contraints | List | No | Different type of constraints that must be applied to the payment |
Example :
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
import java.util.UUID;
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID().toString();
long amount = 100;
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.UpiQrRequestBuilder()
.amount(amount)
.merchantOrderId(merchantOrderId)
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
String qrData = pgPaymentResponse.getQrData();
Extract the qrData from the response received
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
IntentUrl | String | Intent url for the amount mentioned |
qrData | String | QR Data which will be used to generate the QR |
NET BANKING
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | yes | Unique order ID generated by merchant |
amount | long | yes | Amount of order in Paisa |
contraints | List | yes | Different type of constraints that must be applied to the payment |
bankId | String | yes | Bank id from where payment will be completed. |
Example :
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import java.util.UUID;
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID().toString();
long amount = 100;
String bankId = "HDFC";
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.NetBankingPayRequestBuilder()
.merchantOrderId(merchantOrderId)
.amount(amount)
.bankId(bankId)
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
String redirectUrl = pgPaymentResponse.getRedirectUrl();
Extract the redirectUrl from the response received
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
redirectUrl | String | Redirect url to perform the Net Banking for mentioned bankId |
TOKEN
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | yes | Unique order ID generated by merchant |
amount | long | yes | Amount of order in Paisa |
contraints | List | No | Different type of constraints that must be applied to the payment |
authMode | String | yes | Default to 3DS |
encryptionKeyId | long | yes | KeyId of key which merchant uses to encrypt card number & cvv. |
encryptedToken | String | yes | Encrypted TOKEN number which merchant passes to process card transaction |
encryptedCvv | String | yes | Encrypted CVV of the card with which payment is being initiated. |
cryptogram | String | yes | The cryptogram fetched from the gateway where the card was tokenized. |
panSuffix | String | yes | Last four digits of card number |
cardHolderName | String | yes | Card Holder Name |
expiryMonth | String | yes | Token expiry month |
expiryYear | String | yes | Token expiry year |
merchantUserId | String | No | The unique identifier of the merchant user. It is used to associate the payment with a specific user. |
Example :
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
import java.util.UUID;
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID().toString();
long amount = 100;
long encryptionKeyId = 10;
String encryptedCvv = "<encryptedCvv>";
String authMode = "3DS";
String panSuffix = "7239";
String cryptogram = "<cryptogram>";
String encryptedToken = "<encryptedToken>";
String merchantUserId = "<merchantUserId>";
String cardHolderName = "<cardHolderName>";
String expiryYear = "2050";
String expiryMonth = "08";
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.TokenPayRequestBuilder()
.merchantOrderId(merchantOrderId)
.amount(amount)
.encryptionKeyId(encryptionKeyId)
.encryptedCvv(encryptedCvv)
.authMode(authMode)
.panSuffix(panSuffix)
.cryptogram(cryptogram)
.encryptedToken(encryptedToken)
.merchantUserId(merchantUserId)
.cardHolderName(cardHolderName)
.expiryMonth(expiryMonth)
.expiryYear(expiryYear)
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
String redirectUrl = pgPaymentResponse.getRedirectUrl();
Extract the redirectUrl from the response received.
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
redirectUrl | String | Redirect url to perform the transaction |
CARDS
Request Details
Parameter Name | Data Type | Mandatory | Description |
---|---|---|---|
merchantOrderId | String | yes | Unique order ID generated by merchant |
amount | long | yes | Amount of order in Paisa |
contraints | List | No | Different type of constraints that must be applied to the payment |
authMode | String | yes | Default to 3DS |
encryptionKeyId | long | yes | KeyId of key which merchant uses to encrypt card number & cvv. |
encryptedCardNumber | String | yes | Encrypted 16-Digit Card Number entered by the user. |
encryptedCvv | String | yes | Encrypted CVV of the card with which payment is being initiated. |
cardHolderName | String | No | Card Holder Name |
expiryMonth | String | yes | Token expiry month |
expiryYear | String | yes | Token expiry year |
merchantUserId | String | No | The unique identifier of the merchant user. It is used to associate the payment with a specific user. |
Example :
import com.phonepe.sdk.pg.Env;
import com.phonepe.sdk.pg.common.models.request.PgPaymentRequest;
import com.phonepe.sdk.pg.common.models.response.PgPaymentResponse;
import com.phonepe.sdk.pg.payments.v2.CustomCheckoutClient;
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
CustomCheckoutClient customCheckoutClient = CustomCheckoutClient.getInstance(clientId, clientSecret,
clientVersion, env);
String merchantOrderId = UUID.randomUUID().toString();
long amount = 100;
long encryptionKeyId = 10;
String authMode = "3DS";
String encryptedCardNumber = "<encryptedCardNumber>";
String encryptedCvv = "<encryptedCvv>";
String merchantUserId = "<merchantUserId>";
String cardHolderName = "<cardHolderName>";
String expiryYear = "2052";
String expiryMonth = "08";
PgPaymentRequest pgPaymentRequest = PgPaymentRequest.CardPayRequestBuilder()
.merchantOrderId(merchantOrderId)
.amount(amount)
.encryptionKeyId(encryptionKeyId)
.encryptedCvv(encryptedCvv)
.authMode(authMode)
.encryptedCardNumber(encryptedCardNumber)
.merchantUserId(merchantUserId)
.cardHolderName(cardHolderName)
.expiryMonth(expiryMonth)
.expiryYear(expiryYear)
.build();
PgPaymentResponse pgPaymentResponse = customCheckoutClient.pay(pgPaymentRequest);
String redirectUrl = pgPaymentResponse.getRedirectUrl();
Extract the redirectUrl from the response received
Response Details
Property | Type | Description |
---|---|---|
orderId | String | Order Id created by PhonePe |
state | String | State of the order. Initially it will be PENDING. |
expireAt | Long | Order expire date in epoch |
redirectUrl | String | Redirect url to perform the transaction |