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