프로젝트_리뷰

프로젝트 - 결제 API 흐름

javaboiii 2024. 10. 28. 12:43

 

 

결제하기 버튼을 클릭하면

가맹점 식별코드를 사용해서 IMP 변수를 초기화하고
(IMP는 포트원과 상호작용할 수 있는 변수 입니다.)

결제 정보를 불러옵니다

결제 번호를 생성 후
금액과 함께 비동기로 포트원에 사전 등록을 요청합니다.

api 요청을 httpbuilder를 이용해 요청을 하고
응답을 받습니다

HttpBuilder는 HTTP 요청을 손쉽게 구성하고 전송하기 위해 사용하는 
빌더 패턴을 기반으로 한 클래스입니다.

요청 uri를 작성하고
header에 요청 본문이 json임을 명시 합니다
method는 포트원에서 요구하는 방식으로 설정 후
http요청을 생성하고

클라이언트메서드를 이용해 요청 후 응답을 받습니다.


(Authorization은 인증 요청임을 뜻하고
Bearer는 토큰을 이용한 인증임을 뜻합니다.)



빌더 패턴은 객체를 단계별로 구성하여 복잡한 객체를 생성할 때 사용되는 디자인 패턴입니다

 

// 토큰 발급 요청
public static PaymentInfo portOne_code() {
    PaymentInfo paymentInfo = new PaymentInfo();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.iamport.kr/users/getToken"))
            .header("Content-Type", "application/json")
            .method("POST", HttpRequest.BodyPublishers.ofString("{\"imp_key\":\"" + IMP_KEY + "\",\"imp_secret\":\"" + IMP_SECRET + "\"}"))
            .build();
        HttpResponse<String> response = null;
        try {
            response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException | InterruptedException e) {
            System.out.println("토큰 요청 실패");
            e.printStackTrace();
        }
        System.out.println(response.body());
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = null;
        try {
            jsonObject = (JSONObject) parser.parse(response.body());
        } catch (ParseException e) {
            System.out.println("json 변환 실패");
            e.printStackTrace();
        }
        JSONObject responseObject = (JSONObject) jsonObject.get("response");
        String token = (String)responseObject.get("access_token");
        paymentInfo.setToken(token);
        return paymentInfo;
}

 

  • portOne_code 메서드 설명
    1. PaymentInfo 객체 생성: 발급받은 토큰을 저장 객체임
    2. HTTP 요청 생성: HttpRequest 빌더를 사용하여 요청 설정
      • URI: 토큰 발급 API의 URL 설정
      • 헤더: Content-Type을 application/json으로 설정
      • 본체: POST 메서드와 함께 발급 요청에 필요한 JSON 데이터
    3. 요청 전송: HttpClient를 사용하여 요청을 보내고 응답을 받음
    4. 예외 처리: 요청 중 오류가 발생하면 메시지 출력
    5. 응답 처리: 응답 본문을 JSON으로 파싱하여 "access_token"을 추출
    6. 토큰 저장: PaymentInfo 객체에 토큰을 설정하고 반환