Skip to content

Latest commit

 

History

History
73 lines (62 loc) · 2.8 KB

kakaopay.md

File metadata and controls

73 lines (62 loc) · 2.8 KB
title last_updated keywords sidebar comments permalink
카카오페이 연계
Jan 21, 2021
study
mydoc_sidebar
true
kakaopay.html

카카오 페이 연계

github repo

Obstacles

BE를 Spring Boot를 사용, WebClient를 사용했을 때 겪었던 문제점

  1. Content-type 문제
  • VO 를 form body로 변환하는 것. (content-type : application/x-www-form-urlencoded;charset=utf-8)
  • 해결:
    //    reference: https://jojoldu.tistory.com/478
    private BodyInserters.FormInserter<String> convertObjectToFormBody(Object dto) {
        try {
            Map<String, String> map = objectMapper.convertValue(dto, new TypeReference<>() {});
            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
            params.setAll(map);

            return BodyInserters.fromFormData(params);
        } catch (Exception e) {
            log.error("Url Parameter 변환중 오류가 발생했습니다. requestDto={}", dto, e);
            throw new IllegalStateException("Url Parameter 변환중 오류가 발생했습니다.");
        }
    }
  1. 세션이 중간에 끊김
  • ready를 받고, approve를 하는 중간에 세션이 끊기고 pg_token만 받는다.
  • 해결: ready 이후 oid, uid 등을 기준으로 db에 저장한 이후에 approval_url에 query parameter로 추가, callback을 받은 후 db에서 select 이후 파라미터를 같이 넣고 보냄.
  this.approval_url = BASE_URL
          + "/success?partner_order_id=" + partner_order_id + "&"
          + "partner_user_id=" + partner_user_id  + "&"
          + "cid=" + cid;
  1. Child popup /<-/> Parent 통신
  • 함수 호출은 cross origin 때문에 불가.
  • postMessage로 cross origin 통신 가능
  • 해결: opener.postMessage("callbackFn", URL)

etc

  • WebClientConfig
    @Bean
    public WebClient kakaopayClient() {
        return this.webClient()
                .defaultHeaders(httpHeaders -> {
                    httpHeaders.add(HttpHeaders.AUTHORIZATION, "KakaoAK " + ADMIN_KEY);
                    httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8");
//                    httpHeaders.add(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
//                    httpHeaders.add(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36");
//                    httpHeaders.add("X-Requested-With", "XMLHttpRequest");
                })
                .baseUrl(KAKAOPAY_BASE_URL)
                .build();
    }