Spring Boot Stripe Payment Integration

I am developing a web application where a user can buy a course for learning. For payment, I am trying to implement Stripe payment gateway. I am a beginner in implementation of payment gateway.
I am unaware and bit confused that where should I start from. I have custom payment form where I am taking cardholder name, card number, CVV, card expiration date and a static amount to buy that course. I want to persist credit card data like card number, expiry date and customer ID into my database (MySql). I have public and secret key (test-mode). I have configured both keys in my application.yml file.

Below is my controller where I have written checkout function:

@RequestMapping(value= {WebUrl.checkout},method= {RequestMethod.GET,RequestMethod.POST})
    public ModelAndView checkout(HttpServletRequest request, HttpSession session) {
        ModelAndView modelAndView = null;
        User loginuser = (User) session.getAttribute("user");
        if(loginuser == null) {
            modelAndView = new ModelAndView("redirect:.."+WebUrl.studentlogin);
        }else {
            modelAndView = new ModelAndView(WebUrl.checkout);
            modelAndView.addObject("loginuser", loginuser);
            modelAndView.addObject("amount", 1);
            modelAndView.addObject("stripePublicKey", stripePublicKey);
            modelAndView.addObject("currency", ChargeRequest.Currency.USD);
        }
        return modelAndView;
    }

Below is my StripePayment service class:

public Charge createCharge(String userid, String token, int amount, String cardnumber, String cardexpirydate) {
    Charge chargeObj = null;
        try {
            Long uid = Long.parseLong(userid);
            User userById = userDao.findByUserid(uid);
            if(userById != null) {
                String email = userById.getEmail();
                Map<String, Object> chargeParams = new HashMap<>();
                chargeParams.put("description","Charge for "+email);
                chargeParams.put("currency",chargeRequest.getCurrency());
                chargeParams.put("amount", amount);
                chargeParams.put("source",chargeRequest.getStripeToken());
                
                chargeObj = Charge.create(chargeParams);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return chargeObj;
    }
}

Below is my API for payment:

@RequestMapping(value = ApiUrl.createCharge, method = { RequestMethod.POST, RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE })
    public ResponseEntity<?> createCharge(HttpServletRequest request, HttpSession session, @PathVariable("token") String token, @PathVariable("cardExpiryDate") String cardexpiry, @PathVariable("userid") String userid, @PathVariable("cardNumber") String cardnumber) {
        CustomResponse = ResponseFactory.getResponse(request);
        try {
            if(token == null || token == "") {
                CustomResponse.setResponse("Stripe payment token is missing. please try again later.");
                CustomResponse.setStatus(CustomStatus.Error);
                CustomResponse.setStatusCode(CustomStatus.Error_CODE);
                CustomResponse.setResponseMessage(CustomStatus.ErrorMsg);
            }
            Charge charge = stripeService.createCharge(userid, token, 100, cardnumber, cardexpiry);//1 usd or 100 cents
            Long uid = Long.parseLong(userid);
            User user = userDao.findByUserid(uid);
            UserPayment paymentByUser = new UserPayment();
            if(cardexpiry != null || cardexpiry != "") {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date date = sdf.parse(cardexpiry);
                paymentByUser.setCardExpiryDate(date);
            }
            paymentByUser.setCardNumber(cardnumber);
            paymentByUser.setUserid(user);
            paymentByUser.setAmount(chargeamount.doubleValue());
            UserPayment payment = userPaymentDao.save(paymentByUser);
            if (charge != null && payment != null) {
                CustomResponse.setResponse("Success your charge id is "+charge);
                CustomResponse.setStatus(CustomStatus.OK);
                CustomResponse.setStatusCode(CustomStatus.OK_CODE);
                CustomResponse.setResponseMessage(CustomStatus.SuccessMsg);
            }
        } catch (Exception e) {
            e.printStackTrace();
            CustomResponse.setResponse(null);
            CustomResponse.setStatus(CustomStatus.Error);
            CustomResponse.setStatusCode(CustomStatus.Error_CODE);
            CustomResponse.setResponseMessage(CustomStatus.ErrorMsg);
        }
        return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
    }

**I am confused here whether I am missing something or not. Please suggest me.**What should be major steps to follow for Stripe payment gateway implementation?
enter image description here