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?