Integrate Magic Checkout on Android App

Steps to integrate Magic Checkout on your Android app.


Follow these steps to integrate the Razorpay Magic Checkout on your Android application.

  • Create a Razorpay account.
  • Generate from the Dashboard. To go live with the integration and start accepting real payments, generate Live Mode API Keys and replace them in the integration.

Follow the steps given below:

1.1 Enable/Disable Magic Checkout and Cash on Delivery

Raise a request with your Razorpay SPOC to get this feature enabled on your account. Once this feature is enabled, the customer address saving and coupon features are enabled.

1.2 Create Promotions and Shipping Info API Endpoints

Follow the steps given below to create promotions and shipping info API endpoints:

Watch Out!

Ensure that the URLs are publicly accessible, require no authentication, and are hosted on your server.

  1. Log in to the Dashboard and navigate to Magic Checkout.
  2. In the Platform Setup, select Custom E-Commerce Platform from the drop-down list and click Next.
    Choose custom platform
  3. In the Setup & Settings section, click Checkout Settings.
  4. In the Coupon Settings section, enter the following:
    1. URL for get promotions: The API URL should return a list of promotions applicable to the specified order_id and customer. Magic Checkout uses this endpoint to fetch these promotions from your server and display them to your customers in the checkout modal.
    2. URL for apply promotions: The API URL validates the promotion code applied by the customer and should return the discount amount. Magic Checkout uses this endpoint to apply promotions via your server.
  5. Click Save settings.
    Add promotion URLs
  6. Navigate to Shipping Setup.
  7. Select API as the Shipping Service type from the drop-down list.
  8. Enter the URL for shipping info. The API URL should return shipping serviceability, COD serviceability, shipping fees, and COD fees for a given list of customer addresses. Magic Checkout uses this endpoint to retrieve shipping information from your server.
  9. Click Save Settings.
    Add shipping URL

1.3 Install Razorpay Android Magic SDK

To install the SDK in your Android project, add the following code to your project's top-level build.gradle file. This provides access to the SDK library.

repositories {
mavenCentral()
}
dependencies {
implementation 'com.razorpay:checkout:1.6.41'
}

1.4 Initialise Razorpay Android Magic SDK

Use the setKeyId() method of the Checkout class to dynamically add your API key id. You can generate your API keys from the

.

To ensure the Checkout form loads quickly, call the preload() method early in your payment flow. The time taken to load resources may vary based on your network bandwidth.

public class PaymentActivity extends Activity {
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Preload payment resources
*/
Checkout.preload(getApplicationContext());
// ...
checkout.setKeyID("<YOUR_KEY_ID>");
// ...
}
}

Watch Out!

It is recommended to send the API Key ID from your server-side as app-related metadata fetch. Do not add API Keys in the AndroidManifest file.

1.5 Create an Order

You can create an order using the following API and send the additional information required for Magic Checkout. Pass the order_id received in response to the checkout code.

curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
-X POST https://api.razorpay.com/v1/orders \
-H "content-type: application/json" \
-d '{
"amount": 50000, // in paise. Here 50000 = 50000 paise, which equals to ₹500
"currency": "INR",
"receipt": "receipt#1",
"notes": {},
"line_items_total": 50000, // in paise.
"line_items": [
{
"sku": "1g234",
"variant_id": "12r34",
"other_product_codes": {
"upc": "12r34",
"ean": "123r4",
"unspsc": "123s4"
},
"price": 50000, // in paise.
"offer_price": 50000, // in paise.
"tax_amount": 0,
"quantity": 1,
"name": "TEST",
"description": "TEST",
"weight": 1700, // in grams
"dimensions": {
"length": 1700,
"width": 1700,
"height": 1700
},
"image_url": "url",
"product_url": "url",
"notes": {}
}
]
}'

1.5.1 Request Parameters

amount

mandatory

integer The transaction amount, expressed in the currency subunit, such as paise (in case of INR). For example, for an actual amount of ₹299.35, the value of this field should be 29935.

currency

mandatory

string The currency in which the transaction should be made. See the

. Default is INR. Length must be of 3 characters.

receipt

mandatory

string Your receipt id for this order should be passed here. Maximum length of 40 characters.

notes

optional

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”.

line_items_total

mandatory

integer Total of offer_price for all line items added to the cart, in paise. For example, if a shoe worth ₹8,000 and a shirt worth ₹10,000 are added, the line_item_total will be 1800000. This amount is post-tax.

