Prerequisites
Prerequisites
-
Contact our integrations team to get your mobile number, app and GitHub account whitelisted to get access to the
https://github.com/upi-turbo/android-turbo-sample-app- sample app repository. In this repository, you will find the AAR files (libraries for Turbo UPI) and the sample app source code to help you do the entire integration. The AARs on the main branch are for the UAT environment, and the ones on the prod branch are for the production environment.
These are the important files in the sample app repo:app/src/turboUI: Sample app code for UI SDKapp/libs: All libraries (Bank, SecureComponent and Turbo) common for headless and UI SDKapp/build.gradle: All transitive dependencies needed to integrate the Turbo SDK.
- Integrate with Razorpay Android Custom SDK.
-
Import the following frameworks:
- Razorpay Turbo Wrapper Plugin SDK (maven)
- Razorpay Turbo Core SDK
- Razorpay SecureComponent SDK
- Bank SDK
-
Add the following lines to your Android project’s gradle.properties file:
android.enableJetifier=trueandroid.useAndroidX=true
1. Integration Steps
Given below are the steps:Step 1: Whitelist Customer Bank Accounts *(Optional)*
Step 1: Whitelist Customer Bank Accounts *(Optional)*
Step 1.1: Create a Customer
Step 1.1: Create a Customer
Request Parameters
Request Parameters
name optional
: string Customer’s name. Alphanumeric value with period (.), apostrophe (’), forward slash (/), at (@) and parentheses are allowed. The name must be between 3-50 characters in length. For example, Gaurav Kumar.contact optional
: string The customer’s phone number. A maximum length of 15 characters including country code. For example, +919876543210.email optional
: string The customer’s email address. A maximum length of 64 characters. For example, gaurav.kumar@example.com.fail_existing optional
: string Possible values:1(default): If a customer with the same details already exists, throws an error.0: If a customer with the same details already exists, fetches details of the existing customer.
gstin optional
: string Customer’s GST number, if available. For example, 29XAbbA4369J1PA.notes optional
: object This is a key-value pair that can be used to store additional information about the entity. It can hold a maximum of 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.Response Parameters
Response Parameters
id
: string Unique identifier of the customer. For example, cust_1Aa00000000004.name
: string Customer’s name. Alphanumeric, with period (.), apostrophe (’), forward slash (/), at (@) and parentheses allowed. The name must be between 3-50 characters in length. For example, Gaurav Kumar.contact
: string The customer’s phone number. A maximum length of 15 characters including country code. For example, +919876543210.email
: string The customer’s email address. A maximum length of 64 characters. For example, gaurav.kumar@example.com.gstin
: string GST number linked to the customer. For example, 29XAbbA4369J1PA.notes
: json object This is a key-value pair that can be used to store additional information about the entity. It can hold a maximum of 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.created_at
: integer UNIX timestamp, when the customer was created. For example, 1234567890.Step 1.2: Add Customer's Bank Account
Step 1.2: Add Customer's Bank Account
Path Parameter
Path Parameter
customer_id mandatory
: string Customer id of the customer whose bank account is to be added.Request Parameters
Request Parameters
account_number mandatory
: string Customer’s bank account number. For example, 11214311215411.beneficiary_name mandatory
: string The name of the beneficiary associated with the bank account.beneficiary_address1 optional
: string The virtual payment address.beneficiary_email optional
: string Email address of the beneficiary. For example, gaurav.kumar@example.com.beneficiary_mobile optional
: string Mobile number of the beneficiary.beneficiary_city optional
: string The city of the beneficiary.beneficiary_state optional
: string The state of the beneficiary.beneficiary_country optional
: string The country of the beneficiary.beneficiary_pin optional
: integer The pin code of the beneficiary’s address.ifsc_code mandatory
: string The IFSC of the bank branch associated with the account.Response Parameters
Response Parameters
bank_accounts
: array An array containing bank account details.id
: string Unique identifier of the bank account.entity
: string The type of entity, which in this case is bank_account.ifsc
: string The IFSC of the bank branch associated with the account.bank_name
: string The name of the bank.name
: string The name associated with the bank account.notes
: object Set of key-value pairs that can be used to store additional information about the payment.account_number
: integer Customer’s bank account number. For example, 11214311215411.Step 2: Create an Order *(Mandatory)*
Step 2: Create an Order *(Mandatory)*
bank_account array of the Orders API. Given below is the sample code when the method is upi.Request Parameters
Request Parameters
amount mandatory
: integer The transaction amount expressed in paise (currency supported is INR). For example, for an actual amount of ₹1, the value of this field should be 100.currency mandatory
: string The currency in which the transaction should be made. You can create orders in INR only.receipt optional
: string Receipt number that corresponds to this order, set for your internal reference. Maximum length is 40 characters.notes optional
: json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.method mandatory
: string The payment method used to make the payment. If this parameter is not passed, investors will be able to make payments using both netbanking and UPI payment methods. Possible values:netbanking: Investors can make payments only using netbanking.card: Investors can make payments using debit card.upi: Investors can make payments only using UPI.
bank_account mandatory
: object Details of the bank account that the investor has provided at the time of registration.account_number mandatory
: string The bank account number from which the investor should make the payment. For example, 765432123456789 Payments will not be processed for an incorrect account number.name mandatory
: string The name linked to the bank account. For example, Gaurav Kumar.ifsc mandatory
: string The bank IFSC. For example, HDFC0000053.Response Parameters
Response Parameters
id
: string Unique identifier of the order.entity
: string Indicates the type of entity. Here, it is order.amount
: integer The order amount represented in the smallest unit of the currency passed. For example, amount = 100 translates to 100 paise, that is ₹1 (default currency is INR).amount_paid
: integer The amount that has been paid.amount_due
: integer The amount that is yet to be paid.currency
: string The 3-letter ISO currency code for the payment. Currently, we support INR only.receipt
: string A unique identifier of the order entered by the user. For example, BILL13375649.status
: string The status of the order.notes
: object Key-value pair you can use to store additional information about the entity. Maximum of 15 key-value pairs, 256 characters each. For example, “note_key”: “Beam me up Scotty”.created_at
: integer The Unix timestamp at which the order was created.offer_id
: string Unique identifier of the offer.attempts
: integer The number of payment attempts, successful and failed, that have been made against this order.Step 3: Turbo UPI Headless SDK Action
Step 3: Turbo UPI Headless SDK Action
1 Get Customer's Linked UPI Account
1 Get Customer's Linked UPI Account
Request Parameters
Request Parameters
Response Parameters
Response Parameters
- Filter bank accounts related to each orderID or Whitelisted accounts.
- You need to select which bank accounts users can use for payments.
- For new users, you should display them the approved bank accounts that they can use for transactions. Users need to choose one from the provided list.
2 Link new UPI Account
2 Link new UPI Account
Request Parameters
Request Parameters
action
: The current state of customer registration with which you can call further functions. All values for this variable are exposed as an enum for ease of integration. Know more about the action parameters.mobileNumber mandatory
: Mobile number of the customer.customer_id
: The unique identifier of the customer. You can create customer_id using the Customers API.tpvBankAccount conditionally mandatory
: The tpvBankAccount parameter represents a bank account configuration used for UPI transactions, containing the account number, IFSC, and bank name.order_id conditionally mandatory
: Order ID generated via Orders API.Parameter Combinations and Descriptions
Parameter Combinations and Descriptions
Conditions for `SELECT_SIM` action
Conditions for `SELECT_SIM` action
SELECT_SIM action:- Triggered:
- CASE 1: The customer’s phone has only one SIM, but the mobile number provided is not the same as the mobile number in the SIM object.
- CASE 2: The customer’s phone has multiple SIMs, but the mobile number provided is not the same as the mobile number in the SIM object in either SIMs.
- Non-Triggered:
- CASE 1: The customer’s phone has one SIM, and the mobile number provided is the same as the mobile number in the SIM object received.
- CASE 2: The customer’s phone has multiple SIMs, and the mobile number provided is the same as the mobile number in one of the SIM objects received by the OS.
linkNewUpiAccount, refer to the Error Codes of linkNewUpiAccount section.3 Submit Method
3 Submit Method
- To accept payments, call Custom Checkout’s
submitmethod with the following payload:
- Pass the
vpaandpayloadobjects as shown in the code below:
reason JSON object, which will contain the original error code and description from the bank/Secure component.Steps 4: Store Fields in Your Server
Steps 4: Store Fields in Your Server
- You need to store these fields in your server.
- You can confirm the authenticity of these details by verifying the signature in the next step.
Parameters
Parameters
razorpay_payment_id
: string Unique identifier for the payment returned by Checkout only for successful payments.razorpay_order_id
: string Unique identifier for the order returned by Checkout.razorpay_signature
: string Signature returned by the Checkout. This is used to verify the payment.Step 5: Verify Signature
Step 5: Verify Signature
razorpay_signature returned to you by the Checkout form:-
Create a signature in your server using the following attributes:
order_id: Retrieve theorder_idfrom your server. Do not use therazorpay_order_idreturned by Checkout.razorpay_payment_id: Returned by Checkout.key_secret: Available in your server. Thekey_secretthat was generated from the Dashboard.
-
Use the SHA256 algorithm, the
razorpay_payment_idand theorder_idto construct a HMAC hex digest as shown below:
- If the signature you generate on your server matches the
razorpay_signaturereturned to you by the Checkout form, the payment received is from an authentic source.
Non-Transactional Flow
You can directly interact with the exposed methods of the Turbo Framework to perform the non-transactional flows listed below.Fetch Balance
Fetch Balance
getBalance() on the bank account object received from upiAccount.Change UPI PIN
Change UPI PIN
changeUpiPin() on the bank account object received from UpiAccount.Reset UPI
Reset UPI
Delink
Delink
Additional Features
- The below function is triggered internally after integrating with the Razorpay Android Custom SDK.
razorpay.onBackPressed()is triggered when a user tries to exit the app or return to the previous page. Therazorpay.upiTurbo.destroy()function clears that particular session so that when the user returns, the payment process starts from the beginning.
- To get the device binding status, please use the variable
razorpay.upiTurbo.isDeviceOnboarded()of typeboolean. It indicates whether the device binding, which is a prerequisite for adding UPI accounts, is done with the customer’s mobile number.
- Use the Add Bank Account of Customers API to add bank account of the customers.
- Use the Delete Bank Account of Customers API to delete bank account of the customers.
Action Parameter Values
Action Parameter Values
action.code parameter in onResponse.Error Codes for `linkNewUpiAccount`
Error Codes for `linkNewUpiAccount`
Error Codes for Delete Bank Account API
Error Codes for Delete Bank Account API
Case 1: The bank account ID provided by users does not exist in Razorpay.
Case 1: The bank account ID provided by users does not exist in Razorpay.
Case 2: The bank account ID provided by user is already deleted
Case 2: The bank account ID provided by user is already deleted
Case 3: When one business attempts to delete the bank account of another business
Case 3: When one business attempts to delete the bank account of another business
Case 4: When a business provides an incorrect API key or API secret
Case 4: When a business provides an incorrect API key or API secret
Models Exposed from the SDKs
The SDKs given below provide access to exposed models for seamless integration.TPVBankAccount
TPVBankAccount
BankAccount
BankAccount
Bank
Bank
AccountBalance
AccountBalance
UpiAccount
UpiAccount
SIM
SIM
Card
Card
AllBanks
AllBanks
UpiTurbo.LinkAction
UpiTurbo.LinkAction
2. Test Integration
We recommend the following:- Complete the integration on UAT before using the prod builds.
- Perform the UAT using the Razorpay-provided API keys.
3. Go-live Checklist
Complete these steps to take your integration live:- You should get your app id whitelisted by Razorpay to test on prod.
-
Import the prod library from the GitHub repository →
https://github.com/upi-turbo/android-turbo-sample-app/tree/prod/app/libsprod branch. -
Add Proguard rules:
keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName <fields>; }keepclassmembers enum * { *; }keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }dontwarn com.razorpay.**keep class com.razorpay.** {*;}keep class com.olivelib.** {*;}keep class com.olive.** {*;}keep class org.apache.xml.security.** {*;}keep interface org.apache.xml.security.** {*;}keep class org.npci.** {*;}keep interface org.npci.** {*;}keep class retrofit2.** { *; }keep class okhttp3.** { *; }
- Replace the UAT credential with the Razorpay live keys for prod testing.