๐Ÿ“Œ PortOne ๊ฒฐ์ œ ์‹œ์Šคํ…œ - ๊ฒฐ์ œ ์ทจ์†Œ ๋ฐ ๋ณธ์ธ์ธ์ฆ ํ™•์ธ API ๊ตฌํ˜„ํ•˜๊ธฐ

My Pale Blue Dotยท2025๋…„ 5์›” 15์ผ
0

SPRING BOOT

๋ชฉ๋ก ๋ณด๊ธฐ
33/40
post-thumbnail

๐Ÿ“… 2025-05-15

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

โœ… 1. ๊ฒฐ์ œ ์ทจ์†Œ API ๊ฐœ๋…

PortOne(์•„์ž„ํฌํŠธ)์˜ ๊ฒฐ์ œ ์ทจ์†Œ API๋Š” ์ด๋ฏธ ์Šน์ธ๋œ ๊ฒฐ์ œ์— ๋Œ€ํ•ด ํ™˜๋ถˆ์„ ์š”์ฒญํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

imp_uid ๋˜๋Š” merchant_uid ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๊ฒฐ์ œ๋ฅผ ์‹๋ณ„ํ•ด ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฆ‰์‹œ ์ทจ์†Œ ๊ฐ€๋Šฅ: ์นด๋“œ๊ฒฐ์ œ, ํœด๋Œ€ํฐ์†Œ์•ก๊ฒฐ์ œ
  • ๋ณ„๋„ ๊ณ„์ขŒ ์ž…๋ ฅ ํ•„์š”: ๊ฐ€์ƒ๊ณ„์ขŒ, ์ต์›” ํœด๋Œ€ํฐ ๊ฒฐ์ œ

โœ… 2. ๊ฒฐ์ œ ์ทจ์†Œ API ์š”์ฒญ ์ฝ”๋“œ (Spring Boot)

@GetMapping("/payments/cancel")
@ResponseBody
public void payments_cancel(){
    log.info("GET/portOne/payment/cancel...");

    String url = "<https://api.iamport.kr/payments/cancel>";

    HttpHeaders header = new HttpHeaders();
    header.add("Content-Type", "application/json");
    header.add("Authorization", "Bearer " + this.portOneTokenResponse.getResponse().getAccess_token());

    JSONObject params = new JSONObject();
    params.put("imp_uid", "imp_************************"); // ๊ฒฐ์ œ ๊ณ ์œ ๋ฒˆํ˜ธ (๋งˆ์Šคํ‚น ์ฒ˜๋ฆฌ)
    params.put("merchant_uid", "merchant_************"); // ์ƒ์  ์ฃผ๋ฌธ๋ฒˆํ˜ธ (๋งˆ์Šคํ‚น ์ฒ˜๋ฆฌ)

    HttpEntity<String> entity = new HttpEntity<>(params.toString(), header);

    RestTemplate rt = new RestTemplate();
    ResponseEntity<String> response = rt.exchange(url, HttpMethod.POST, entity, String.class);

    System.out.println(response.getBody());
}

โœ… 3. ๋ณธ์ธ์ธ์ฆ ๊ฒฐ๊ณผ ์กฐํšŒ API

@GetMapping("/certifications/{imp_uid}")
@ResponseBody
public void certifications(@PathVariable("imp_uid") String imp_uid){
    log.info("GET/portOne/certifications/" + imp_uid);

    String url = "<https://api.iamport.kr/certifications/>" + imp_uid;

    HttpHeaders header = new HttpHeaders();
    header.add("Authorization", "Bearer " + this.portOneTokenResponse.getResponse().getAccess_token());
    header.add("Content-Type", "application/json");

    HttpEntity<?> entity = new HttpEntity<>(header);

    RestTemplate rt = new RestTemplate();
    ResponseEntity<String> response = rt.exchange(url, HttpMethod.GET, entity, String.class);

    System.out.println(response);
}

