카카오페이 결제 API 테스트 오류 문의

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}””
}

이런 오류가 발생하는데 왜 그런 건가요?

안녕하세요. 카카오페이입니다.
메일로 답변드린내용 공유드립니다.

우선 TCSUBSCRIP CID는 단건결제 테스트 CID가 아닌 정기결제 테스트 CID 입니다.
거절코드로 보면 넘겨주신 request 정보 중 CID가 인식이 되지 않아서 오류가 발생한것으로 보이는데요.
위 같은 경우 request 정보값이 옳바르게 유입되지 않았거나 카카오페이로 넘어오지 않아서 발생하는 케이스입니다.
정확한 확인을 위해 dev secret_key 정보 + 거절 일시 + 유니크한 주문번호 회신주시면 카카오페이 유입정보 안내드릴 수 있도록 하겠습니다.

감사합니다.