From 89e269bfc56e7767ff73bc552ba66326ca32f0ff Mon Sep 17 00:00:00 2001 From: Mahesh Maney R <mahesh-maney@users.noreply.github.com> Date: Tue, 22 Aug 2023 18:02:56 +0530 Subject: [PATCH] feature for payment gateway response handler <ManeyMR>. --- .../controller/UserController.java | 10 +-- .../userManagement/handler/UserHandler.java | 6 ++ .../services/PaymentService.java | 41 ++-------- .../userManagement/services/UserService.java | 9 +++ .../services/impl/PaymentServiceImpl.java | 74 ++++++++++++++----- src/main/resources/application.properties | 1 + 6 files changed, 84 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 8898b31..4f05389 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -71,12 +71,8 @@ public class UserController { return userHandler.login(body); } - @GetMapping(value = "/payment") - public ResponseEntity<?> paymentRedirect(Payment payment){ - //Print params here - HttpHeaders headers = new HttpHeaders(); - String redirectUrl = paymentService.makePayment(payment); - headers.setLocation(URI.create(redirectUrl)); - return new ResponseEntity<String>(null,headers,HttpStatus.PERMANENT_REDIRECT); + @PostMapping(value = "/payment") + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + return userHandler.paymentRedirect(payment); } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 73f1dcf..59bec1e 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -2,6 +2,7 @@ package com.tarento.upsmf.userManagement.handler; import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; +import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.services.UserService; import com.tarento.upsmf.userManagement.utility.*; import org.slf4j.Logger; @@ -120,4 +121,9 @@ public class UserHandler { private String getorDefault(final JsonNode request, final String key, final String defaultValue){ return request.get(key) != null ? request.get(key).asText() : defaultValue; } + + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + logger.info("payload from paymentRedirect {}",payment); + return userService.paymentRedirect(payment); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index 482eea8..56b68df 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -1,40 +1,15 @@ package com.tarento.upsmf.userManagement.services; +import com.fasterxml.jackson.core.JsonProcessingException; import com.tarento.upsmf.userManagement.model.Payment; -import com.tarento.upsmf.userManagement.model.ResponseDto; +import org.springframework.stereotype.Service; -public interface PaymentService { - - public String makePayment(Payment payment); +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URISyntaxException; - /*@Autowired - PaymentRepository paymentRepository; - public ResponseDto makePayment(Payment payment){ - ResponseDto response = new ResponseDto("api.payment.make"); - // Calculate noOfExams based on the number of selected options - int noOfExams = payment.getExams().size(); - // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) - int examFeeAmount = 100; // Example exam fee amount - int feeAmount = calculateFee(noOfExams, examFeeAmount); - // Set the calculated values in the FeeManage object - payment.setNoOfExams(noOfExams); - payment.setFeeAmount(feeAmount); - // Save the FeeManage object - try { - Payment result = paymentRepository.save(payment); - response.put("message", "Success"); - response.put("response", "Created."); - response.setResponseCode(HttpStatus.OK); - } catch (Exception e) { - response.put("message", "Error saving fee details"); - response.put("response", "Failed to create a message"); - response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR); - } - return response; - } - - public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) { - return noOfExams * examFeeAmount; - }*/ +@Service +public interface PaymentService { + public String makePayment(Payment payment) throws URISyntaxException, IOException; } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index d149ec1..0152b04 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.userManagement.services; import com.fasterxml.jackson.databind.JsonNode; +import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; @@ -35,6 +36,9 @@ public class UserService { @Autowired private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever; + @Autowired + private PaymentService paymentService; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -174,4 +178,9 @@ public class UserService { ResponseEntity<String> result = restTemplate.postForEntity(uri,httpEntity,String.class); return result; } + + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + return paymentService.makePayment(payment); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 63c56ca..db606fb 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -1,33 +1,73 @@ package com.tarento.upsmf.userManagement.services.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.tarento.upsmf.userManagement.model.Payment; -import com.tarento.upsmf.userManagement.model.ResponseDto; import com.tarento.upsmf.userManagement.repository.PaymentRepository; import com.tarento.upsmf.userManagement.services.PaymentService; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; @Service +@PropertySource({ "classpath:application.properties" }) public class PaymentServiceImpl implements PaymentService { + private static final Logger logger = LoggerFactory.getLogger(PaymentServiceImpl.class); + + @Autowired + private Environment env; + + private static Environment environment; + @Autowired PaymentRepository paymentRepository; -// @Override - public String makePayment(Payment payment) { - //read params - System.out.println(payment); - //check status - - //if valid - - //save transaction details with success - //redirect to success page with success params - transaction id, amount, - //return "https://applicant.upsmfac.org?resp=success&transactionId{}=&amount={}"; - //if invalid -// save transactions details with error - //redirect to error page with error params - transaction id, error code , amount - return "https://applicant.upsmfac.org?resp=fail&transactionId{}=&amount={}"; + private String PAYMENT_GATEWAY_ENDPOINT; + + private ObjectMapper mapper = new ObjectMapper(); + + @PostConstruct + public void init(){ + environment = env; + PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("paymentGatewayEndPoint"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + + @Override + public String makePayment(Payment payment) throws URISyntaxException, IOException { + logger.info("payment details...{} ", payment); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(PAYMENT_GATEWAY_ENDPOINT); + String strPaymentURL = mapper.writeValueAsString(payment); + StringEntity entity = new StringEntity(strPaymentURL); + httpPost.setEntity(entity); + HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from httpClient call : {}", response); + String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("Response from keycloak Rest API call : {}", responseBody); + return responseBody; } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d7f3f75..afcd8b8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,6 +18,7 @@ sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin +paymentGatewayEndPoint =https://applicant.upsmfac.org?resp=fail&transactionId spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres -- GitLab