โœ… 4. ๋ณธ์ธ์ธ์ฆ ์กฐํšŒ ์‹ค์Šต ๋ฐฉ๋ฒ•

๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค:

<http://localhost:8090/portOne/certifications/imp_************************>
  • ์œ„ URL์˜ imp_uid๋Š” ์ธ์ฆ ์™„๋ฃŒ ํ›„ ์•„์ž„ํฌํŠธ์—์„œ ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๊ต์ฒด
  • ๋ณธ์ธ์ธ์ฆ์€ ์‚ฌ์ „ ์ ˆ์ฐจ(ํœด๋Œ€ํฐ ์ธ์ฆ ๋“ฑ)๋ฅผ ํ†ตํ•ด ๋ฐœ๊ธ‰๋œ imp_uid๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค

๐Ÿ”ฅ ์ •๋ฆฌ

๊ตฌ๋ถ„์„ค๋ช…
API ์ข…๋ฅ˜๊ฒฐ์ œ ์ทจ์†Œ, ๋ณธ์ธ์ธ์ฆ ์กฐํšŒ
์š”์ฒญ ๋ฐฉ์‹POST (๊ฒฐ์ œ ์ทจ์†Œ), GET (๋ณธ์ธ์ธ์ฆ)
์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐimp_uid ๋˜๋Š” merchant_uid
ํ—ค๋” ์„ค์ •Content-Type: application/json, Authorization: Bearer access_token
์‹ค์Šต ํŒimp_uid๋Š” ์ธ์ฆ ์™„๋ฃŒ ํ›„ ์ฝœ๋ฐฑ ๋˜๋Š” ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌ๋จ

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


๋А๋‚€ ์ 

๊ฒฐ์ œ ์‹œ์Šคํ…œ์—์„œ ํ™˜๋ถˆ ์ฒ˜๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์ง๊ฒฐ๋˜๋ฉฐ, ๊ธฐ์ˆ ์ ์œผ๋กœ๋„ ๋ฏผ๊ฐํ•œ ์˜์—ญ์ด๋‹ค.

์ด๋ฒˆ ์‹ค์Šต์„ ํ†ตํ•ด access_token ๋ฐœ๊ธ‰ โ†’ API ์ธ์ฆ โ†’ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์„ฑ โ†’ ์‘๋‹ต ํ™•์ธ๊นŒ์ง€ ์ „์ฒด ํ๋ฆ„์„ ์†์— ์ตํž ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํŠนํžˆ ๋ณธ์ธ์ธ์ฆ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ํ–ฅํ›„ ์‚ฌ์šฉ์ž ๊ณ„์ • ๋ณดํ˜ธ๋‚˜ ๊ฐ€์ž… ํ๋ฆ„์—์„œ๋„ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋  ์ˆ˜ ์žˆ์Œ์„ ๋А๊ผˆ๋‹ค.

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ์ € ํ™˜๋ถˆ ์ฒ˜๋ฆฌ๋‚˜ ๋ณธ์ธํ™•์ธ ๋กœ์ง์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์ด ์žกํžŒ ๊ฒƒ ๊ฐ™๋‹ค.


์š”์•ฝ

  • โœ… ๊ฒฐ์ œ ์ทจ์†Œ๋Š” POST ๋ฐฉ์‹, JSON ํฌ๋งท์œผ๋กœ imp_uid or merchant_uid ์ „๋‹ฌ
  • โœ… ๋ณธ์ธ์ธ์ฆ์€ GET ๋ฐฉ์‹, imp_uid PathVariable๋กœ ์ „๋‹ฌ
  • โœ… ๋ชจ๋‘ access_token ํฌํ•จํ•œ Authorization ํ—ค๋” ํ•„์ˆ˜
  • โœ… ์‹ค์Šต ์‹œ ์‹ค์ œ ์ธ์ฆ ํ›„ imp_uid ํ™•๋ณด ํ•„์š”

profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€