Skip to content

Instantly share code, notes, and snippets.

@mb-14
Last active December 2, 2016 07:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mb-14/4c6fdea00439465a726f333dab7d0058 to your computer and use it in GitHub Desktop.
Save mb-14/4c6fdea00439465a726f333dab7d0058 to your computer and use it in GitHub Desktop.
Intent flow

Razorpay ePOS intent flow

To launch Razorpay ePOS using the intent flow you need to launch an intent with the follwing URI data: rzp://epos/pay?product_name=tshirt&amount=100&contact=9876543210&description=tshirt&merchant_order_id=txn_123qwe

We have given a helper class called RazorpayInvoice which helps in creating this URI

/*
* Amount, product name and contact are mandatory fields
* Amount should be pass in paise as a long
*/
 RazorpayInvoice invoice = new RazorpayInvoice.Builder()
                .setMerchantOrderId(merchantOrderId.getText().toString())
                .setAmount(Long.parseLong(amountEt.getText().toString()))
                .setContact(contactEt.getText().toString())
                .setDescription(descriptionEt.getText().toString())
                .setProductName(productNameEt.getText().toString())
                .create();
                
invoice.launch(activityContext);

To proccess the result of a transaction you need to override the onActivityResult medthod and call RazorpayInvoice.handleActivityResult from there

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /**
         * You need to call this function in the onActivityResult method
         */
        RazorpayInvoice.handleOnActivityResult(requestCode, resultCode, data, new RazorpayInvoice.InvoiceResultCallback() {
            @Override
            public void onInvoiceSuccess(String invoiceId) {
                /**
                 * The invoice has been paid for successfully
                 */
            }

            @Override
            public void onInvoicePending(String invoiceId, String errorDescription) {
                /**
                 * The invoice has been created but the payment is pending
                 * You can retry the payment from the razorpay epos app
                 */
            }

            @Override
            public void onInvoiceFailure(String errorDescription) {
                /**
                 * There was an error while creating an invoice
                 */
            }
        });
    }
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
public class RazorpayInvoice {
String contact;
long amount;
String productName;
String description;
String merchantOrderId;
public static final int RZP_EPOS_REQ_CODE = 1290;
public static final int RZP_INVOICE_SUCCESS = 1;
public static final int RZP_INVOICE_PENDING = -2;
public static final int RZP_INVOICE_FAILURE = -1;
public RazorpayInvoice(Builder builder) {
contact = builder.contact;
amount = builder.amount;
productName = builder.productName;
description = builder.description;
merchantOrderId = builder.merchantOrderId;
}
public String getMerchantOrderId() {
return merchantOrderId;
}
public String getContact() {
return contact;
}
public long getAmount() {
return amount;
}
public String getProductName() {
return productName;
}
public String getDescription() {
return description;
}
public void launch(Fragment fragment){
Uri uri = buildUri();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
fragment.startActivityForResult(intent, RZP_EPOS_REQ_CODE);
}
public void launch(Activity activity) {
Uri uri = buildUri();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
activity.startActivityForResult(intent, RZP_EPOS_REQ_CODE);
}
private Uri buildUri() {
Uri.Builder builder = new Uri.Builder();
builder.scheme("rzp").
authority("epos")
.appendPath("pay");
if (TextUtils.isEmpty(productName) == false) {
builder.appendQueryParameter("product_name", productName);
}
if (amount > 0) {
builder.appendQueryParameter("amount", String.valueOf(amount));
}
if (TextUtils.isEmpty(contact) == false) {
builder.appendQueryParameter("contact", contact);
}
if (TextUtils.isEmpty(description) == false) {
builder.appendQueryParameter("description", description);
}
if (TextUtils.isEmpty(merchantOrderId) == false) {
builder.appendQueryParameter("merchant_order_id", merchantOrderId);
}
return builder.build();
}
public static void handleOnActivityResult(int requestCode, int resultCode, Intent data, InvoiceResultCallback invoiceResultListener) {
if (requestCode != RZP_EPOS_REQ_CODE)
return;
if (data == null) {
return;
}
String invoiceId;
String errorDescription;
switch (resultCode) {
case RZP_INVOICE_SUCCESS:
invoiceId = data.getStringExtra("razorpay_invoice_id");
if (invoiceResultListener != null) {
invoiceResultListener.onInvoiceSuccess(invoiceId);
}
break;
case RZP_INVOICE_PENDING:
invoiceId = data.getStringExtra("razorpay_invoice_id");
errorDescription = data.getStringExtra("error_description");
if (invoiceResultListener != null) {
invoiceResultListener.onInvoicePending(invoiceId, errorDescription);
}
break;
case RZP_INVOICE_FAILURE:
errorDescription = data.getStringExtra("error_description");
if (invoiceResultListener != null) {
invoiceResultListener.onInvoiceFailure(errorDescription);
}
}
}
public static class Builder {
String contact;
long amount;
String productName;
String description;
String merchantOrderId;
public Builder setAmount(long amount) {
this.amount = amount;
return this;
}
public Builder setProductName(String productName) {
this.productName = productName;
return this;
}
public Builder setDescription(String description) {
this.description = description;
return this;
}
public Builder setMerchantOrderId(String merchantOrderId) {
this.merchantOrderId = merchantOrderId;
return this;
}
public Builder setContact(String contact) {
this.contact = contact;
return this;
}
public RazorpayInvoice create(){
return new RazorpayInvoice(this);
}
}
public interface InvoiceResultCallback {
void onInvoiceSuccess(String invoiceId);
void onInvoicePending(String invoiceId, String errorDescription);
void onInvoiceFailure(String errorDescription);
}
}
package com.razorpay.sameapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Make sure your Activity/Fragment implements the InvoiceResultCallback
*/
public class MainActivity extends AppCompatActivity implements RazorpayInvoice.InvoiceResultCallback {
@BindView(R.id.et_amount)
EditText amountEt;
@BindView(R.id.et_contact)
EditText contactEt;
@BindView(R.id.et_description)
EditText descriptionEt;
@BindView(R.id.et_product_name)
EditText productNameEt;
@BindView(R.id.et_merchant_order_id)
EditText merchantOrderId;
@OnClick(R.id.button_pay)
void pay(){
/**
* Create an instance of RazorpayInvoice
* Amount, product name and contact are mandatory fields
* Amount should be pass in paise as a long
*/
RazorpayInvoice invoice = new RazorpayInvoice.Builder()
.setMerchantOrderId(merchantOrderId.getText().toString())
.setAmount(Long.parseLong(amountEt.getText().toString()))
.setContact(contactEt.getText().toString())
.setDescription(descriptionEt.getText().toString())
.setProductName(productNameEt.getText().toString())
.create();
invoice.launch(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/**
* You need to call this function in the onActivityResult method
*/
RazorpayInvoice.handleOnActivityResult(requestCode, resultCode, data, this);
}
@Override
public void onInvoiceSuccess(String invoiceId) {
/**
* The invoice has been paid for successfully
*/
Toast.makeText(this, invoiceId, Toast.LENGTH_SHORT).show();
}
@Override
public void onInvoicePending(String invoiceId, String errorDescription) {
/**
* The invoice has been created but the payment is pending
* You can retry the payment from the razorpay epos app
*/
Toast.makeText(this, invoiceId + ":" + errorDescription, Toast.LENGTH_SHORT).show();
}
@Override
public void onInvoiceFailure(String errorDescription) {
/**
* There was an error while creating an invoice
*/
Toast.makeText(this, errorDescription, Toast.LENGTH_SHORT).show();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment