I use spring, spring boot and spring-rest controller and i begin with error.
My controller
@RequestMapping(value = "/members/{memberId}/creditcard", method = RequestMethod.POST)
public void saveCreditCard(@PathVariable("memberId") Long memberId, @RequestBody CreditCardInfoDto creditCardInfo) {
try {
paymentService.saveCreditCard(creditCardInfo);
} catch(Exception e) {}
}
In my service,
@Override
public Long saveCreditCard(CreditCardInfoDto creditCardInfo) throws Exception {
Member member = null;
if (creditCardInfo.getMemberId() != null) {
member = memberRepository.findOne(creditCardInfo.getMemberId());
}
List < PaymentGatewayConfig > paymentGateways = paymentGatewayConfigRepository.findAll();
if (paymentGateways != null && !paymentGateways.isEmpty()) {
PaymentGatewayConfig paymentGateway = paymentGateways.get(0);
String paymentGatewayKey = null;
if (member != null) {
paymentGatewayKey = member.getPaymentGatewayKey();
}
ResolveData resdata = null;
ResolverReceipt resreceipt = null;
try {
if (paymentGatewayKey == null) {
ResAddCC resAddCC = new ResAddCC(creditCardInfo.getCreditCard(), creditCardInfo.getDateExpiration(), "7");
//resAddCC.setAvsInfo(avsCheck);
ResolverHttpsPostRequest mpgReq = new ResolverHttpsPostRequest(paymentGateway.getHost(), paymentGateway.getStoreId(), paymentGateway.getApiToken(), resAddCC);
resreceipt = mpgReq.getResolverReceipt();
resdata = resreceipt.getResolveData();
member.setPaymentGatewayKey(resreceipt.getDataKey());
} else {
ResUpdateCC resUpdateCC = new ResUpdateCC(member.getPaymentGatewayKey());
resUpdateCC.setPan(creditCardInfo.getCreditCard());
resUpdateCC.setExpdate(creditCardInfo.getDateExpiration());
ResolverHttpsPostRequest mpgReq = new ResolverHttpsPostRequest(paymentGateway.getHost(), paymentGateway.getStoreId(), paymentGateway.getApiToken(), resUpdateCC);
resreceipt = mpgReq.getResolverReceipt();
resdata = resreceipt.getResolveData();
}
} catch (Exception e) {
log.error("saveCreditCard: " + member.getMemberId() + "ResolverHttpsPostRequest error");
}
if (resdata != null) {
//success
if (Boolean.valueOf(resreceipt.getComplete()) && !Boolean.valueOf(resreceipt.getTimedOut())) {
member.setPaymentGatewayKey(resreceipt.getDataKey());
memberRepository.save(member);
Operation operation = createOperation(resreceipt);
operationRepository.save(operation);
} else {
Operation operation = createOperation(resreceipt);
operationRepository.save(operation);
//payment refused
log.error("saveCreditCard: " + member.getMemberId() + " payment refused error code: " + resreceipt.getResponseCode());
throw new Exception("Payment refused");
}
}
}
return 1 l;
}
So in the service, error can happen when a call is done to ResolverHttpsPostRequest
I thow an exception if the payment it's refused.
It is the good way to manage error?
how to send these error to the client (web)?