package com.HELPT.Backend.global.kakaomodule;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
@Service
@RequiredArgsConstructor
@Transactional
@Slf4j
public class KakaoPayService {
static final String cid = "TCSUBSCRIP"; // 가맹점 테스트 코드
@Value("${kakao.appkey}")
private String admin_Key; // 공개 조심! 본인 애플리케이션의 어드민 키를 넣어주세요
private KakaoReadyResponse kakaoReady;
public KakaoReadyResponse kakaoPayReady() {
// 카카오페이 요청 양식
MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<>();
parameters.add("cid", cid);
parameters.add("partner_order_id", "1001");
parameters.add("partner_user_id", "goguma");
parameters.add("item_name", "비둘기");
parameters.add("quantity", 1);
parameters.add("total_amount", 20000);
// parameters.add(“vat_amount”, “100”);
parameters.add(“tax_free_amount”, 100);
parameters.add(“approval_url”, “http://localhost:8080/payment/success”); // 성공 시 redirect url
parameters.add(“cancel_url”, “http://localhost:8080/payment/cancel”); // 취소 시 redirect url
parameters.add(“fail_url”, “http://localhost:8080/payment/fail”); // 실패 시 redirect url
// 파라미터, 헤더
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(parameters, this.getHeaders());
// 외부에 보낼 url
RestTemplate restTemplate = new RestTemplate();
log.info("결재 오류");
kakaoReady = restTemplate.postForObject(
"https://open-api.kakaopay.com/online/v1/payment/ready",
requestEntity,
KakaoReadyResponse.class);
log.info("결재 성공");
return kakaoReady;
}
/**
* 결제 완료 승인
*/
public KakaoApproveResponse approveResponse(String pgToken) {
// 카카오 요청
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("cid", cid);
parameters.add("tid", kakaoReady.getTid());
parameters.add("partner_order_id", "가맹점 주문 번호");
parameters.add("partner_user_id", "가맹점 회원 ID");
parameters.add("pg_token", pgToken);
// 파라미터, 헤더
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(parameters, this.getHeaders());
// 외부에 보낼 url
RestTemplate restTemplate = new RestTemplate();
KakaoApproveResponse approveResponse = restTemplate.postForObject(
"https://online-pay.kakao.com/mockup/online/v1/payment/approve",
requestEntity,
KakaoApproveResponse.class);
return approveResponse;
}
private HttpHeaders getHeaders() {
HttpHeaders httpHeaders = new HttpHeaders();
String auth = "SECRET_KEY " + admin_Key;
httpHeaders.set("Authorization", auth);
httpHeaders.set("Content-type", "application/json;charset=utf-8");
return httpHeaders;
}
}
{
“status”: “error”,
“data”: null,
“message”: “400 Bad Request: “{“extras”:null,“error_message”:“invalid param(cid has invalid value)”,“error_code”:-400}””
}
이런 오류가 발생하는데 왜 그런 건가요?