국세청 사업자등록 상태조회 api 예제/질문

안녕하세요 C#독학중인 초급개발자이빈다.
국세청 사업자등록 상태조회 api를 사용하려고 하는데 개발가이드에 ajax 이용한 방법이 있더라구요.
ajax사용에 전무한 제가 하기엔 지식도 부족하고 C# 기준 예제도 찾기 어렵더라구요…

지금 작성한 코드에서 사업자등록번호를 하나 검색하고 싶은데 어떻게 수정해야할지 모르겠네요…
(사실 여기저기서 구글링한 코드라 정확히 어떤 방식으로 작동하는 코드인지도 이해하지 못했습니다.)

해결방안 또는 예제코드가 있다면 도와주시면 감사하겠습니다…

<API 신청페이지>

<현재코드>

using System.Net.Http;
using Newtonsoft.Json;
using System.Threading.Tasks;

private void button1_Click(object sender, EventArgs e)
        {
            GetApiAsync();
        }


        private async Task GetApiAsync()
        {
            var httpClient = new HttpClient();

            var serviceKey ='인코딩된 사용자 서비스키';
            var serviceUrl = $"http://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey={serviceKey}&returnType=XML";

            var business = new Dictionary<string, string>
            {
                ["b_no"] = "사업자번호",
                ["start_dt"] = "개업년월일",
                ["p_nm"] = "대표자명",
                ["b_sector"] = "",
                ["b_type"] = ""
            };
            var data = new Dictionary<string, List<Dictionary<string, string>>>
            {
                ["businesses"] = new List<Dictionary<string, string>>()
                {
                    business
                }
            };
            var jsonData = JsonConvert.SerializeObject(data);

            var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
            var result = await httpClient.PostAsync(serviceUrl, content);
            //Console.WriteLine(await result.Content.ReadAsStringAsync());
            richTextBox1.Text = await result.Content.ReadAsStringAsync();
        }

API 사용법은 문서에 잘 나와 있는 것 같습니다.

크게 "상태확인"과 “진위확인” 서비스로 분류되는데, 전자는 ~/status 주소로, 후자는 ~/business 주소로 되어 있습니다.

전자의 경우 바디에 삽입될 JSON 객체의 형식은 아래와 같습니다.

{
    "b_no": ["xxxxxxx"] // 사업자번호 "xxxxxxx" 로 조회 시,
}

그런데, 보여 주신 코드는 상태확인 서비스가 아닌, 진위확인 서비스가 요구하는 객체로 정의해서 바디에 삽입한 듯 보입니다.

상태 확인을 위해서는,

var jsonData = JsonConvert.SerializeObject( new { b-no =  "xxxxxxx"} );
//...
var result = await httpClient.PostAsync(serviceUrl, content);

API 서버가 엄밀하게 아래 형식의 객체만 허용하는 것인지,

{
    "b_no": ["xxxxxxx"] // 사업자번호 "xxxxxxx" 로 조회 시,
}

아니면, 아래와 같은 형식의 객체라도 문제 없이 파싱할 지는 API 맘이지만,

            {
                "b_no" = "사업자번호",
                "start_dt" = "개업년월일",
                "p_nm" = "대표자명",
                "b_sector" = "",
                "b_type" = ""
            }

API 요구 사항을 명확히 따라야 하지 않을까요?

3개의 좋아요

@BigSquare 말씀대로 호출하신 API는 상태조회 서비스인데 JSON은 진위확인용 데이터를 입력하셨습니다.

상태조회 서비스 API 주소는 status로 는 아래와 같이 b_no의 Value를 배열로 지정해야 정상 동작합니다.
b_no는 하이픈(-) 없이 숫자만 입력해야 합니다.

var serviceUrl = $"http://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey={serviceKey}&returnType=XML";

var business = new Dictionary<string, string[]>
{
    ["b_no"] = new string[] { "사업자 등록번호" },
};
var jsonData = JsonConvert.SerializeObject(business);

var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
var result = await httpClient.PostAsync(serviceUrl, content);
Debug.WriteLine(await result.Content.ReadAsStringAsync());

진위확인 서비스 API 주소는 validate로 작성해주신 코드로 잘 동작합니다.

 var serviceUrl = $"http://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey={serviceKey}&returnType=XML";

var business = new Dictionary<string, string>
{
    ["b_no"] = "사업자번호",
    ["start_dt"] = "개업년월일" ,
    ["p_nm"] = "대표자명",
};
var data = new Dictionary<string, List<Dictionary<string, string>>>
{
    ["businesses"] = new List<Dictionary<string, string>>()
    {
        business
    }
};
var jsonData = JsonConvert.SerializeObject(data);

var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
var result = await httpClient.PostAsync(serviceUrl, content);
Debug.WriteLine(await result.Content.ReadAsStringAsync());
4개의 좋아요