Integration Steps

Steps to integrate with Razorpay WebView for Mobile Apps.


var options = {
... // existing options
callback_url: 'https://your-server/callback_url',
redirect: true
}

The script that callback_url points to should to handle incoming POST requests.

For a successful payment, the callback URL will have razorpay_payment_id. In addition, razorpay_order_id and razorpay_signature will be returned in the request body, provided your server-side has been integrated with Orders API. Know more about

.

Handy Tips

You can set query parameters with callback_url to map it with entities at your end. For example, following is a valid callback URL: https://your-site.com/callback?cart_id=12345

If you are loading the checkout form to WebView on your native mobile app without using the Razorpay SDK, provide a callback_url in the Curlec Checkout parameters. After a successful payment, a redirect is made to the specified URL. You can enable the handover control from the page loaded at callback_url to your native app code.

The webpage will be loaded into a WebView class. To communicate anything from the webpage loaded into WebView to native code, you would need to add a JavaScriptInterface to the WebView.

webView.addJavascriptInterface("PaymentInterface", new PaymentInterface());
class PaymentInterface{
@JavascriptInterface
public void success(String data){
}
@JavascriptInterface
public void error(String data){
}
}

The JavaScript code loaded into WebView calls the native methods of PaymentInterface class, PaymentInterface.success() and PaymentInterface.error().

Add the following code to your WebView to enable cookies.

if (android.os.Build.VERSION.SDK_INT >= 21) {
CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
} else {
CookieManager.getInstance().setAcceptCookie(true);
}

Handy Tips

Use setAcceptThirdPartyCookies for API level 21 and above.

WKWebView framework is used to implement a bridge between JavaScript and the native code as UIWebView does not provide this functionality. The bridge is added by passing an instance of WKScriptMessageHandler and a string (which is the name of the bridge).

webView.configuration.userContentController.add(self, name: "PaymentJSBridge")

The instance of WKScriptMessageHandler which is passed needs to implement a function userContentController(WKUserContentController, WKScriptMessage). Once the function is implemented, the data is sent by JavaScript and can be retrieved inside the function.

public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if let messageBody = message.body as? [AnyHashable:Any]{
}
}

At the JavaScript end, data is sent to the iOS native code by evaluating the following JavaScript.

window.webkit.messageHandlers.PaymentJSBridge.postMessage(messageBody)

Handy Tips

Only the function userContentController can be called from the JavaScript by evaluating the above-mentioned script. The messageBody passed by the script must contain the appropriate data to control the flow of the native code.


Is this integration guide useful?