Springboot/Api

Springboot 카카오페이 연동(1) 결제창 호출

디비드킴 2022. 3. 14. 15:31

카카오페이를 연동해보자
흐름
결제창 호출-> 검증-> 판별-> 실패 시 환불

사전 준비
카카오 개발자 센터가서
1. 간단히 어플 등록-> 카카오 로그인 활성화
2. 플랫폼 등록

웹사이트= web으로

3. 리다이렉트 url등록

서버 주소만 등록하면 된다

1. 카카오페이에게 요청
https://developers.kakao.com/docs/latest/ko/kakaopay/single-payment#prepare

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

/v1/payment/ready에게 POST
헤더에 Authorization: KakaoAK ${APP_ADMIN_KEY}담아서
application/x-www-form-urlencoded;charset=utf-8 형식으로

동그라미 쳐져 있는 필수 값들을 넣어서 주면 된다
(2022/03/14일 기준이다)

2. 통신파트 준비

난 제네릭으로 만들었지만 제네릭을 모른다면
<T>를 지우고
T body->MultiValueMap<String,Object> body로 해주고
HttpEntity<T>->HttpEntity<MultiValueMap<String,Object>> 해주면된다

3.body and header만들기

header에 타입/인증을 넣어준다

body에 요구조건대로 넣어준다
cid=TC0ONETIME
테스트시 고정이다 (2022/03/14기준)
partner_order_id=가맹점에서 만는 임의난수
partner_user_id=구매유저 고유값 or 이메일
approval_url=처리성공시 리다이렉트 주소
그외 생략
cid를제외하고
임으로 그냥 막 넣어서 해보면 감이 올 것이다

테스트
2022-03-14 15:22:32.930 INFO 29716 --- [nio-8080-exec-4] c.k.p.apis.kakao.kakaoPayService : 카카오페이 통신결과: {"next_redirect_pc_url":"https:\/\/online-pay.kakao.com\/mockup\/v1\/0bd7a660d746f716cb1b5bf435c22fc46d7863360bfb0eb1da94e7d7682ba72c\/info","next_redirect_app_url":"https:\/\/online-pay.kakao.com\/mockup\/v1\/0bd7a660d746f716cb1b5bf435c22fc46d7863360bfb0eb1da94e7d7682ba72c\/aInfo","next_redirect_mobile_url":"https:\/\/online-pay.kakao.com\/mockup\/v1\/0bd7a660d746f716cb1b5bf435c22fc46d7863360bfb0eb1da94e7d7682ba72c\/mInfo","ios_app_scheme":"kakaotalk:\/\/kakaopay\/pg?url=https:\/\/online-pay.kakao.com\/pay\/mockup\/0bd7a660d746f716cb1b5bf435c22fc46d7863360bfb0eb1da94e7d7682ba72c","created_at":"2022-03-14T15:22:32","android_app_scheme":"kakaotalk:\/\/kakaopay\/pg?url=https:\/\/online-pay.kakao.com\/pay\/mockup\/0bd7a660d746f716cb1b5bf435c22fc46d7863360bfb0eb1da94e7d7682ba72c","tms_result":false,"tid":"T22edf28729930ed1b59"}


성공했다면 이런 내용을 받는데
본인 상태에 맞추어서 url을 리턴해주면된다
("next_redirect_pc_url","next_redirect_app_url","next_redirect_mobile_url")
그리고 프론트에서 열면

결제창이 열린다

그리고 서버는 리턴전에
카카오페이에서준 고유 번호=tid
가맹점에서 발생한 고유번호=partner_order_id를 가지고
세션이든/db든/redis든 넣어 두고
결제후 검증에 사용하면된다
난 redis에 키값 partner_order_id를 사용해 결제정보들을 넣어두고
세션에 partner_order_id/tid를 넣고
검증시 redis에서 꺼내어 검증한다
자세한건 검증 로직에서 보자