Trouble Shooting

[공공데이터포털] 공공 API 사용 시 500 Error "message": "Method Not Allowed" 해결

깨구르르 2024. 11. 25. 00:57
728x90

공공데이터포털의 사업자등록 상태조회 API를 활용하였다.

그런데 아래와 같은 에러가 떴다.

 

1. 에러 로그 및 문제점

Uncaught (in promise) Error: AxiosError: Request failed with status code 500
    at businessman_status (sign_up_api.js:67:1)
    at async validateRegNumber (Sign_up_page_company.jsx:170:1)
    
https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=비밀키

{
  "message": "Method Not Allowed"
}

Method를 허용할 수 없다는 500 에러가 떴다.

 

sign_up_api.js에 작성한 코드는 아래와 같다.

export const businessman_status = async (registration_number) => {
  try {
    const res = await axios({
      method: "POST",
      url: `https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=${process.env.REACT_APP_BUSINESS_API_KEY}`,
      data: {
        b_no: registration_number,
      },
      dataType: "JSON",
    });

    // 01 - 계속사업자, 02 - 휴업자, 03 - 폐업자
    return res.data[0].b_stt_cd;
  } catch (e) {
    if (e.response && e.response.data) {
      throw new Error(e);
    } else {
      throw new Error("서버 오류가 발생했습니다.");
    }
  }
};

 


 

2. 해결방법

우선, 콘텐트타입을 제대로 명시하지 않은 것 같아 콘텐트타입을 JSON으로 명시했다.

headers: {
        "Content-Type": "application/json",
      },

 

이렇게 수정을 하였더니 400 Bad Request 오류가 발생했다.

값이 제대로 전달되지 못하고 있는 것 같아 공공데이터포털에 들어가 문서를 확인해보니,

 

공공데이터포탈 샘플코드

값을 전달할 때 위와 같이 배열 형태로 전달해야 한다고 한다.

registration_number를 대괄호로 감싸니 비로소 200 ok가 떴다.

그런데 요청이 잘 가는데, validateRegNumber 함수가 제대로 작동하지 않았다.

// Sign_up_page_company.jsx
const validateRegNumber = async (registration_number) => {
    const statusNumber = await businessman_status(registration_number);
    if (statusNumber !== "01") {
      setNumberError("계속사업자가 아닙니다.");
    } else {
      setNumberError("");
      setIsRegNumberDisabled(true);
    }
  };

요청을 보낸 반환값이 01이 아니라면 계속사업자가 아니라는 글씨를 보여주려고 했는데,

계속사업자인 사업자번호를 입력했을 때도 계속사업자가 아니라는 문구가 떴다.

 

console.log(res.data[0])로 콘솔에 값을 찍어보았더니 res.data[0] 값이 null이라고 떴다.

res.data.data[0]라고 수정하였더니 의도하던 대로 구현을 할 수 있었다.

오늘의 교훈: 공식 문서를 잘 읽어보자.

 


 

3. 최종 코드

export const businessman_status = async (registration_number) => {
  try {
    const res = await axios({
      method: "POST",
      url: `https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=${process.env.REACT_APP_BUSINESS_API_KEY}`,
      data: {
        b_no: [registration_number],
      },
      headers: {
        "Content-Type": "application/json",
      },
    });
    // 01 - 계속사업자, 02 - 휴업자, 03 - 폐업자
    return res.data.data[0].b_stt_cd;
  } catch (e) {
    if (e.response && e.response.data) {
      throw new Error(e);
    } else {
      throw new Error("서버 오류가 발생했습니다.");
    }
  }
};

 


 

참고

공공데이터포털: 국세청_사업자등록정보 진위확인 및 상태조회 서비스

 

728x90