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 8898b3197407212f10cd10c8383779e0d74dcac7..4f05389452920278ef76dd0c9f6b4baf498cb85d 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 73f1dcfba40a89588530af6c7f21685419d66649..59bec1ed2195a9254d85ea16854686f76dc257f6 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 482eea83344fa36d5cad11deeef5a81030cbcbaa..56b68dfb8ff8ec5ae5b275d5e203318f662219e0 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 d149ec1049a990207af47e7de71bd649829533b1..0152b04cca42de8b6ff92a66c756d08ee7b4731e 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 63c56ca72883fa8ee2d2463329d63ea477aacd8f..db606fbc124e502f9757cb5f7a7c1b8730a4838d 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 d7f3f759f5e6195cd495a0bb4bbe5c8c57c1a0c6..afcd8b8e2ec0783415727e5938c5031a8937e61a 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