[SpringBoot] 카카오페이 API SpringBoot에 적용하기 (1 - 결제 준비하기)
- 카카오페이 API 사전 설명
카카오페이 API는 다른 API와 달리 서버에서 통신을 해야 한다.
그 이유는 cors 정책 때문인데, 카카오페이는 보안과 관련하여 cors를 닫아놓아서 서버에서 우회하여 요청을 보내야 한다.
1 단계 : 클라이언트가 백엔드 서버에게 결제 요청
2 단계 : 백엔드 서버 단에서 결제 요청 정보를 카카오페이 서버에 전달
3 단계 : 카카오페이 서버에서 사용자 정보를 받아 사용자 인증
4 단계 : 백엔드 서버 단에서 사용자 인증 후 결제 승인 정보를 카카오페이 서버에 전달
5 단계 : 카카오페이 서버에서 최종 결제 처리 완료
6 단계 : 서버가 카카오페이 서버로부터 받은 응답을 클라이언트에게 전달
카카오페이 API 시작하기
1 단계 : 카카오페이 api 페이지 접속
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
사이트에 접속 후 로그인을 한다.
2 단계 : 내 어플리케이션에 들어간 후 어플리케이션 추가하기 선택
앱 이름과 사업자 명을 작성하고 어플리케이션을 추가한다.
카카오페이 api를 실제 사업장에서 사용하는 것이 아닌 테스트 용도라면, 아무 이름이나 적어도 되며 이미지는 상관없다.
3 단계 : 왼쪽 목록에 플랫폼 선택 후 url/도메인 작성
web에서만 사용할 것이라면, web만 등록하는 것이 가능하며, 모바일에서도 사용할 시 모바일 플랫폼 등록을 하면 된다.
web 사이트 도메인은 결제 요청, 승인, 취소의 화면을 띄울 도메인을 작성하는데, 대부분 localhost:3000으로 하지만,
나는 배포를 했기 때문에 배포 당시 url을 작성했다.
카카오페이 API 사용하기 (단건결제 - 결제 준비하기)
1 단계 : 결제 준비하기기본 정보 확인하기
api에 나와있는 것처럼 서버단에서 post방식으로 url 헤더에 Authorization과 Content-Type을 보내고,
body에는 본문에 요구되는 정보를 보내면 된다. body에 들어갈 정보는 필수에 표시된 것만 보내도 된다.
2 단계 : 응답 클래스 작성하기
@ToString
@Getter @Setter
public class KakaoReadyResponse {
private String tid; //결제 고유번호
private String next_redirect_pc_url; //클라이언트가 웹일 경우 결제 페이지 url
private String created_at; //결제 준비 요청 시간
}
카카오페이 api에 나와있는 정보들 중 각자 필요한 정보만으로 클래를 다르게 구성해도 상관 없다.
3단계 : 카카오페이 api 요청 헤더 준비하기
@Service
@Transactional
@RequiredArgsConstructor
public class KakaoPayService {
static final String cid = "TC0ONETIME"; //TEST 가맹점 코드
static final String adminKey = "자신의 adminkey 입력"; //admin 코드
//카카오 요구 헤더값
private HttpHeaders getHeaders() {
HttpHeaders httpHeaders = new HttpHeaders();
String auth = "KakaoAK " + adminKey;
String contentType = "application/x-www-form-urlencoded;charset=utf-8";
httpHeaders.add("Authorization", auth);
httpHeaders.add("Content-type", contentType);
return httpHeaders;
}
}
1. cid는 가맹점 코드를 의미하며, 만약 사업자 등록이 되지 않은 사이트에 카카오페이 시스템을 적용하고 싶다면, "TC0ONETIME"로 카카오페이에서 제공하는 테스트 가맹점 코드로 카카오페이 시스템을 구현할 수 있다.
2. adminKey는 권한 값으로 , 내 어플리케이션 > 개요 > 앱정보 > 앱 키를 선택하면 AdminKey를 확인할 수 있다.3. 카카오페이에서 요구하는 값을 httpHeader에 Authorization와 Content-type을 담는다.
3 단계 : 결제 준비하기 Service 작성
@Service
@Transactional
@RequiredArgsConstructor
public class KakaoPayService {
static final String cid = "TC0ONETIME"; //TEST 가맹점 코드
static final String adminKey = "자신의 adminkey 입력"; //admin 코드
private KakaoReadyResponse readyResponse; //결제 준비하기 응답 클래스
//카카오페이 결제 준비 요청
public KakaoReadyResponse kakaoPayReady(KaKaoReadyReqDto kaKaoReadyReqDto) {
MultiValueMap<String, String> parameterValue = new LinkedMultiValueMap<>();
parameterValue.add("cid", cid);
parameterValue.add("partner_order_id", "가맹점 주문번호");
parameterValue.add("partner_user_id", "가맹점 회원 id");
parameterValue.add("item_name", "상품 이름");
parameterValue.add("quantity", "상품 수량");
parameterValue.add("total_amount", "상품 총액");
parameterValue.add("tax_free_amount", "상품 비과세 금액");
parameterValue.add("approval_url", "결제 성공시 이동할 url");
parameterValue.add("cancel_url", "결제 취소 시 이동할 url");
parameterValue.add("fail_url", "결제 실패시 이동할 url");
//파라미터, 헤더
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(parameterValue, this.getHeaders());
//카카오에게 보낼 url
RestTemplate restTemplate = new RestTemplate();
//api 요청
readyResponse = restTemplate.postForObject(
"https://kapi.kakao.com/v1/payment/ready", //url
requestEntity, //본문
KakaoReadyResponse.class //응답 클래스
);
return readyResponse;
}
}
1. MultiValueMap 타입인 parameterValue를 생성 후 body에 들어갈 값을 채운다.
2. requestEntity에 header와 body를 넣은 후
3. restTemplate를 활용하여 카카오페이 서버에 요청을 보낸다.
4. readyResponse로 응답을 받은 후 반환한다.
4 단계 : 결제 준비하기 Controller 작성
@Controller
@RequestMapping("/payment")
@RequiredArgsConstructor
public class KakaoPayController {
private final KakaoPayService kakaoPayService;
@PostMapping("/ready") //결제준비요청
public ResponseEntity<?> readyToKakaoPay(@RequestBody KaKaoReadyReqDto kaKaoReadyReqDto){
KakaoReadyResponse readyResponse = kakaoPayService.kakaoPayReady(kaKaoReadyReqDto);
return new ResponseEntity<>(readyResponse, HttpStatus.OK);
}
}
(/≧▽≦)/
카카오페이 api 사용하기 2탄 - 결제 승인하기, 결제 취소하기
[SpringBoot] 카카오페이 API SpringBoot에 적용하기 (2 - 결제 승인하기, 취소하기)
- 카카오페이 API 사용하기 (단건결제 - 결제 승인 요청하기) 1 단계 : 결제 승인하기 기본 정보 확인하기 결제 준비하기 요청과 마찬가지이며, post방식으로 url 헤더에 Authorization과 Content-Type을 보
zhddkfxks1-coding.tistory.com