package com.example.syFinal.global.controller;
import java.net.URI;
import java.net.URISyntaxException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import com.example.syFinal.global.model.KakaoPayApprovalDTO;
import com.example.syFinal.global.model.KakaoPayReadyDTO;
import lombok.extern.java.Log;
@Service
@Log
public class KakaoPay {
private static final String HOST = “https://open-api.kakaopay.com”;
KakaoPayReadyDTO KakaoPayReadydto;
KakaoPayApprovalDTO KakaoPayApprovaldto;
public String kakaoPayReady() {
RestTemplate restTemplate = new RestTemplate();
// 서버로 요청할 Header
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "SECRET_KEY "+ "DEV8EE89A70B1064CFFE0AB3965B3982D09800D1");
headers.add("Content-Type", "APPLICATION/JSON;charset=UTF-8");
// 서버로 요청할 Body
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("cid", "TC0ONETIME");
params.add("partner_order_id", "1001");
params.add("partner_user_id", "testuser");
params.add("item_name", "test");
params.add("quantity", "1");
params.add("vat_amount", "1500");
params.add("total_amount", "2000");
params.add("tax_free_amount", "1500");
params.add("approval_url", "https://localhost:3000/kakaoSuccess");
params.add("cancel_url", "https://localhost:3000/kakaoCancel");
params.add("fail_url", "https://localhost:3000/kakaoFail");
HttpEntity<MultiValueMap<String, String>> body = new HttpEntity<MultiValueMap<String, String>>(params, headers);
//System.out.println("body===="+body);
try {
KakaoPayReadydto = restTemplate.postForObject(new URI(HOST + "/online/v1/payment/ready"), body, KakaoPayReadyDTO.class);
log.info("" + KakaoPayReadydto);
return KakaoPayReadydto.getNext_redirect_pc_url();
} catch (RestClientException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
return "kakaoPay";
}
public KakaoPayApprovalDTO kakaoPayInfo(String pg_token) {
log.info("KakaoPayInfoVO............................................");
log.info("-----------------------------");
RestTemplate restTemplate = new RestTemplate();
// 서버로 요청할 Header
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "SECRET_KEY "+ "DEV8EE89A70B1064CFFE0AB3965B3982D09800D1");
headers.add("Content-Type", "APPLICATION/JSON;charset=UTF-8");
// 서버로 요청할 Body
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("cid", "TC0ONETIME");
params.add("tid", KakaoPayReadydto.getTid());
params.add("partner_order_id", "1001");
params.add("partner_user_id", "testuser");
params.add("pg_token", pg_token);
params.add("total_amount", "2000");
HttpEntity<MultiValueMap<String, String>> body = new HttpEntity<MultiValueMap<String, String>>(params, headers);
try {
KakaoPayApprovaldto = restTemplate.postForObject(new URI(HOST + "/online/v1/payment/approve"), body, KakaoPayApprovalDTO.class);
log.info("" + KakaoPayApprovaldto);
return KakaoPayApprovaldto;
} catch (RestClientException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
return null;
}
}
/////에러창
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: “{“extras”:null,“error_message”:“invalid param(cid has invalid value)”,“error_code”:-400}”
리액트 화면에서 카카오페이 버튼 클릭 후 결제창이 뜨는 코드를 구현했습니다.
(서버-스프링부트, 프론트단-리액트)
params와 headers를 넣은 body를 콘솔에 찍었을땐 데이터가 나옵니다.
그런데 계속 400 Bad Request: “{“extras”:null,“error_message”:“invalid param(cid has invalid value)”,“error_code”:-400}” 에러가 납니다. 어디가 문제인가요…