Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<description>payment integration with paytm</description>

<properties>
<java.version>1.8</java.version>
<java.version>11</java.version>
</properties>

<dependencies>
Expand Down
155 changes: 76 additions & 79 deletions src/main/java/com/javatechie/spring/paytm/api/PaymentController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import javax.servlet.http.HttpServletRequest;

import com.paytm.pg.merchant.PaytmChecksum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
Expand All @@ -14,85 +15,81 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.paytm.pg.merchant.CheckSumServiceHelper;

@Controller
public class PaymentController {

@Autowired
private PaytmDetails paytmDetails;
@Autowired
private Environment env;

@GetMapping("/")
public String home() {
return "home";
}

@PostMapping(value = "/pgredirect")
public ModelAndView getRedirect(@RequestParam(name = "CUST_ID") String customerId,
@RequestParam(name = "TXN_AMOUNT") String transactionAmount,
@RequestParam(name = "ORDER_ID") String orderId) throws Exception {

ModelAndView modelAndView = new ModelAndView("redirect:" + paytmDetails.getPaytmUrl());
TreeMap<String, String> parameters = new TreeMap<>();
paytmDetails.getDetails().forEach((k, v) -> parameters.put(k, v));
parameters.put("MOBILE_NO", env.getProperty("paytm.mobile"));
parameters.put("EMAIL", env.getProperty("paytm.email"));
parameters.put("ORDER_ID", orderId);
parameters.put("TXN_AMOUNT", transactionAmount);
parameters.put("CUST_ID", customerId);
String checkSum = getCheckSum(parameters);
parameters.put("CHECKSUMHASH", checkSum);
modelAndView.addAllObjects(parameters);
return modelAndView;
}


@PostMapping(value = "/pgresponse")
public String getResponseRedirect(HttpServletRequest request, Model model) {

Map<String, String[]> mapData = request.getParameterMap();
TreeMap<String, String> parameters = new TreeMap<String, String>();
mapData.forEach((key, val) -> parameters.put(key, val[0]));
String paytmChecksum = "";
if (mapData.containsKey("CHECKSUMHASH")) {
paytmChecksum = mapData.get("CHECKSUMHASH")[0];
}
String result;

boolean isValideChecksum = false;
System.out.println("RESULT : "+parameters.toString());
try {
isValideChecksum = validateCheckSum(parameters, paytmChecksum);
if (isValideChecksum && parameters.containsKey("RESPCODE")) {
if (parameters.get("RESPCODE").equals("01")) {
result = "Payment Successful";
} else {
result = "Payment Failed";
}
} else {
result = "Checksum mismatched";
}
} catch (Exception e) {
result = e.toString();
}
model.addAttribute("result",result);
parameters.remove("CHECKSUMHASH");
model.addAttribute("parameters",parameters);
return "report";
}

private boolean validateCheckSum(TreeMap<String, String> parameters, String paytmChecksum) throws Exception {
return CheckSumServiceHelper.getCheckSumServiceHelper().verifycheckSum(paytmDetails.getMerchantKey(),
parameters, paytmChecksum);
}


private String getCheckSum(TreeMap<String, String> parameters) throws Exception {
return CheckSumServiceHelper.getCheckSumServiceHelper().genrateCheckSum(paytmDetails.getMerchantKey(), parameters);
}




@Autowired
private PaytmDetails paytmDetails;
@Autowired
private Environment env;

@GetMapping("/")
public String home() {
return "home";
}

@PostMapping(value = "/pgredirect")
public ModelAndView getRedirect(@RequestParam(name = "CUST_ID") String customerId,
@RequestParam(name = "TXN_AMOUNT") String transactionAmount,
@RequestParam(name = "ORDER_ID") String orderId) throws Exception {

ModelAndView modelAndView = new ModelAndView("redirect:" + paytmDetails.getPaytmUrl());
TreeMap<String, String> parameters = new TreeMap<>();
paytmDetails.getDetails().forEach((k, v) -> parameters.put(k, v));
parameters.put("MOBILE_NO", env.getProperty("paytm.mobile"));
parameters.put("EMAIL", env.getProperty("paytm.email"));
parameters.put("ORDER_ID", orderId);
parameters.put("TXN_AMOUNT", transactionAmount);
parameters.put("CUST_ID", customerId);
String checkSum = getCheckSum(parameters);
parameters.put("CHECKSUMHASH", checkSum);
modelAndView.addAllObjects(parameters);
return modelAndView;
}


@PostMapping(value = "/pgresponse")
public String getResponseRedirect(HttpServletRequest request, Model model) {

Map<String, String[]> mapData = request.getParameterMap();
TreeMap<String, String> parameters = new TreeMap<String, String>();
mapData.forEach((key, val) -> parameters.put(key, val[0]));
String paytmChecksum = "";
if (mapData.containsKey("CHECKSUMHASH")) {
paytmChecksum = mapData.get("CHECKSUMHASH")[0];
}
String result;

boolean isValideChecksum = false;
System.out.println("RESULT : " + parameters.toString());
try {
isValideChecksum = validateCheckSum(parameters, paytmChecksum);
if (isValideChecksum && parameters.containsKey("RESPCODE")) {
if (parameters.get("RESPCODE").equals("01")) {
result = "Payment Successful";
} else {
result = "Payment Failed";
}
} else {
result = "Checksum mismatched";
}
} catch (Exception e) {
result = e.toString();
}
model.addAttribute("result", result);
parameters.remove("CHECKSUMHASH");
model.addAttribute("parameters", parameters);
return "report";
}

private boolean validateCheckSum(TreeMap<String, String> parameters, String paytmChecksum) throws Exception {
return PaytmChecksum.verifySignature(parameters, paytmDetails.getMerchantKey(), paytmChecksum);
}


private String getCheckSum(TreeMap<String, String> parameters) throws Exception {
return PaytmChecksum.generateSignature(parameters, paytmDetails.getMerchantKey());
}


}
4 changes: 2 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
server.port=9090
paytm.email=Enter your Email id
paytm.mobile=Enter your mobile number
paytm.email=[email protected]
paytm.mobile=9676964105
8 changes: 4 additions & 4 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
paytm.payment:
sandbox:
merchantId: {generate your own merchantId}
merchantKey: {generate your merchantKey}
merchantId:
merchantKey:
channelId: WEB
website: WEBSTAGING
website: DEFAULT
industryTypeId: Retail
paytmUrl: https://securegw-stage.paytm.in/order/process
paytmUrl: https://securegw.paytm.in/order/process
callbackUrl: http://localhost:9090/pgresponse
details:
MID: ${paytm.payment.sandbox.merchantid}
Expand Down