Subversion Repositories SmartDukaan

Rev

Rev 33689 | Rev 33715 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
32916 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
33672 ranu 3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
33581 ranu 4
import com.spice.profitmandi.common.web.util.ResponseSender;
33672 ranu 5
import com.spice.profitmandi.dao.entity.fofo.UpsellRazorpayPaymentStatus;
33595 ranu 6
import com.spice.profitmandi.dao.repository.cs.AgentRecordingRepository;
33672 ranu 7
import com.spice.profitmandi.dao.repository.fofo.UpsellRazorpayPaymentStatusRepository;
33689 ranu 8
import com.spice.profitmandi.service.integrations.RazorpayPaymentService;
33602 ranu 9
import com.spice.profitmandi.service.integrations.kommuno.KommunoService;
32929 amit.gupta 10
import com.spice.profitmandi.service.integrations.smartping.SmartPingService;
11
import com.spice.profitmandi.service.integrations.smartping.model.CallDetailModel;
32916 amit.gupta 12
import com.spice.profitmandi.web.util.MVCResponseSender;
13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
15
import org.springframework.beans.factory.annotation.Autowired;
33672 ranu 16
import org.springframework.beans.factory.annotation.Value;
17
import org.springframework.http.HttpStatus;
33581 ranu 18
import org.springframework.http.MediaType;
19
import org.springframework.http.ResponseEntity;
32916 amit.gupta 20
import org.springframework.stereotype.Controller;
21
import org.springframework.ui.Model;
33591 ranu 22
import org.springframework.web.bind.annotation.ModelAttribute;
32916 amit.gupta 23
import org.springframework.web.bind.annotation.RequestMapping;
24
import org.springframework.web.bind.annotation.RequestMethod;
25
 
26
import javax.servlet.http.HttpServletRequest;
27
import javax.transaction.Transactional;
33672 ranu 28
import java.time.LocalDateTime;
32916 amit.gupta 29
 
30
@Controller
31
@Transactional(rollbackOn = Throwable.class)
32
public class WebHookController {
33
 
34
    @Autowired
35
    MVCResponseSender mvcResponseSender;
36
 
33581 ranu 37
    @Autowired
38
    private ResponseSender<?> responseSender;
39
 
32916 amit.gupta 40
    private static final Logger LOGGER = LogManager.getLogger(WebHookController.class);
41
 
32919 amit.gupta 42
    @Autowired
32929 amit.gupta 43
    SmartPingService smartPingService;
32916 amit.gupta 44
 
33595 ranu 45
    @Autowired
33602 ranu 46
    KommunoService kommunoService;
47
 
48
    @Autowired
33595 ranu 49
    AgentRecordingRepository agentRecordingRepository;
50
 
33590 ranu 51
    @RequestMapping(value = "/click2call/report-handler", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
33591 ranu 52
    public ResponseEntity<?> click2callReportHandlerPost(HttpServletRequest request, Model model, @ModelAttribute CallDetailModel callDetail) throws Exception {
33581 ranu 53
        LOGGER.info("first event call detail {}", callDetail);
33602 ranu 54
        kommunoService.updateAgentRecording(callDetail);
33581 ranu 55
 
56
        return responseSender.ok(true);
32917 amit.gupta 57
    }
33581 ranu 58
 
59
 
33590 ranu 60
    @RequestMapping(value = "/click2call/report-handler/recording-url", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
33591 ranu 61
    public ResponseEntity<?> click2callReportHandlerUpdateRecordingUrlPost(HttpServletRequest request, Model model, @ModelAttribute CallDetailModel callDetail) throws Exception {
33581 ranu 62
        LOGGER.info("update call detail {}", callDetail);
33602 ranu 63
        kommunoService.updateAgentRecordingUrl(callDetail);
33581 ranu 64
        return responseSender.ok(true);
65
    }
33672 ranu 66
 
67
 
68
    @Value("${razorpay.account.keySecret}")
69
    private String razorpaySecret;
70
    @Autowired
71
    private UpsellRazorpayPaymentStatusRepository upsellRazorpayPaymentStatusRepository;
72
 
33684 ranu 73
    @RequestMapping(value = "/upsellPayment/callback", method = RequestMethod.GET)
74
    public ResponseEntity<String> handleCallback(HttpServletRequest request) {
33672 ranu 75
        try {
33684 ranu 76
 
33688 ranu 77
            // Retrieve the Razorpay parameters from the query string
33684 ranu 78
            String paymentId = request.getParameter("razorpay_payment_id");
33688 ranu 79
            String razorpaySignature = request.getParameter("razorpay_signature");
33693 ranu 80
            String paymentLinkId = request.getParameter("razorpay_payment_link_id");
81
            String paymentLinkStatus = request.getParameter("payment_link_status");
82
            String paymentLinkReferenceId = request.getParameter("payment_link_reference_id");
83
 
33684 ranu 84
            String orderId = request.getParameter("orderId");
85
            String insuranceAmount = request.getParameter("insuranceAmount");
86
 
33688 ranu 87
            // Check for required parameters
88
            if (paymentId == null || razorpaySignature == null || orderId == null || insuranceAmount == null) {
33684 ranu 89
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Missing required parameters");
90
            }
91
 
33689 ranu 92
            String generated_signature = RazorpayPaymentService
33693 ranu 93
                    .calculateRFC2104HMAC(paymentLinkId + "|" + paymentId, razorpaySecret);
94
            LOGGER.info("generated_signature {}", generated_signature);
95
            if (generated_signature.equals(razorpaySignature)) {
96
                // Handle the payment status (you may need to add more logic depending on the status)
97
                updatePaymentStatus(paymentId, "captured", orderId, insuranceAmount);
33684 ranu 98
 
33693 ranu 99
                return ResponseEntity.ok("Payment successful for ID: " + paymentId);
100
 
101
            } else {
33672 ranu 102
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid signature");
103
            }
104
 
33689 ranu 105
 
33672 ranu 106
        } catch (Exception e) {
107
            e.printStackTrace();
108
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error processing callback");
109
        }
110
    }
111
 
33684 ranu 112
 
33672 ranu 113
    private void updatePaymentStatus(String paymentId, String status, String orderId, String amount) throws ProfitMandiBusinessException {
114
        UpsellRazorpayPaymentStatus upsellRazorpayPaymentStatus = new UpsellRazorpayPaymentStatus();
115
        upsellRazorpayPaymentStatus.setCreatedTimestamp(LocalDateTime.now());
116
        upsellRazorpayPaymentStatus.setOrderId(Integer.parseInt(orderId));
117
        upsellRazorpayPaymentStatus.setPaymentId(paymentId);
118
        upsellRazorpayPaymentStatus.setPaymentStatus(status);
33682 ranu 119
        upsellRazorpayPaymentStatus.setPayment(Float.parseFloat(amount));
33672 ranu 120
        upsellRazorpayPaymentStatusRepository.persist(upsellRazorpayPaymentStatus);
121
    }
32916 amit.gupta 122
}