카카오톡 채널 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 |