옹실이의 개발이야기

API

API 아임포트 결제 API : ③환불하기

옹실 2021. 1. 22. 21:27

전에는 아임포트 API의 토큰과 주문 번호를 이용해 결제 정보 갖고오기를 포스팅했었는데,
이번에는 환불하는 기능에 대해 포스팅해보고자 한다.

사실 처음엔 결제 기능을 구현하면서 환불 기능까진 생각을 못했었다.
아임포트 API 테스트용 결제는 별도의 환불 과정이 없어도 자동 환불이 되기 때문이다.
하지만 환불 기능은 결제와 함께 반드시 필요한 기능인걸........
나중에 깨닫고 구현했다.

환불하는 것도 결제정보 갖고오는 것과 마찬가지로 
토큰과 주문 번호(merchant_uid)가 필요하다.
구현순서는 대략 이렇다.


1. 아임포트에서 결제 토큰 가져오기
2. 주문 번호와 결제 토큰을 이용해 환불하기



1번 아임포트에서 결제 토큰 가져오기는 전에 포스팅 했으므로 패스하겠다.
아래 링크에서 확인 가능하다.
ongsil-coding.tistory.com/11
 

 

API 아임포트 결제 API : ②결제 정보 가져오기

결제 기능을 구현하다보면, 주문 내역을 보여주기 위해 결제 정보를 가져와야할 때가 있다. 이전에도 아임포트 API를 이용한 결제창 연결을 포스팅했었는데 전에는 정말 날 것 그대로(?) 노가다

ongsil-coding.tistory.com

 

2. 주문 번호와 결제토큰을 이용해 환불하기

① 토큰, 주문 정보 가져오기

주문 번호를 받아온 후 long 타입으로 바꾸고
받아온 토큰과 함께 환불하는 메소드에 파라미터로 넘겨서 결과값을 int로 받았다.

if문을 활용해 만약 결과값이 -1이면 환불 신청에 실패했다는 안내 페이지를 띄우고,
환불에 성공했을 경우 해당 주문 내역을 삭제하도록 했다.

1
2
3
4
5
6
7
8
9
10
11
12
        long order_index2 = Long.parseLong(order_index);
        
        //토큰 받아오기 & 환불요청
        String token = getImportToken();
        int result_delete = cancelPay(token, order_number);
        if(result_delete == -1) {
            return "pay_cancel_fail";
        }else{
            // 주문내역 삭제
            payservice.deleteOneOrder(order_index2);
            return "pay_cancel_ok";
        }
cs


② 환불하기

환불하기를 구현하려면 아임포트 API의 결제 취소 url, key, secret값이 필요하다.
key와 secret 값은 개인마다 다 다르기 때문에 정보 보호를 위해 임의로 적어놓았다.
key, secret 확인하는 방법은 이전 결제정보 가져오기 포스팅을 참고하기 바란다.

받아온 토큰과 주문번호를 이용해 아래와 같이 코드를 적어주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public static final String IMPORT_CANCEL_URL = "https://api.iamport.kr/payments/cancel"
    public static final String KEY = "key";
    public static final String SECRET = "secret";
 
    public int cancelPay(String token, String mid) { 
        HttpClient client = (HttpClient)HttpClientBuilder.create().build(); 
        HttpPost post = new HttpPost(IMPORT_CANCEL_URL); 
        Map<StringString> map = new HashMap<StringString>(); 
        post.setHeader("Authorization", token); 
        map.put("merchant_uid", mid); 
        String asd = ""
        try { 
            post.setEntity(new UrlEncodedFormEntity(convertParameter(map))); 
            HttpResponse res = client.execute(post); 
            ObjectMapper mapper = new ObjectMapper(); 
            String enty = EntityUtils.toString(res.getEntity()); 
            JsonNode rootNode = mapper.readTree(enty); asd = rootNode.get("response").asText();
        } catch (Exception e) { 
            e.printStackTrace(); 
        } if (asd.equals("null")) { 
            System.err.println("환불실패"); return -1
        } else { 
            System.err.println("환불성공"); return 1
        }
    } 
        
cs

 

 

결과 ▼

결과 확인은 아임포트에서 가능하다.
www.iamport.kr/?gclid=Cj0KCQiAjKqABhDLARIsABbJrGnc1hxh1RSNIjt56nVDEJPRMGmMWoRvC_8k4v3EgdZPRXcYyJcTaGYaAsv8EALw_wcB

 

개발자를 위한 무료 결제연동 API, 아임포트

아임포트를 import하세요. 아임포트의 풍부한 REST API 기능을 이용하면 결제연동이 훨씬 쉬워집니다. 지금 시작하세요.

www.iamport.kr

아임포트 > 대시보드 > 로그인 후 결제 승인내역에서
빨간색으로 표시한 검색 버튼을 누르면 모든 결제 내역이 다 나온다.

 

결제 했을 때 이렇게 결제 정보가 다 나온다.
(문자로 결제 내역이 발신된다)



이후 환불 신청을 눌렀을 때 아래와 같이 환불이 제대로 된 것을 확인할 수 있었다.
(문자로 환불 내역이 발신된다)