Developer Note/국비과정 수업내용 정리&저장

24년 11월 27일

DH_PARK 2024. 12. 5. 03:53

카카오톡 채널 API

카톡과 비슷한데 사업자용 카카오톡이라고 생각하면 된다.

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://t1.kakaocdn.net/kakao_js_sdk/2.7.4/kakao.min.js" integrity="sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka" crossorigin="anonymous"></script>
</head>
<body>

    <h1>KAKAO CHANNEL SITE</h1>

    <a href="javascript:void(0)" id="kakao-add-channel-button"></a>
    
    <script>
        Kakao.init("337a12732b24fa97055d9e02f1204788");
        Kakao.Channel.createAddChannelButton({
          container: '#kakao-add-channel-button',
          channelPublicId: '_XxoJMn' // 카카오톡 채널 홈 URL에 명시된 id로 설정합니다.
        });

    </script>


</body>
</html>

컨트롤러에서 이 부분으로 매핑하면 버튼이 나오는데 , 버튼을 누르면 채널 추가가 됨.


카카오 페이 API

카카오페이를 사용해보는 작업을 해봤음.

여기도 사용하기 전에 설정을 해주는데 ,

카카오페이 개발자센터 로그인을 해주고

플랫폼 에서 웹사이트 도메인을 설정해준다.

package com.example.demo.C04Kakao;

@Controller
@Slf4j
@RequestMapping("/kakao/pay")
public class KakaoPayController {
    @GetMapping("/main")
    public void main(){
    log.info("GET /kakao/pay/main.,,!!");
    }

    @GetMapping("/req")
    @ResponseBody
    public void req(){
        log.info("GET /kakao/pay/req.,,!!");

        String url = "<https://open-api.kakaopay.com/online/v1/payment/ready>"; //요청 url

        //HTTP 요청 헤더
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "SECRET_KEY DEV501D04AA9E90A1FA68850C439C2ECF05EBDE3"); //한칸 띄우는거 중요 !
        headers.add("Content-Type", "application/json"); //json 타입으로 요청을 한다.

        //HTTP 요청 파라미터
        MultiValueMap<string,string> params = new LinkedMultiValueMap<>();

        JSONObject jobj = new JSONObject();
        jobj.put("cid","TC0ONETIME");
        jobj.put("partner_order_id","partner_order_id");
        jobj.put("partner_user_id","partner_user_id");
        jobj.put("item_name","초코파이");
        jobj.put("quantity","1");
        jobj.put("total_amount","2200");
        jobj.put("vat_amount","200");
        jobj.put("tax_free_amount","0");
        jobj.put("approval_url","");  //결제 성공시 이동할 위치
        jobj.put("fail_url",""); //나는 실패하면 이 쪽으로 가도록 매핑해놔서 이렇게 쓰면됨.
        jobj.put("cancel_url",""); //취소할 시에 이동하는 페이지

//        params.add("",jobj); 이건 아닌듯 ?

        //HTTP 엔티티(헤더_파라미터)
        HttpEntity entity = new HttpEntity<>(jobj,headers);

        //HTTP 요청 후 응답받기
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST,entity, KakaoPayResponse.class);
        System.out.println(response.getBody());
//        return response;

    }

    @GetMapping("/success") //결제 성공시
    public void success(){
        log.info("GET /kakao/pay/success.,,!!");
    }

    @GetMapping("/cancel") //결제 취소
    public void cancel(){
        log.info("GET /kakao/pay/cancel.,,!!");
    }

    @GetMapping("/fail") //결제 실패
    public void fail(){
    log.info("GET /kakao/pay/fail.,,!!");
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    private static class KakaoPayResponse  {
        public String tid;
        public boolean tms_result;
        public String created_at;
        public String next_redirect_pc_url;
        public String next_redirect_mobile_url;
        public String next_redirect_app_url;
        public String android_app_scheme;
        public String ios_app_scheme;
    }

}

</string,string>

단건결제를 하는 작업을 해봤는데 ,

파라미터를 json 타입으로 보내기 때문에 maven 에서

json-simple 라이브러리를 추가해주고 json 객체를 만들어 보낼 파라미터를 구성한다.

그리고 전송할 엔티티에 json데이터와 header 정보를 추가해주고 요청을 보낸다.

그리고 url 을 눌러보면

 

이런 화면이 나오는데 결제에 성공하게 되면 success 페이지로 이동하게 된다.

프로젝트를 할 때 결제를 사용해야 하는 부분이 있을 때 이용하면 좋을 듯 하다.


네이버 책 검색

도서검색을 하는 부분이다.

package com.example.demo.C05Naver;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

@Controller
@Slf4j
@RequestMapping("/naver")
public class C02NaverSearchController {

    private final String CLIENT_ID = "T7WFh1YJQyB7TNL0O6g6";
    private final String CALLBACK_URL = "";
    private final String CLIENT_SECRET = "LWwWJasVbd";

    @GetMapping("/book/{keyword}")
    @ResponseBody
    public String search(@PathVariable("keyword") String keyword){
        log.info("GET /naver/search/01.,,!!"+keyword);

        String url = "<https://openapi.naver.com/v1/search/book.json?query=>"+keyword;

        //HTTP 요청 헤더
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Naver-Client-Id",CLIENT_ID );
        headers.add("X-Naver-Client-Secret",CLIENT_SECRET );
        //HTTP 요청 파라미터
        MultiValueMap<string,string> params = new LinkedMultiValueMap<>();
//        params.add("query",keyword);

        //HTTP 엔티티(헤더_파라미터)
        HttpEntity< MultiValueMap<string,string> > entity = new HttpEntity<>(params,headers);
        //HTTP 요청 후 응답받기
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET,entity, String.class);
        System.out.println(response);

        return response.getBody();

    }

}

</string,string></string,string>

코드를 보다가 갑자기 keyword 매개변수를 왜 PathVariable 로 하는지 궁금해져서 찾아보니 

RequestParam 과는 사용 용도가 약간 달랐다.

param 은 쿼리스트링 형식이고 pathVariable 은 매개변수 자체가 경로의 값이 되는 형식이었다.

아래는 부가적인 설명.

 

keyword를 pathvariable 로 전달하는 이유

PathVariable 은 URL 경로에 들어간 파라미터를 메서드내에 변수로 전달하고

RequestParam 같은 경우는 쿼리문자열로 전달된다.

호출: http://localhost:8092/search?keyword=java (RequestParam 을 사용할 때 URL)

호출: http://localhost:8092/book/java (PathVariable 을 사용할 때 URL)

간단히 생각하면 URL 에서 pathvariable 은 keyword 자체에 변수가 할당되고

RequestParam 은 key:value 형태로 값이 전달되는 형태이다.

 


네이버 같은 경우도 로그인이나 보면 형식은 위와 똑같다.

그냥 앱 키만 다르게 하고 API 공식 문서에서 파라미터가 뭐가 다른지 그것만 확인한 후에 위 코드처럼

MAP 에 잘 담아서 넣어주면 네이버도 똑같이 잘 작동한다.

'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글

24년 12월 2일  (2) 2024.12.10
24년 11월 28일  (1) 2024.12.08
24년 11월 26일  (1) 2024.12.05
24년 11월 25일  (0) 2024.11.26
24년 11월 22일  (0) 2024.11.25