Watch Out!

To ensure the order is considered as a Magic Checkout order, you must pass this parameter. Otherwise, it will default to Standard Checkout order, and customers will view the Standard Checkout UI instead of Magic Checkout. Know more about

.

line_items

mandatory

object This will have the details about the specific items added to the cart.

sku

mandatory

string Alphanumeric. Unique product id defined by you.

variant_id

mandatory

string Alphanumeric. Unique variant_id defined by you.

other_product_codes

optional

object Array to collect different codes that can identify the item type. Possible values: upc: string Universal Product Code (UPC; redundantly: UPC code) is a barcode symbology used worldwide to track trade items in stores. UPC consists of 12 numeric digits that are uniquely assigned to each trade item

  • ean: string European Article Numbers (EAN) is a type of barcode that encodes an article number. Contains 8 (EAN-8) or 13 (EAN-13) numerical digits.
  • unspsc: string The United Nations Standard Products and Services Code (UNSPSC) is a taxonomy of products and services used in ecommerce. It is a four-level hierarchy coded as an eight-digit number, with an optional fifth level adding two more digits.

price

mandatory

integer Price of the product in paise.

offer_price

mandatory

integer Final price charged to the customer in paise, after applying any adjustments, such as product discounts.

Handy Tips

If no discount is applied, price and offer_price will be the same.

tax_amount

mandatory

integer The tax levied on the product.

quantity

mandatory

integer Number of units added in the cart.

name

mandatory

string Name of the product.

description

mandatory

string Description of the product.

weight

optional

integer Weight of the product in grams.

dimensions

optional

object The dimensions of the product.

length

optional

string The length of the product in centimeters.

width

optional

string The width of the product in centimeters.

height

optional

string The height of the product in centimeters.

product_url

optional

string URL of the product's listing page.

image_url

optional

string The URL of the product image. This parameter is mandatory if you want to display product images on our iframe.

notes

optional

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”.

1.5.2 Response Parameters

Descriptions for the response parameters are present in the

parameters table.

1.5.3 Error Response Parameters

The error response parameters are available in the

.

1.6 Interact with Shipping Info API

This API should return shipping serviceability, COD serviceability, shipping fees, and COD fees for a given list of customer addresses.

POST
/your-server-url/shipping-info-api-path
{
"order_id": "SomeReceiptValue", // This is the receipt field set in the Razorpay order
"razorpay_order_id": "EKwxwAgItmmXdp", // This is the RZP order created without the `order_` prefix
"email": "gaurav.kumar@example.com", // Email field will be set if the customer enters an email
"contact": "+919900000000", // Customer phone number with country code
"addresses": [{
"id": "0",
"zipcode": "560060",
"state_code": "KA",
"country": "IN"
}]
}

1.6.1 Request Parameters

order_id

mandatory

string Unique identifier of the order created

.

razorpay_order_id

mandatory

string Unique identifier for the order returned by Checkout.

email

mandatory

string Customer's email address.

contact

mandatory

string Customer's phone number.

addresses

mandatory

array Customer's address details.

id

mandatory

string Unique identifier of the customer's address.

zipcode

mandatory

string Customer's ZIP code.

state_code

optional

string The code of the state where the customer resides.

country

mandatory

string Country where the customer resides. The length cannot exceed 2 characters.

1.6.2 Response Parameters

addresses

mandatory

array Customer's address details.

id

mandatory

string Unique identifier of the customer's address.

zipcode

mandatory

string Customer's ZIP code.

country

mandatory

string Country where the customer resides. The length cannot exceed 2 characters.

shipping_methods

mandatory

array Details regarding the shipping methods.

id

mandatory

string Unique identifier of the shipping method.

description

integer Brief description of the shipping method.

name

mandatory

string Name of the shipping method.

serviceable

mandatory

boolean Indicates whether you deliver orders to the zipcode entered by the customer. This is based on the zipcodes you have added in the serviceability setting on the Razorpay Dashboard. Possible values:

  • true: Orders can be delivered to the added zipcodes.
  • false: Orders cannot be delivered to the added zipcodes.

shipping_fee

mandatory

integer Shipping charge applicable to be paid by the customer.

cod

mandatory

boolean Indicates whether you support cash on delivery on this order.

  • true: COD payment method is supported.
  • false: COD payment method is not supported.

cod_fee

mandatory

integer Additional amount charged by for you COD. This is based on the amount you have added to the COD setting on the Razorpay Dashboard.

