Steps to Integrate
The Cordova Checkout SDK integration involves the following steps:
Note: You can do iOS specific customization during integration. For more information, refer to iOS-specific Integration customization (Optional).
Step 1: SDK Integration
Step 1: Include the Cordova plugin in your app project
The PayUCheckoutPro for Cordova plugin is offered through npm. To Include the Cordova Plugin in your app project:
- Include the PayUCheckoutPro Cordova Plugin in Ionic Capacitor app by running the following commands that install the dependencies in the root folder of your app:
npm install cordova-payu-checkoutpro
npx cap sync //Sync the plugin added aboveFor IOS deployment, run the command pod installs to Install the pod inside the following folders:
- ios/App folder in ionic
- platform/ios folder in Cordova.
Note: Ensure that your minimum deployment target is iOS 11.
- Include the CheckOutPro Cordova plugin in Cordova app by running the following commands that depend in the root folder of your app:
cordova plugin add cordova-payu-checkoutpro
cordova build Step 2: Set up Callback
Include the following callbacks and methods in your Cordova app to receive callbacks from the CheckOutPro SDK:
var responseCallBack = function (response) {
// payment successful
if ("generateHash" in response) {
generateHash(response);
} else if ("onPaymentSuccess" in response) {
onPaymentSuccess(response);
} else if ("onPaymentFailure" in response) {
onPaymentFailure(response);
} else if ("onPaymentCancel" in response) {
onPaymentCancel(response);
} else if ("onError" in response) {
onError(response);
}
};
//Handle Callback methods from SDK
function generateHash(response) {
// Pass response param to your backend server
// Backend will generate the hash which you need to pass to SDK
// hashResponse: is the response which you get from your server
var merchantSalt = `<Salt>`; //Keep Salt in the backend only.
var resultValue = response.generateHash;
var hashString = resultValue.hashString;
var hashName = resultValue.hashName;
var hash = {};
hash[hashName] = sha512(hashString + merchantSalt);
//Convert the hash data using sh512 and pass it to SDK.
cordova.plugins.PayUCheckoutProCordova.hashGenerated(hash);
}
function onPaymentSuccess(response) {
//Handle on Payment Success Response
}
function onPaymentFailure(response) {
//Handle on Payment Failure Response
}
function onPaymentCancel(response) {
//Handle on Payment Cancel Response
}
function onError(response) {
//Handle on Error Response
}Step 3: Build the payment parameters
Your app needs to send transactional information to the CheckoutPro SDK to initiate a payment. Build the transactional information using the following code snippet:
Step 3.1: Basic Integration
function createBasicPaymentParams() {
var txnid = new Date().getTime().toString();
var payUPaymentParams = {
key: 'YOUR_MERCHANT_KEY',
transactionId: txnid,
amount: '10',
productInfo: 'Macbook Pro',
firstName: 'Abc',
email: '[email protected]',
phone: '9999999999',
// Redirect URLs
android_surl: 'https://cbjs.payu.in/sdk/success',
android_furl: 'https://cbjs.payu.in/sdk/failure',
ios_surl: 'https://cbjs.payu.in/sdk/success',
ios_furl: 'https://cbjs.payu.in/sdk/failure',
// Environment: '0' => Production, '1' => Test
environment: '1',
isProduction: false,
// User credentials for saved cards
userCredential: 'YOUR_MERCHANT_KEY:[email protected]',
// User token for offer engine
userToken: 'userId:userName',
// Additional parameters
additionalParam: {
udf1: 'udf1',
udf2: 'udf2',
udf3: 'udf3',
udf4: 'udf4',
udf5: 'udf5'
}
};
return payUPaymentParams;
}📘 Important:
- The sample SURL/FURL values are for testing only. Use your own URLs before going live.
- The
transactionIdmust be unique, ≤ 25 characters, and cannot contain special characters like_,$,%,&, etc.- For more information, refer to Handling SURL and FURL.
Step 3.2: For Recurring Payments (SI) - Optional
For Standing Instructions / subscription payments, build the payUSIParams object.
// SI Parameters
var payUSIParams = {
isFreeTrial: false,
billingAmount: '200',
billingCycle: 'MONTHLY', // DAILY/WEEKLY/MONTHLY/YEARLY/ADHOC/ONCE
billingCurrency: 'INR',
billingInterval: '1',
paymentStartDate: '2027-05-06', // YYYY-MM-DD
paymentEndDate: '2028-05-10', // YYYY-MM-DD
remarks: 'Subscription payment',
billingDate: '', // Optional
};
var payUPaymentParams = {
// Add SI Parameters
payUSIParams: payUSIParams,
};
SI Parameters Reference:
| Parameter | Type | Description | Example |
|---|---|---|---|
isFreeTrial | Boolean | Whether this is a free trial period | true / false |
billingAmount | String | Amount to be charged | "3000" |
billingCycle | String | Billing frequency | MONTHLY, DAILY, WEEKLY, YEARLY, ADHOC, ONCE |
billingInterval | String | Interval between charges | "1" |
paymentStartDate | String | Start date (YYYY-MM-DD) | "2027-05-06" |
paymentEndDate | String | End date (YYYY-MM-DD) | "2028-05-10" |
remarks | String | Additional notes | "Subscription" |
billingCurrency | String | Currency code | "INR" |
billingDate | String | Specific billing date (optional) | "" |
For more details, refer to PayU Standing Instructions Parameters.
Step 3.3: For UPI One Time Mandate Payments - Optional
For UPI OTM, enable pre-auth and provide mandate dates.
// OTM Parameters
var payUSIParams = {
isPreAuthTxn: true, // Mandatory for UPI OTM
paymentStartDate: '2025-04-01', // YYYY-MM-DD
paymentEndDate: '2025-04-10' // YYYY-MM-DD
};
var payUPaymentParams = {
// Add OTM Parameters
payUSIParams: payUSIParams,
};
Step 3.4: For Additional Charges - Optional
Add additional charges or percentage-based charges for specific payment methods.
var payUPaymentParams = {
// ... other parameters
// Fixed additional charges
additionalCharges: 'CC:12,AMEX:19,SBIB:98,DINR:2,DC:25,NB:55',
// Percentage-based additional charges
percentageAdditionalCharges: 'CC:50,AMEX:100,DINR:75,DC:25'
};Format:
PaymentMode:Amountseparated by commas- Payment modes:
CC(Credit Card),DC(Debit Card),NB(Net Banking),UPI,WALLET,EMI,BNPL - Or use specific bank codes like
SBIB(State Bank),AMEX, etc.
For more information, refer to Collect Additional Charges.
Step 3.5: For Split Payments Details - Optional
For split payments (aggregator model), create a JSON object and pass it as a string.
// Split payment configuration
var splitPaymentDetails = {
type: 'absolute', // or 'percentage'
splitInfo: {
'imAJ7I': { // Child Merchant Key
aggregatorSubTxnId: '12345673443540dd33d099887766650091', // Unique per transaction
aggregatorSubAmt: '10',
aggregatorCharges: '0',
},
},
};
var payUPaymentParams = {
// Add split payment details as JSON string
splitPaymentDetails: JSON.stringify(splitPaymentDetails),
};
Important:
aggregatorSubTxnIdmust be unique for each transactiontypecan be'absolute'or'percentage'- Multiple child merchants can be added to
splitInfo
Step 3.6: SKU Details - Optional
Pass item-level details for cart-based transactions.
// SKU Details
var skuDetails = {
skus: [
{
skuId: '111',
skuName: 'Shoes',
skuAmount: '100',
quantity: 1,
offerKeys: null,
},
{
skuId: '222',
skuName: 'Shirt',
skuAmount: '100',
quantity: 1,
offerKeys: null,
},
],
};
var payUPaymentParams = {
// Add SKU details
skuDetails: skuDetails,
};
🚧 Keep in mind:
- The total
amountmust equal the sum of(quantity × skuAmount)for all items- If passing SKU-specific offers, use the
offerKeysfield
Step 3.7: Third Party Verification (TPV) Flow - Optional
For TPV transactions, pass beneficiary account details for verification.
// TPV Beneficiary Details
var beneficiaryDetails = [
// For UPI
{
beneficiaryAccount: '002001600674',
beneficiaryIfsc: 'HDFC0000090',
},
// For Net Banking
{
beneficiaryName: 'SACHIN Tendulkar',
beneficiaryAccount: '002001600674',
beneficiaryIfsc: 'ICIC0000090',
beneficiaryAccountType: 'SAVINGS',
},
];
var payUPaymentParams = {
// Add TPV beneficiary details
beneficiaryDetails: beneficiaryDetails,
};
TPV Parameters:
| Parameter | Required For | Description |
|---|---|---|
beneficiaryAccount | All | Beneficiary account number |
beneficiaryIfsc | All | Bank IFSC code |
beneficiaryName | Net Banking | Account holder name |
beneficiaryAccountType | Net Banking | SAVINGS or CURRENT |
Step 3.8: Cross Border Flow (OPGSP) - Optional
For OPGSP merchants, complete address details are mandatory. UDF5 (invoice number) is also required.
// Address Details (Mandatory for OPGSP)
var address = {
lastName: 'LastName',
address1: 'Address1 value',
address2: 'Address2 value',
city: 'Gurgaon',
state: 'Haryana',
country: 'India',
zipcode: '122001',
};
// Additional Param with UDF5 (Invoice Number - Mandatory for OPGSP)
var additionalParam = {
udf1: 'udf1',
udf2: 'udf2',
udf3: 'udf3',
udf4: 'udf4',
udf5: 'Sample_Invoice_11', // Mandatory for OPGSP
};
var payUPaymentParams = {
// Add address details
address: address,
// Add additional params with UDF5, pass invoice number
additionalParam: additionalParam,
};
Important: For OPGSP merchants, both
addressandudf5(invoice number) are mandatory.
For more details: Cross-Border Payments (Import)
Step 3.9: WealthTech Flow - Optional
For investment and mutual fund transactions.
// WealthTech Product Details
var products = [
{
type: 'mutual_fund',
plan: 'GD',
folio: '9104927822',
amount: '50000',
option: 'G',
scheme: 'LT',
receipt: '77407',
mfMemberID: '123445',
mfUserID: '77407',
mfPartner: 'cams',
mfInvestmentType: 'L',
mfAMCCode: 'UTB',
},
];
var payUPaymentParams = {
// Add WealthTech products
products: products,
};
Step 3.10: Enforce Offer Keys
Apply specific promotional offers during checkout.
var payUPaymentParams = {
// ... other parameters
// Comma-separated offer keys
enforcementOfferKeys: ['offer_key_1', 'offer_key_2'],
};
// Or as a comma-separated string (if parsing on your side)
// enforcementOfferKeys: 'HoliSale@JbBdLOBritj5,Instantoffer@Kp78nFDENX5S'Step 3.11: Additional Parameters - Optional
The additional parameters that are optional that can be passed to SDK are udf parameters, static hashes, and other parameters. For more details on Static Hash generation and passing them, refer to generate hashes. The following is a list of parameters that can be passed in additional parameters:
| Parameter | Description |
|---|---|
| PayUCheckoutProConstants.CP_UDF1 | String User defined field, Merchant can store their customer id, etc. |
| PayUCheckoutProConstants.CP_UDF2 | String User defined field, Merchant can store their customer id, etc. |
| PayUCheckoutProConstants.CP_UDF3 | String User defined field, Merchant can store their customer id, etc. |
| PayUCheckoutProConstants.CP_UDF4 | String User defined field, Merchant can store their customer id, etc. |
| PayUCheckoutProConstants.CP_UDF5 | String User defined field, Merchant can store their customer id, etc. |
| Static hashes | String The static hashes is specified in this parameter. For more information, refer to Hash Generation section. |
| PayUCheckoutProConstants.SODEX_OSOURC_EID | String Sodexo Source ID, Merchant can store it from the third field of PayU response. |
| PaymentParamConstant.walletUrn | String Pass this parameter if closed loop wallet (clw) payment mode is enabled for your account. |
Steps 3.12: Payment Param Definitions
Parameter | Description |
|---|---|
Key
|
|
transactionId
|
|
Amount
|
|
productInfo
|
|
firstName
|
|
Email
|
|
Phone
|
|
ios_surl
|
|
ios_furl mandatory |
|
android_surl
|
|
android_furl
|
|
Environment
|
|
User Credential
|
|
user_token
| String The use for this param is to allow the offer engine to apply velocity rules at a user level. -**Card Based Offers (CC, DC, EMI):**For card payment mode offers, if this parameter is passed then the velocity rules would be applied on this token, if not passed the same would be applied to the card number. -NB, Wallet: It is mandatory for UPI, NB, and Wallet payment modes. If not passed the validation rules would not apply. Note:- When we use Offer features then it's a mandatory parameter otherwise it's not required. |
additionalCharges | String This parameter is required if merchant want to take additional charge from user, should be string with PG:Amount or IBIBOCode:Amount Sample : CC:10,NB:20,SBIB:15 |
percentageAdditionalCharges | String This parameter is required if merchant want to take percentage of TDR as additional charge from user for this feature dynamicConvFeeMerchant flag must be enable, should be string with PG:Amount or IBIBOCode:Amount Sample : CC:100,NB:50,SBIB:25 |
SkuDetails
| Create list of SKU as per products added in cart and add this list in SKU details. and set sku detials to PayUPaymentParams.
|
payUSIParams
|
Mandatory for Recurring (Subscription / Standing Instruction) transactions. For more details: Recurring Payments Integration |
enableNativeOTP
|
|
splitPaymentDetails
|
Mandatory only for Aggregator transactions. For more details: Split Settlements |
enforcementOfferKeys
|
|
beneficiaryDetails
|
|
address / addressDetails
|
For more details: Cross-Border Payments (Import) |
products
|
Mandatory only for WealthTech / Investment product transactions. |
Note:The sample URLs mentioned in surl and furl are for temporary use. PayU recommends you to design or use your own surl and furl after testing is completed.
For details on Standing Instructions parameters, refer to PayU Standing Instruction Parameters.
Step 2.13: Complete Sample (Recommended)
The payment parameters and additional parameters can be passed using the following code snippet:
const createPaymentParams = () => {
var txnid = new Date().getTime().toString();
// ========== Basic Payment Parameters (Mandatory) ==========
var payUPaymentParams = {
key: 'YOUR_MERCHANT_KEY',
transactionId: txnid,
amount: '10',
productInfo: 'Product Info',
firstName: 'Abc',
email: '[email protected]',
phone: '9999999999',
android_surl: 'https://cbjs.payu.in/sdk/success',
android_furl: 'https://cbjs.payu.in/sdk/failure',
ios_surl: 'https://cbjs.payu.in/sdk/success',
ios_furl: 'https://cbjs.payu.in/sdk/failure',
environment: '1', // '0' => Production, '1' => Test
userCredential: 'YOUR_MERCHANT_KEY:[email protected]',
userToken: 'userId:userName',
};
// ========== Additional Parameters ==========
var additionalParam = {
udf1: 'udf1',
udf2: 'udf2',
udf3: 'udf3',
udf4: 'udf4',
udf5: 'udf5',
walletUrn: '100000',
sourceId: 'src_dfcbd083-f38d-4d0d-9fac-80d7d1bb8f2d',
};
payUPaymentParams.additionalParam = additionalParam;
// ========== Standing Instruction (SI) - Optional ==========
payUPaymentParams.payUSIParams = {
isFreeTrial: false,
billingAmount: '3000',
billingCycle: 'MONTHLY', // DAILY/WEEKLY/MONTHLY/YEARLY/ADHOC/ONCE
billingCurrency: 'INR',
billingInterval: '10',
paymentStartDate: '2027-05-06', // YYYY-MM-DD
paymentEndDate: '2028-05-10', // YYYY-MM-DD
remarks: 'Subscription payment',
billingDate: '',
};
// ========== One Time Mandate (OTM) - Optional ==========
payUPaymentParams.payUSIParams = {
isPreAuthTxn: true,
paymentStartDate: '2025-04-01', // YYYY-MM-DD
paymentEndDate: '2025-04-10', // YYYY-MM-DD
};
// ========== SKU Details - Optional ==========
payUPaymentParams.skuDetails = {
skus: [
{
skuId: '111',
skuName: 'Shoes',
skuAmount: '100',
quantity: 1,
offerKeys: null,
},
{
skuId: '222',
skuName: 'Shirt',
skuAmount: '100',
quantity: 1,
offerKeys: null,
},
],
};
// ========== TPV (Third Party Verification) - Optional ==========
payUPaymentParams.beneficiaryDetails = [
// For UPI
{
beneficiaryAccount: '002001600674',
beneficiaryIfsc: 'HDFC0000090',
},
// For Net Banking
{
beneficiaryName: 'SACHIN Tendulkar',
beneficiaryAccount: '002001600674',
beneficiaryIfsc: 'ICIC0000090',
beneficiaryAccountType: 'SAVINGS',
},
];
// ========== OPGSP (Cross Border) - Optional ==========
// Note: For OPGSP, udf5 (invoice number) is also mandatory
payUPaymentParams.address = {
lastName: 'LastName',
address1: 'Address1 value',
address2: 'Address2 value',
city: 'Gurgaon',
state: 'Haryana',
country: 'India',
zipcode: '122001',
};
additionalParam.udf5 = 'Sample_Invoice_11'; // Mandatory for OPGSP
// ========== WealthTech - Optional ==========
payUPaymentParams.products = [
{
type: 'mutual_fund',
plan: 'GD',
folio: '9104927822',
amount: '50000',
option: 'G',
scheme: 'LT',
receipt: '77407',
mfMemberID: '123445',
mfUserID: '77407',
mfPartner: 'cams',
mfInvestmentType: 'L',
mfAMCCode: 'UTB',
},
];
// ========== Split Payment - Optional ==========
var splitPaymentDetails = {
type: 'absolute', // or 'percentage'
splitInfo: {
imAJ7I: { // Child Merchant Key
aggregatorSubTxnId: '12345673443540dd33d099887766650091', // Unique per transaction
aggregatorSubAmt: '10',
aggregatorCharges: '0',
},
},
};
payUPaymentParams.splitPaymentDetails = JSON.stringify(splitPaymentDetails);
// ========== Additional Charges - Optional ==========
payUPaymentParams.additionalCharges = 'CC:12,AMEX:19,SBIB:98,DC:25,NB:55';
payUPaymentParams.percentageAdditionalCharges = 'CC:50,AMEX:100,DC:25';
// ========== Offer Keys - Optional ==========
payUPaymentParams.enforcementOfferKeys = ['offer_key_1', 'offer_key_2'];
// ========== Enable Native OTP - Optional ==========
payUPaymentParams.enableNativeOTP = true;
return payUPaymentParams;
};Step 3: Initiate the payment
Initialize and launch the Checkout Pro SDK by calling the following code snippet:
var paymentObject = {
payUPaymentParams: payUPaymentParams,
// payUCheckoutProConfig is optional
// Detail can be found in latter section
payUCheckoutProConfig: payUCheckoutProConfig
}
PayUBizSdk.openCheckoutScreen(paymentObject);Step 4: Set up payment hashes
This step describes how to pass the dynamic hashes. For detailed information, refer to Generate Hash.
The SDK will send the hash string without salt in responseCallBacktoopenCheckoutScreen. Use the generate hash key to get the HashMap <HashName, HashString> in the callback response. Pass that hashMap to the server to generate the hash. Get the Hash from the server and pass it to SDK using the cordova.plugins.PayUCheckoutProCordova.hashGenerated(<HashName hash>)
var responseCallBack = function (response) {
if ("generateHash" in response) {
generateHash(response);
}
"generateHash";
...................
};
function generateHash(response) {
var merchantSalt = `<salt>`; //keep this in the backend.
var resultValue = response.generateHash;
var hashStringWithoutSalt = resultValue.hashString;
var hashName = resultValue.hashName;
var hashType = resultValue.hashType;
var postSalt = response[resultValue.postSalt];
var hash = `<Get Hash Backend with < hashStringWithoutSalt, hashType , postSalt >`;
//Convert the hash data using sh512.
//Call Call hashGenerated with HashResponse< hashName, Hash> to pass the hash from server to SDK.
cordova.plugins.PayUCheckoutProCordova.hashGenerated(hash);
}Notes:
- You need the following type of hashes to be generated at your backend: v1 Hash, v2 Hashes, MCP Lookup, and Post Salt Hash.
- You must generate the hashes on your server. Do not generate the hashes locally in your app, as it may compromise the security of the transactions.
The CheckoutPro SDK uses hashes to ensure the security of the transaction and prevent any unauthorized intrusion or modification. The CheckoutPro SDK requires two types of hashes. For more information on the two types of hashes, refer to Generate Hash for CheckoutPro SDK.
Step 5: Initiate the payment
Initialize and launch the Checkout Pro SDK by calling the following code snippet:
let payuParams = {
payUPaymentParams: `<PayUPaymentParams>`,
payUCheckoutProConfig: `<PayUCheckoutProConfig>`,
};
cordova.plugins.PayUCheckoutProCordova.openCheckoutScreen(
callbackResponse,
payuParams
);Step 6: Update AndroidManifest.xml
To automatically fill OTP on bank pages, SDK requires the RECEIVE_SMS permission. Add the following code snippet to your AndroidManifest.xml like below.
<uses-permission android:name="android.permission.RECEIVE_SMS" />iOS-specific Integration customization (Optional)
- UPI Intent: Currently, PayU supports only PhonePe, Paytm, and GooglePay through Intent. Add the following query schemes in the
info.plist.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>phonepe</string>
<string>paytm</string>
<string>tez</string>
</array>- Card Scanner, Camera Permission:
<key>NSCameraUsageDescription</key>
<string>Please mention the description to give user info</string>Step 2. Test the Integration and Go-live
Test the integration
After the integration is complete, you must test the integration before you go live and start collecting payment. You can start accepting actual payments from your customers once the test is successful.
CalloutThe UPI in-app and UPI intent flow is not available in the Test mode.
Testing checklistThings to remember while testing an integration:
- To test the integration make sure that you are making a transaction call to the test endpoint.
- Use your test key and salt for the transaction requests. See Genearate Test Key and Salt.
- Set the value of the
environmentparameters to1.
Test cards only for Test environmentThese test cards, UPI, and Wallet credentials must only be used in the sandbox environment. Using these test cards in production environment may cause validation error.
You can make test payments using one of the payment methods configured at the Checkout.
Test credentials for supported payment methods
Following are the payment methods supported in PayU Test mode.
Test Credential for Card
| Card Number | Expiry | CVV | OTP |
|---|---|---|---|
| 5123456789012346 | 05/25 | 123 | 123456 |
Test credentials for Net Banking
Use the following credentials to test the Net Banking integration:
- user name: payu
- password: payu
- OTP: 123456
Test VPA for UPI
You can use either of the following VPAs to test your UPI-related integration:
For Testing the UPI Collect flow, Please follow the below steps:-
- Once you enter the VPA click on the verify button and proceed to pay.
- In NPCI page timer will start, Don't "CLICK" on click text. Please wait on the NPCI page.
- The below link opens in the browser Paste the transaction ID at the end of the URL then click on the success/failure simulator page. After that, your app will redirect to your app with the transaction response.
https://pgsim01.payu.in/UPI-test-transaction/confirm/<Txn_id>
For Android
You can add the below metadata under the application tag in the manifest file to test the UPI Collect flow on test env:-
Ensure to remove the code from the manifest file before going live.
<application>
<meta-data android:name="payu_debug_mode_enabled" android:value="true" /> // set the value to false for production environment
<meta-data android:name="payu_web_service_url" android:value="https://test.payu.in" /> //Comment in case of Production-->
<meta-data android:name="payu_post_url" android:value="https://test.payu.in"/> //Comment in case of Production-->
</application>Test cards for EMI
You can use the following Debit and Credit cards to test EMI integration.
Bank/Card Type | Card Details |
|---|---|
Kotak DC EMI |
|
AXIS DC EMI |
|
HDFC CC EMI |
|
ICICI CC EMI |
|
Test Wallets
You can use the following wallets and their corresponding credentials to test wallet integration.
| Wallet | Mobile Number | OTP |
|---|---|---|
| PayTM | 7777777777 | 888888 |
| PhonePe | Use the Phonepe Pre-Prod app for testing purposes as described in the following PhonePe doc. location: [https://developer.phonepe.com/v1/docs/setting-up-test-account](https://developer.phonepe.com/v1/docs/setting-up-test-account) Download the app and register your mobile number and follow the instructions as described in the above PhonePe docs. | NA |
| AmazonPay | You can test using your original Amazon account details. |
Go-live Checklist
Go-Live Checkist
Ensure these steps before you deploy the integration in a live environment.
Collect Live Payments
After testing the integration end-to-end, after you are sure that the integration is working as expected, you can switch to live mode to start accepting payments from your customers.
Watch Out!Ensure that you are using the production merchant key and salt generated in the live mode.
Checklist 2: Configure environment() parameter
Set the value of the environment()to 0 in the payment integration code. This enables the integration to accept live payments.
Checklist 4:- Remove/comment meta -data code from manifest file :-
For Android
You must be comment/remove the below metadata code from the manifest file to use the UPI Collect flow on Production env:-
<application>
<meta-data android:name="payu_debug_mode_enabled" android:value="true" /> // set the value to false for production environment
<meta-data android:name="payu_web_service_url" android:value="https://test.payu.in" /> //Comment in case of Production-->
<meta-data android:name="payu_post_url" android:value="https://test.payu.in"/> //Comment in case of Production-->
</appliction>Checklist 5: Configure verify payment method
Configure the Verify payment method to fetch the payment status. We strongly recommend that you use this as a back up method to handle scenarios where the payment callback is failed due to technical error.
Checklist 6: Configure Webhook
We recommend that you configure Webhook to receive payment responses on your server. For more information, refer to Webhooks.
Distributing your app (App Store / Ad-hoc)
What you get by default is a fat framework that allows you to test your app seamlessly on the device and simulator. But before archiving your app, you need to remove simulator slices from the framework. For detailed information on archiving your app with PayUChekoutPro, refer to Releasing Apple App Store.
Updated 14 days ago
