I am trying to integrate Paytm with my android app. Creating token at backend. I am successfully able to launch Paytm transaction page and complete transaction under android studio but not on actual mobile.
The issue is: It is not opening the payment page in actual mobile. Timing out with error:
Webpage not available
The webpage at https://internal-pgp-stage-renew-8887872.ap-south-1.elb.amazonaws.com/theia/api/v2/showPaymentPage?mid=<mid>&orderId=<id>&txnToken=<token>&amount=2968.2&sourceName=googlechrome&sourceUrl=https://internal-pgp-stage-renew-8887872.ap-south-1.elb.amazonaws.com/theia/api/v2/showPaymentPage?isAppLink=true&appInvokeForm=REDIRECTION_APPINVOKE
could not be loaded because:
net::ERR_CONNECTION_TIMED_OUT
Backend code:
public String createPaytmOrder(String bookingId, float txnAmount, String mid, String apiKey, String paytmBaseUrl)
throws JSONException, EmException {
JSONObject body = new JSONObject();
body.put("requestType", "Payment");
body.put("mid", mid);
body.put("orderId", bookingId);
body.put("callbackUrl", "https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=" + bookingId);
body.put("websiteName", "WEBSTAGING");
JSONObject txnBody = new JSONObject();
txnBody.put("value", String.valueOf(txnAmount));
txnBody.put("currency", "INR");
body.put("txnAmount", txnBody);
JSONObject userInfo = new JSONObject();
userInfo.put("custId", "customer123");
userInfo.put("firstName", "First Name");
userInfo.put("email", "[email protected]");
body.put("userInfo", userInfo);
JSONObject head = new JSONObject();
head.put("signature", generateChecksum(body.toString(), apiKey));
JSONObject paytmParams = new JSONObject();
paytmParams.put("body", body);
paytmParams.put("head", head);
String post_data = paytmParams.toString();
String postUrl = String.format("/theia/api/v1/initiateTransaction?mid=%s&orderId=%s", mid, bookingId);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
RestTemplateWrapper restTemplateWrapper = new RestTemplateWrapper(paytmBaseUrl, headers);
@SuppressWarnings("unchecked")
ResponseEntity<PaytmTokenResponse> paytmTokenResponseEntity =
(ResponseEntity<PaytmTokenResponse>) restTemplateWrapper.postRequest(postUrl, post_data,
PaytmTokenResponse.class);
PaytmTokenResponse paytmTokenResponse = paytmTokenResponseEntity.getBody();
System.out.println("Response: " + paytmTokenResponse.toString());
return paytmTokenResponse.getBody().getTxnToken();
}
private String generateChecksum(String body, String apiKey) throws EmException {
try {
return PaytmChecksum.generateSignature(body, apiKey);
} catch (Exception e) {
throw new EmException("Wrong input provided.");
}
}
https://securegw-stage.paytm.in
PaytmTokenResponse
@Data
public class TokenResHead {
private String responseTimestamp;
private String version;
private String clientId;
private String signature;
}
TokenResBody
@Data
public class TokenResBody {
private ResultInfo resultInfo;
private String txnToken;
private boolean isPromoCodeValid;
private boolean authenticated;
private String txnId;
private String bankTxnId;
private String orderId;
private String txnAmount;
private String txnType;
private String gatewayName;
private String bankName;
private String mid;
private String paymentMode;
private String refundAmt;
public String txnDate;
private String authRefId;
}
private void proceedPaytmPayment(String paytmUrl, String mid, String orderID, String txnToken){
PaytmOrder paytmOrder = new PaytmOrder(orderID, mid, txnToken, "2968.20", "https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID="+orderID);
TransactionManager transactionManager = new TransactionManager(paytmOrder, new PaytmPaymentTransactionCallback() {
@Override
public void onTransactionResponse(@Nullable Bundle bundle) {
//TODO open checkout landing page
}
@Override
public void networkNotAvailable() {
}
@Override
public void onErrorProceed(String s) {
}
@Override
public void clientAuthenticationFailed(String s) {
}
@Override
public void someUIErrorOccurred(String s) {
}
@Override
public void onErrorLoadingWebPage(int i, String s, String s1) {
}
@Override
public void onBackPressedCancelTransaction() {
}
@Override
public void onTransactionCancel(String s, Bundle bundle) {
}
});
transactionManager.setAppInvokeEnabled(false);
transactionManager.setEnableAssist(true);
transactionManager.setShowPaymentUrl("https://securegw-stage.paytm.in/theia/api/v1/showPaymentPage");
transactionManager.startTransaction(this,123);
}