Handy Tips

If the cod field is false, set the cod_fee field to 0.

1.7 Interact with Get Promotions API

This API should return the list of promotions applicable for the given order_id and customer.

POST
/your-server-url/create-promotions-api-path
{
"order_id": "SomeReceiptValue", // this is the receipt field set in Razorpay order
"contact": "+919000090000",
"email": "gaurav.kumar@example.com"
}'

1.7.1 Request Parameters

order_id

mandatory

string Unique identifier of the order created

.

contact

optional

string Customer's phone number.

email

optional

string Customer's email address.

1.7.2 Response Parameters

promotions

mandatory

array Details of the promotions created.

code

mandatory

string Unique identifier of the promotion.

summary

mandatory

string Summary about the promotion. For example, 10% off on total cart value.

description

optional

string Brief description of the promotion. For example, 10% on total cart value upto ₹300.

1.7.3 Interact with Apply Promotions API

This API should validate the promotion code applied by the customer and return the discount amount.

POST
/your-server-url/create-promotions-api-path
{
"order_id": "SomeReceiptValue", // this is the receipt field set in Razorpay order
"contact": "+919000090000",
"email": "gaurav.kumar@example.com",
"code": "500OFF"
}'

1.7.3.1 Request Parameters

order_id

mandatory

string Unique identifier of the order created

.

contact

optional

string Customer's phone number.

email

optional

string Customer's email address.

code

mandatory

string Promotion code used to avail discount on checkout.

1.7.3.2 Response Parameters

promotion

mandatory

object Used to pass all offer or discount-related information, including promotion code discount, method discount and so on.

reference_id

mandatory

string Id of the offer you create.

code

optional

string Promotion code used to avail discount on checkout.

type

optional

string Type of offer. Possible values:

  • coupon: A discount applied by customers during checkout. For example, customers can use a coupon like Diwali Sale 500 Off to get ₹500 off the total cart value.
  • offer: A promotion you create for your customers. For example, you create an offer Buy 4 t-shirts and get 2 free. In this case, when customers add 4 t-shirts to their cart, the 2 additional t-shirts will be automatically added for free.

value

optional

integer The offer value that needs to be applied in paise. For example, if you want to offer a discount of ₹500, enter 50000.

value_type

optional

string The type of value like:

  • fixed_amount: A fixed amount discount value in the currency of the order. For example, ₹500.
  • percentage: A percentage discount value. For example, 10%.
  • BXGY: Buy X and Get Y. For example, if you buy 2 t-shirts, you a get a cap for free or at a discounted value.

Handy Tips

Regardless of the value_type, the amount specified in the value parameter is applied as-is. For example, if value_type is percentage and the value is 5000, 5000 is considered in currency subunits (paise).

description

optional

string Description of the promotion applied. For example, New Year Sale Offer.

1.7.3.3 Error Code, Description and Next Steps

1.8 Initiate Payment and Display Checkout Form

Create an instance of the Checkout and pass the payment details and options as a JSONObject. Ensure that you add the order_id generated in

.

public void startPayment() {
checkout.setKeyID("<YOUR_KEY_ID>");
/**
* Instantiate Checkout
*/
Checkout checkout = new Checkout();
/**
* Set your logo here
*/
checkout.setImage(R.drawable.logo);
/**
* Reference to current activity
*/
final Activity activity = this;
/**
* Pass your payment options to the Razorpay Checkout as a JSONObject
*/
try {
JSONObject options = new JSONObject();
options.put("name", "Merchant Name");
options.put("description", "Reference No. #123456");
options.put("image", "http://example.com/image/rzp.jpg");
options.put("order_id", "order_DBJOWzybf0sJbb");//from response of step 3.
options.put("theme.color", "#3399cc");
options.put("currency", "INR");
options.put("amount", "50000");//pass amount in currency subunits
options.put("prefill.email", "gaurav.kumar@example.com");
options.put("prefill.contact","9988776655");
options.put("one_click_checkout", true); // magic checkout
options.put("show_coupons", true); // magic checkout
JSONObject retryObj = new JSONObject();
retryObj.put("enabled", true);
retryObj.put("max_count", 4);
options.put("retry", retryObj);
checkout.open(activity, options);
} catch(Exception e) {
Log.e(TAG, "Error in starting Razorpay Checkout", e);
}
}

Handy Tips

