์ฅ๋ฐ๊ตฌ๋ crud ์์ ํ ๊ฒ์ ์์ ๋ฐ ํ ์คํธ๋ฅผ ์ด๋ฒ ์ฃผ์ ๋๋ด๊ณ ๋์, ๋ค๋ฆ๊ฒ ๊ฒฐ์ API๋ฅผ ์ค๊ณํ๊ธฐ ์์ํ๋ค. ์นด์นด์ค ํ์ด API๋ฅผ ์ฌ์ฉํด์ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ, ์๊ฐ๋งํผ ์ฝ์ง ์์๋ค. ์ด๋์ ๋ณธ ๊ฑด๋ฐ ๋ง๋ค์ด์ง API๋ฅผ ๊ฐ์ ธ์์ ์ฐ๋ ๊ฒ๋ ๋ฅ๋ ฅ์ด๋ผ๊ณ ..ใ ใ
๊ทธ๋๋ ํด์ผ์ง ์ด์ฉ๊ฒ ๋.
์นด์นด์ค ํ์ด API ๋ฌธ์๋ฅผ ๋ณด๋ ๋๊ฒ ๋ค์ํ API๋ฅผ ์๊ฐํด ๋์๋ค. ๊ฒฐ์ ์์ฒญ๋ ๋ณด์์ ์๋ฒ๋ฅผ ํตํด ์์ฒญ์ ํด์ผ ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ฒจ ์ฃผ๊ณ ๋ฐ๋ ํ๋ผ๋ฏธํฐ๋ ๊ต์ฅํ ๋ง๋ค. ์ค๊ฑฐ๋๋ฅผ ์ํด ๋ง๋ค์ด์ง API๋ผ ํ์คํ ๋ค๋ฅด๊ธด ํ๋ค.
๊ฐ์ธ์ ์ธ ํ๋ก์ ํธ ์์ค์์ ํ ์คํธ ๊ฒฐ์ ๋ฅผ ์ํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ฆฌ๋ ์์ ์ ์ฐธ ๊ณจ์น ์ํ ์ผ์ธ ๊ฒ ๊ฐ๋ค.
์ผ๋จ ๊ฒฐ์ ์์ฒญ ๋ถํฐ ์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๋ด๊ฐ ์ค๊ณํ ํ๋ก์ ํธ์์๋ ํฌ๊ฒ ๋ณด๋ฉด ๋ ๊ฐ์ง ์ข ๋ฅ์ ๊ฒฐ์ ๊ฐ ์๋๋ฐ ์ฒซ ์งธ๋ ๋จ๊ฑด ๊ฒฐ์ ์ด๊ณ , ๋ ๋ฒ์งธ๋ ์ฅ๋ฐ๊ตฌ๋ ์ํ ๊ฒฐ์ ์ด๋ค.
๊ทธ๋ ๊ฒ kakao api๋ฅผ ์ด์ฉํด์ ๊ฒฐ์ ์์ฒญ์ ๊ตฌํํ ๊ณผ์ ์ ๋์ดํด๋ณด๊ฒ ๋ค.
์นด์นด์ค ํ์ด API ๊ณต์ ๋ฌธ์
https://developers.kakao.com/docs/latest/ko/kakaopay/common
Kakao Developers
์นด์นด์ค API๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด๋ณด์ธ์. ์นด์นด์ค ๋ก๊ทธ์ธ, ๋ฉ์์ง ๋ณด๋ด๊ธฐ, ์น๊ตฌ API, ์ธ๊ณต์ง๋ฅ API ๋ฑ์ ์ ๊ณตํฉ๋๋ค.
developers.kakao.com
๋ณด๋ค ๋ณด๋ฉด ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ์๋ค. ํ์ํ ๊ฑธ ๊ณจ๋ผ ์ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ถ์ํ๋ฉด์ ์ด API๋ฅผ ๋ง๋ ์ฌ๋๋ค์ด ์ ๋ง ๋๋จํ๋ค๊ณ ๋๊ผ๋ค.
DB ์ค๊ณ ์ฌ๋ถ
๊ธฐ์กด์๋ DB ์ค๊ณ๋ฅผ ํ๋ ค๊ณ ํ์๋ค.
์ฃผ๋ฌธ, ๊ฒฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ์ฌ ์ด์ฉํ๋ ค ํ์ผ๋, ์นด์นด์ค ํ์ด์์ ๊ฒฐ์ ๊ฑด์ ๋ํ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๊ฒ ํด ์ค๋ค.
๊ทธ๋์ DB ์ค๊ณ๋ฅผ ๋ฐ๋ก ํ์ง ์์๋ค.
(๊ทผ๋ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ์ฆ๊ฐ์ ์ธ ๊ฒฐ์ ๊ฑด์ ๋ํ ์ ๋ณด๋ง ์ผํ์ฑ์ผ๋ก ์ ๊ณต๋๋ ๊ฒ์ด๋ค.. ์๋ฐ ๋ค๋ ์์ ์ฃผ๋ฌธ ์กฐํ๊น์ง ๋ง๋ค์ด์ผ๊ฒ ๋ค..!)
๋จ๊ฑด ๊ฒฐ์
์ ๋ชฉ๊ณผ ๊ทธ๋๋ก ๋จ์ผ ์ํ ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ ์์ฒญ API๋ฅผ ์ค๊ณํ๋ค.
์นด์นด์ค ํ์ด rest Api๋ฅผ ํตํด ๊ฒฐ์ ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์์ฒด์ ์ผ๋ก ๋๊ฒจ์ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ api๋ฅผ ์ค๊ณํด์ผ ํ๋ค.
๋จ๊ฑด ๊ฒฐ์ ๊ฑด์ธ๋ฐ๋ ๋๊ฒจ์ค ๋ฐ์ดํฐ๊ฐ ์ฐธ ๋ง๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ณด๋ ๋๋ถ๋ถ ์ฌ๋๋ค์ ํ๋ฐํธ๋ฅผ ๊ฐ์ด ํ๋ฉฐ ajax๋ ํ๋ก ํธ ์์ง์ ์ด์ฉํด ์ฝ๊ฒ ๋๊ฒจ์ฃผ๋๋ฐ ๋๋ rest api๋ง ์ค๊ณํ๋ค ๋ณด๋ postman์ผ๋ก ์ง์ json์ ๋ง๋ค์ด์ ๋๊ฒจ์ฃผ๋ ๊ฒ ์ฐธ ๊ณจ์น ์ํ ์ผ์ด์๋ค.
๊ฒฐ์ ๋ก์ง (๋ด๊ฐ ์๊ฐํ rest api ์ค๊ณ ์ ํ๋ฆ๋)
ํด๋ผ์ด์ธํธ๋ฅผ ์ ์ธํ ํ๋ฆ๋๋ฅผ ์๊ฐํ๋ค.
1. ๊ฒฐ์ ์ค๋น
ํด๋ผ์ด์ธํธ (postman์ผ๋ก json ์์ฒญ) => local host server(header, body) => kakao pay server
2. ์นด์นด์ค ํ์ด ์๋ฒ์ ์๋ต
kakao pay server (์๋ต ๊ฐ์ฒด) => localhost server (๊ฒฐ์ ์์ฒญ url) => ํด๋ผ์ด์ธํธ์๊ฒ url ๋ฐ์ดํฐ๋ก ์๋ต (postman)
3. ํด๋ผ์ด์ธํธ(postman or chrome ๋ธ๋ผ์ฐ์ )๊ฐ ๊ฒฐ์ ์์ฒญ
ํด๋ผ์ด์ธํธ url ์์ฒญ => kakao pay server ์๋ต(qr ์ฝ๋ or ์ ํ๋ฒํธ)
4. ๊ฒฐ์ ์ฒ๋ฆฌ
qr ์ฝ๋๋ก ํธ๋๋ก ์ผ๋ก ํ ์คํธ ๊ฒฐ์ ์ฒ๋ฆฌ
5. ๊ฒฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ต
kakao pay server (๊ฒฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ง url๋ก ๋ฆฌ๋ค์ด๋ ํธ ์๋ต) : ์๋ ์์ฒญ ์ด๋ฏ๋ก ์ด ์ฃผ์๋ฅผ ๊ฐ์ ธ๋ค๊ฐ postman์์ ๋ค์ ์์ฒญํด์ผ ํ๋ค.
6. url์ postman์ผ๋ก ์์ฒญ
ํด๋ผ์ด์ธํธ (postman) => localhost => kakao pay server
7. ๊ฒฐ์ ์ ๋ณด๋ฅผ ์๋ต
kakao pay server (์๋ต ๊ฐ์ฒด) => localhost => ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ ์๋ต
์นด์นด์ค ํ์ด ์๋ฒ์ Request ์์ฒญ
๋๊ฒจ์ค ๋ฐ์ดํฐ๋ ์น์ ํ ๋ช ์ํด ๋์๋ค. ๊ทธ๊ฑฐ์ ๋ง์ถฐ์ ํค๋์ ๋ฐ๋๋ฅผ ์ ์ ํ ๋ฃ์ด post ๋ฐฉ์์ผ๋ก ์๋ฒ์ ์์ฒญํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
public String kakaoPayReady(OrderReadyDTO orderReadyDTO, UserDTO user) {
/* ์๋ฒ๋ก ์์ฒญํ ํค๋*/
HttpHeaders headers = new HttpHeaders();
setHeaders(headers);
order_id = user.getUserId() + orderReadyDTO.getItem_name();
userId = user.getUserId();
itemName = orderReadyDTO.getItem_name();
totalAmount = orderReadyDTO.getTotal_Amount();
/* ์๋ฒ๋ก ์์ฒญํ body */
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
setParams(params);
params.add("partner_order_id", order_id);
params.add("partner_user_id", userId);
params.add("item_name", itemName);
params.add("quantity", String.valueOf(orderReadyDTO.getQuantity()));
params.add("total_amount", String.valueOf(totalAmount));
params.add("tax_free_amount", String.valueOf(TAX_FREE_AMOUNT));
return getUrl(headers, params);
}
private String getUrl(HttpHeaders headers, MultiValueMap<String, String> params) {
HttpEntity<MultiValueMap<String, String>> body = new HttpEntity<>(params, headers);
try {
/* ์๋ฒ ์์ฒญ ํ ์๋ต ๊ฐ์ฒด ๋ฐ๊ธฐ */
kakaoPayReadyVO = restTemplate.postForObject(new URI(HOST + KAKAO_PAY_READY),
body, KakaoPayReadyVO.class);
return kakaoPayReadyVO != null ? kakaoPayReadyVO.getNext_redirect_pc_url() : null;
} catch (RestClientException e) {
log.error(e.getMessage());
} catch (URISyntaxException e) {
log.error(e.getMessage());
}
return null;
}
๋ฉ์๋๊ฐ ์ค๋ณต์ด ๋ง์ด ๋์ด์ ์ถ์ฝ์ ํ๋๋ฐ ์ด๋ฐ ์์ผ๋ก ํค๋์ ๋ฐ๋ ๊ฐ์ฒด๋ฅผ ๋ด์ uri๋ฅผ ์์ฑ ํ restTemplate์ postForObject ๋ฉ์๋๋ฅผ ํตํด ์นด์นด์ค ํ์ด ์๋ฒ๋ก ์์ฒญ์ ํ๋ฉด
=> (๋ฐ์๊น์ง ์์ฒญ ๋ง๋ค..) ์ด๋ฐ ์์ผ๋ก ๊ฐ์ ๊ฐ์ฒด๋ก ๋๊ฒจ์ค๋ค.
public class KakaoPayReadyVO {
private String tid, next_redirect_pc_url;
private Date created_at;
@ConstructorProperties({"tid","next_redirect_pc_url","created_at"})
public KakaoPayReadyVO(String tid, String next_redirect_pc_url, Date created_at) {
this.tid = tid;
this.next_redirect_pc_url = next_redirect_pc_url;
this.created_at = created_at;
}
=> ๊ฒฐ์ ์ค๋น ๋๊ฒจ๋ฐ์ ๊ฐ์ฒด
์ดํ ์๋ฐ ๋ค๋ ์์ ์ฐ์
๋ฆฌํฉํ ๋ง!
๊ฒฐ์ API ๋ฆฌํฉํ ๋ง - [1] (feat. ์ ๋ต ํจํด)
๊ฒฐ์ API๋ฅผ ๋ฆฌํฉํ ๋ง ์์ํ๋ฉฐ ์ธ๋ถ API๋ฅผ ์ฐ๋ ๋ถ๋ถ์ ๋ํด์ ์๊ฐํด๋ดค๋ค. ๊ธฐ์กด์๋ ์นด์นด์คํ์ด๋ฅผ ์ด์ฉํ์๊ณ , ์ง๊ธ๋ ์นด์นด์คํ์ด๋ฅผ ์ด์ฉํ ๊ฒ์ด์ง๋ง, ์ถ๊ฐ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒฐ์ API๋ฅผ ์ฐ๋ํ ์ ์
sweeeetgoguma.tistory.com
'๐ Spring Framework > Spring Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022.06.02 ใDB ๋์์ฑ ๋ฌธ์ ใ (0) | 2022.06.02 |
---|---|
2022.06.01 ใ๊ฒฐ์ API - Ver.2ใ (2) | 2022.06.01 |
2022.05.28 ใ์ฟ ํค ์์ ใ (0) | 2022.05.28 |
2022.05.26 ใํธ๋ํฝ์ด ๋ชฐ๋ ธ์ ๊ฒฝ์ฐใ (0) | 2022.05.26 |
2022.05.25 ใEmail ์ธ์ฆใ (0) | 2022.05.25 |