diff --git a/pom.xml b/pom.xml index 411b635..a234b40 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ payment integration with paytm - 1.8 + 11 diff --git a/src/main/java/com/javatechie/spring/paytm/api/PaymentController.java b/src/main/java/com/javatechie/spring/paytm/api/PaymentController.java index 473844a..3bfd5f5 100644 --- a/src/main/java/com/javatechie/spring/paytm/api/PaymentController.java +++ b/src/main/java/com/javatechie/spring/paytm/api/PaymentController.java @@ -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; @@ -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 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 mapData = request.getParameterMap(); - TreeMap parameters = new TreeMap(); - 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 parameters, String paytmChecksum) throws Exception { - return CheckSumServiceHelper.getCheckSumServiceHelper().verifycheckSum(paytmDetails.getMerchantKey(), - parameters, paytmChecksum); - } - - - private String getCheckSum(TreeMap 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 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 mapData = request.getParameterMap(); + TreeMap parameters = new TreeMap(); + 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 parameters, String paytmChecksum) throws Exception { + return PaytmChecksum.verifySignature(parameters, paytmDetails.getMerchantKey(), paytmChecksum); + } + + + private String getCheckSum(TreeMap parameters) throws Exception { + return PaytmChecksum.generateSignature(parameters, paytmDetails.getMerchantKey()); + } + + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 319f9d9..65febd6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,3 +1,3 @@ server.port=9090 -paytm.email=Enter your Email id -paytm.mobile=Enter your mobile number +paytm.email=kambalavijay@gmail.com +paytm.mobile=9676964105 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 5e4c61e..f79b696 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -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}