When you paste the checkout options given above, the following error message appears: 'TAG has private access in androidx.fragment.app.FragmentActivity'. You can resolve this by adding the following code:

public class MainActivity extends AppCompatActivity implements PaymentResultListener {
private static final String TAG = MainActivity.class.getSimpleName();

Checkout.open() launches the Checkout form where the customer completes the payment and returns the payment result via appropriate callbacks on the PaymentResultListener.

Payment Options in JSONObject: All available options in the Standard Web Checkout are also available in Android.

1.8.1 Other Checkout Option

key

mandatory

string API Key ID generated from the Dashboard.

amount

mandatory

integer Payment amount in the smallest currency subunit. For example, if the amount to be charged is ₹299.00, then pass 29900 in this field. In the case of three decimal currencies, such as KWD, BHD and OMR, to accept a payment of 295.991, pass the value as 295990. And in the case of zero decimal currencies such as JPY, to accept a payment of 295, pass the value as 295.

Watch Out!

As per payment guidelines, you should pass the last decimal number as 0 for three decimal currency payments. For example, if you want to charge a customer 99.991 KD for a transaction, you should pass the value for the amount parameter as 99990 and not 99991.

currency

mandatory

string The currency in which the payment should be made by the customer. See the list of

.

Handy Tips

Razorpay has added support for zero decimal currencies, such as JPY, and three decimal currencies, such as KWD, BHD, and OMR, allowing businesses to accept international payments in these currencies. Know more about

(May 2024).

name

mandatory

string Your Business/Enterprise name shown on the Checkout form. For example, Acme Corp.

description

optional

string Description of the purchase item shown on the Checkout form. It should start with an alphanumeric character.

image

optional

string Link to an image (usually your business logo) shown on the Checkout form. Can also be a base64 string if you are not loading the image from a network.

order_id

mandatory

string Order ID generated via

.

prefill

object You can prefill the following details at Checkout.

Boost Conversions and Minimise Drop-offs

  • Autofill customer contact details, especially phone number to ease form completion. Include customer’s phone number in the contact parameter of the JSON request's prefill object. Format: +(country code)(phone number). Example: "contact": "+919000090000".
  • This is not applicable if you do not collect customer contact details on your website before checkout, have Shopify stores or use any of the no-code apps.

name

optional

string Cardholder's name to be prefilled if customer is to make card payments on Checkout. For example, Gaurav Kumar.

email

optional

string Email address of the customer.

contact

optional

string Phone number of the customer. The expected format of the phone number is + {country code}{phone number}. If the country code is not specified, 91 will be used as the default value. This is particularly important while prefilling contact of customers with phone numbers issued outside India. Examples:

  • +14155552671 (a valid non-Indian number)
  • +919977665544 (a valid Indian number).
    If 9977665544 is entered, +91 is added to it as +919977665544.

method

optional

string Pre-selection of the payment method for the customer. Will only work if contact and email are also prefilled. Possible values:

  • card
  • netbanking
  • wallet
  • upi
  • emi

notes

optional

object Set of key-value pairs that can be used to store additional information about the payment. It can hold a maximum of 15 key-value pairs, each 256 characters long (maximum).

theme

object Thematic options to modify the appearance of Checkout.

color

optional

string Enter your brand colour's HEX code to alter the text, payment method icons and CTA (call-to-action) button colour of the Checkout form.

backdrop_color

optional

string Enter a HEX code to change the Checkout's backdrop colour.

modal

object Options to handle the Checkout modal.

backdropclose

optional

boolean Indicates whether clicking the translucent blank space outside the Checkout form should close the form. Possible values:

  • true: Closes the form when your customer clicks outside the checkout form.
  • false (default): Does not close the form when customer clicks outside the checkout form.

escape

optional

boolean Indicates whether pressing the escape key should close the Checkout form. Possible values:

  • true (default): Closes the form when the customer presses the escape key.
  • false: Does not close the form when the customer presses the escape key.

handleback

optional

boolean Determines whether Checkout must behave similar to the browser when back button is pressed. Possible values:

  • true (default): Checkout behaves similarly to the browser. That is, when the browser's back button is pressed, the Checkout also simulates a back press. This happens as long as the Checkout modal is open.
  • false: Checkout does not simulate a back press when browser's back button is pressed.

confirm_close

optional

boolean Determines whether a confirmation dialog box should be shown if customers attempts to close Checkout. Possible values:

  • true: Confirmation dialog box is shown.
  • false (default): Confirmation dialog box is not shown.

ondismiss

optional

function Used to track the status of Checkout. You can pass a modal object with ondismiss: function()\{\} as options. This function is called when the modal is closed by the user. If retry is false, the ondismiss function is triggered when checkout closes, even after a failure.

animation

optional

boolean Shows an animation before loading of Checkout. Possible values:

  • true(default): Animation appears.
  • false: Animation does not appear.

subscription_id

optional

string If you are accepting recurring payments using Razorpay Checkout, you should pass the relevant subscription_id to the Checkout. Know more about

.

subscription_card_change

optional

boolean Permit or restrict customer from changing the card linked to the subscription. You can also do this from the

. Possible values:
  • true: Allow the customer to change the card from Checkout.
  • false (default): Do not allow the customer to change the card from Checkout.

recurring

optional

boolean Determines if you are accepting

via instruments such as emandate, paper NACH and so on. Possible values:
  • true: You are accepting recurring payments.
  • false (default): You are not accepting recurring payments.

callback_url

optional

string Customers will be redirected to this URL on successful payment. Ensure that the domain of the Callback URL is allowlisted.

redirect

optional

boolean Determines whether to post a response to the event handler post payment completion or redirect to Callback URL. callback_url must be passed while using this parameter. Possible values:

  • true: Customer is redirected to the specified callback URL in case of payment failure.
  • false (default): Customer is shown the Checkout popup to retry the payment with the suggested next best option.

customer_id

optional

string Unique identifier of customer. Used for:

remember_customer

optional

boolean Determines whether to allow saving of cards. Can also be configured via the

. Possible values:
  • true: Enables card saving feature.
  • false (default): Disables card saving feature.

timeout

optional

integer Sets a timeout on Checkout, in seconds. After the specified time limit, the customer will not be able to use Checkout.

readonly

object Marks fields as read-only.

contact

optional

boolean Used to set the contact field as readonly. Possible values:

  • true: Customer will not be able to edit this field.
  • false (default): Customer will be able to edit this field.

email

optional

boolean Used to set the email field as readonly. Possible values:

  • true: Customer will not be able to edit this field.
  • false (default): Customer will be able to edit this field.

name

optional

boolean Used to set the name field as readonly. Possible values:

  • true: Customer will not be able to edit this field.
  • false (default): Customer will be able to edit this field.

hidden

object Hides the contact details.

contact

optional

boolean Used to set the contact field as optional. Possible values:

  • true: Customer will not be able to view this field.
  • false (default): Customer will be able to view this field.

email

optional

boolean Used to set the email field as optional. Possible values:

  • true: Customer will not be able to view this field.
  • false (default): Customer will be able to view this field.

send_sms_hash

optional

boolean Used to auto-read OTP for cards and netbanking pages. Applicable from Android SDK version 1.5.9 and above. Possible values:

  • true: OTP is auto-read.
  • false (default): OTP is not auto-read.

allow_rotation

optional

boolean Used to rotate payment page as per screen orientation. Applicable from Android SDK version 1.6.4 and above. Possible values:

  • true: Payment page can be rotated.
  • false (default): Payment page cannot be rotated.

retry

optional

object Parameters that enable retry of payment on the checkout.

enabled

boolean Determines whether the customers can retry payments on the checkout. Possible values:

  • true (default): Enables customers to retry payments.
  • false: Disables customers from retrying the payment.

max_count

integer The number of times the customer can retry the payment. We recommend you to set this to 4. Having a larger number here can cause loops to occur.

Watch Out!

Web Integration does not support the max_count parameter. It is applicable only in Android and iOS SDKs.

config

optional

object Parameters that enable configuration of checkout display language.

display

object Child parameter that enables configuration of checkout display language.

language

string The language in which checkout should be displayed. Possible values:

  • en: English
  • ben: Bengali
  • hi: Hindi
  • mar: Marathi
  • guj: Gujarati
  • tam: Tamil
  • tel: Telugu

Handy Tips

If you call the payment start method inside a fragment, ensure that the fragment's parent activity implements the PaymentResultListener interface.

1.9 Handle Success and Error Events

You have the option to implement PaymentResultListener or PaymentResultWithDataListener to receive callbacks for the payment result.

  • PaymentResultListener provides only payment_id as the payment result.
  • PaymentResultWithDataListener provides additional payment data such as email and contact of the customer, along with the order_id, payment_id, signature and more.

Use the code below to import the function in your .java file. This should be added at the beginning of the file.

import com.razorpay.PaymentResultListener

Given below are the sample codes for implementation:

public class PaymentActivity extends Activity implements PaymentResultListener {
// ...
@Override
public void onPaymentSuccess(String razorpayPaymentID) {
/**
* Add your logic here for a successful payment response
*/
}
@Override
public void onPaymentError(int code, String response) {
/**
* Add your logic here for a failed payment response
*/
}
}
public class PaymentActivity extends Activity implements PaymentResultWithDataListener {
// ...
@Override
public void onPaymentSuccess(String razorpayPaymentID, PaymentData paymentData) {
/**
* Add your logic here for a successful payment response
*/
}
@Override
public void onPaymentError(int code, String response) {
/**
* Add your logic here for a failed payment response
*/
}
}

Watch Out!

  • Razorpay's payment process takes place in a new activity. Since there are two activities involved, your activity can get corrupted or destroyed if the device is low on memory. These two methods should not depend on any variables not set through your life cycle hooks.
  • It is recommended that you test everything by enabling "Don't Keep Activities" in Developer Options under Settings.

1.9.1 Error Codes

The error codes are returned in the onPaymentError method:

1.9.2 Erase User Data from SDK

The SDK stores customer-specific data such as email, contact number, and user-session cookies if the customer wants to make another payment in the same session. You can delete such sensitive information before another customer logs into the app.

To erase customer data from the app, you can call the following method anywhere in your app.

Checkout.clearUserData(Context)

1.10 Store Fields in Server

A successful payment returns the following fields to the Checkout form.

  • 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.

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.

1.11 Verify Payment Signature

This is a mandatory step to confirm the authenticity of the details returned to the Checkout form for successful payments.

To verify the razorpay_signature returned to you by the Checkout form:

  1. Create a signature in your server using the following attributes:

    • order_id: Retrieve the order_id from your server. Do not use the razorpay_order_id returned by Checkout.
    • razorpay_payment_id: Returned by Checkout.
    • key_secret: Available in your server. The key_secret that was generated from the .
  2. Use the SHA256 algorithm, the razorpay_payment_id and the order_id to construct a HMAC hex digest as shown below:

    generated_signature = hmac_sha256(order_id + "|" + razorpay_payment_id, secret);
    if (generated_signature == razorpay_signature) {
    payment is successful
    }
  3. If the signature you generate on your server matches the razorpay_signature returned to you by the Checkout form, the payment received is from an authentic source.

Given below is the sample code for payment signature verification:

RazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");
String secret = "EnLs21M47BllR3X8PSFtjtbd";
JSONObject options = new JSONObject();
options.put("razorpay_order_id", "order_IEIaMR65cu6nz3");
options.put("razorpay_payment_id", "pay_IH4NVgf4Dreq1l");
options.put("razorpay_signature", "0d4e745a1838664ad6c9c9902212a32d627d68e917290b0ad5f08ff4561bc50f");
boolean status = Utils.verifyPaymentSignature(options, secret);

After you have completed the integration, you can

, make test payments, replace the test key with the live key and integrate with other .

1.12 Verify Payment Status

Handy Tips

On the Dashboard, ensure that the payment status is captured. Refer to the payment capture settings page to know how to

.

You can track the payment status in three ways:

To verify the payment status from the Dashboard:

  1. Log in to the Dashboard and navigate to TransactionsPayments.
  2. Check if a Payment Id has been generated and note the status. In case of a successful payment, the status is marked as Captured.
Check if the payment id is generated and the status is captured

1.13 Perform Post Payment Processing

Based on the order response, you can handle post-payment processing on your end. Use the Fetch Orders API to retrieve order details, including customer information, address, shipping method, and promotions.

Use the following endpoint to retrieve the details of a particular order:

GET
/orders/:id
curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET]\
-X GET https://api.razorpay.com/v1/orders/order_EKwxwAgItmmXdp \

Know more about the

Order Status

  • Prepaid orders: paid.
  • COD orders: placed.

1.8.1 Path Parameter

id

mandatory

string Unique identifier of the order to be retrieved.

Before going live, make sure to check the following:

  • If you configured the above settings in Test Mode, ensure you replicate them in Live Mode.
  • Ensure you use API keys generated in Live Mode.
  • If you have multiple Razorpay accounts, ensure you use the Live key from the correct account you intend to go live with.

Was this page helpful?


integrate magic checkout
android app
integration steps
accept payments
android magic sdk