[rest api 예제] c# (asp.net core)- 카카오 로그인, 카카오 친구목록 조회, 나에게 메시지 발송

c# (asp.net core)로 “카카오 로그인, 카카오 카카오 친구목록 조회, 나에게 메시지 발송” 테스트 해볼 수 있는 간단한 예제입니다.

kakao_rest_api_example_asp.net.zip (1.4 MB)

[실행방법]

  1. Visual Studio Community를 받아 설치합니다.
  2. kakao_rest_api_example_asp.net.zip 파일을 받아 압축을 푼 후, kakao_rest_api_example_asp.net.sln 파일을 실행합니다.
  3. 내 애플리케이션 > 앱 설정 > 요약 정보 > "REST API 키"를 복사해서 Service 폴더 KakaoService.cs 파일 REST_API_KEY 항목에 설정합니다.
  4. 내 애플리케이션>제품 설정>카카오 로그인 > Redirect URI에 http://localhost:8888/Kakao/login-callback 주소를 설정합니다.
  5. Visual Studio 툴바에서 [:arrow_forward: IIS Express] 를 실행하면, 브라우저가 실행되어 http://localhost:8888/ 에 접속 됩니다.

[실행결과]
image

HttpCallService.cs

using kakao_rest_api_example_asp.net.Common;
using System;
using System.IO;
using System.Net;
using System.Text;

namespace kakao_rest_api_example_asp.net.Service
{
    public class HttpCallService : IHttpCallService
    {
        public String Call(String method, String reqURL, String header, string param)
        {
            var request = (HttpWebRequest)WebRequest.Create(reqURL);
            request.Headers["Authorization"] = header;
            HttpWebResponse response;
            var responseString = "";
            try
            {
                if (method.Equals(Const.GET))
                {
                    response = (HttpWebResponse)request.GetResponse();
                }
                else
                {
                    var data = Encoding.ASCII.GetBytes(param);
                    request.Method = Const.POST;
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = data.Length;
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                    response = (HttpWebResponse)request.GetResponse();
                }
                responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
            catch (WebException e)
            {
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    int code = (int)((HttpWebResponse)e.Response).StatusCode;
                    using (var reader = new StreamReader(e.Response.GetResponseStream()))
                    {
                        responseString = "["+code+"]" + reader.ReadToEnd();
                    }
                }
            }

            return responseString;
        }

        public String CallwithToken(String method, String reqURL, String access_Token)
        {
            return CallwithToken(method, reqURL, access_Token, null);
        }
        public String CallwithToken(String method, String reqURL, String access_Token, string param)
        {
            String header = "Bearer " + access_Token;
            return Call(method, reqURL, header, param);
        }
    }
}

KakaoService.cs

using kakao_rest_api_example_asp.net.Common;
using Microsoft.AspNetCore.Http;
using System;

namespace kakao_rest_api_example_asp.net.Service
{
    public class KakaoService : IKakaoService
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private ISession _session => _httpContextAccessor.HttpContext.Session;

        private readonly IHttpCallService _httpCallService;
        public KakaoService(IHttpCallService httpCallService, IHttpContextAccessor httpContextAccessor)
        {
            _httpCallService = httpCallService;
            _httpContextAccessor = httpContextAccessor;
        }

        private String REST_API_KEY = "여기에 REST_API_KEY를 입력하세요";

        private String REDIRECT_URI = "http://localhost:8888/Kakao/login-callback";

        private String AUTHORIZE_URI = "https://kauth.kakao.com/oauth/authorize";

        public String TOKEN_URI = "https://kauth.kakao.com/oauth/token";

        private String CLIENT_SECRET = "";

        private String KAKAO_API_HOST = "https://kapi.kakao.com";

        
        public String login()
        {
            return login("");
        }

        public String login(String scope)
        {
            String uri = AUTHORIZE_URI + "?redirect_uri=" + REDIRECT_URI + "&response_type=code&client_id=" + REST_API_KEY;
            if (!String.IsNullOrEmpty(scope)) uri += "&scope=" + scope;
            return uri;
        }

        public String loginCallback(String code)
        {
            String param = "grant_type=authorization_code&client_id=" + REST_API_KEY + "&redirect_uri=" + Uri.EscapeDataString(REDIRECT_URI) + "&client_secret=" + CLIENT_SECRET + "&code=" + code;
            String rtn = _httpCallService.Call(Const.POST, TOKEN_URI, Const.EMPTY, param);

            _session.SetString("token", Trans.token(rtn));
            return "/";
        }

        public String getProfile()
        {
            String uri = KAKAO_API_HOST + "/v2/user/me";
            return _httpCallService.CallwithToken(Const.GET, uri, _session.GetString("token"));
        }

        public String getFriends()
        {
            String uri = KAKAO_API_HOST + "/v1/api/talk/friends";
            return _httpCallService.CallwithToken(Const.GET, uri, _session.GetString("token"));
        }

        public String message()
        {
            String uri = KAKAO_API_HOST + "/v2/api/talk/memo/default/send";
            return _httpCallService.CallwithToken(Const.POST, uri, _session.GetString("token"), Trans.default_msg_param);
        }
    }

}

로그인에 관한 가이드 : https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
친구목록 관한 가이드 : https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api#get-friends
메시지에 관한 가이드 : https://developers.kakao.com/docs/latest/ko/message/rest-api

KOE006 에러 : https://devtalk.kakao.com/t/koe006/114778
친구 api, 메시지 api 사용을 위한 체크 리스트 : https://devtalk.kakao.com/t/api-api/116052
친구목록, 메시지 API 자주 겪는 에러 : https://devtalk.kakao.com/t/faq-api-api/82152?source_topic_id=109558
메시지 API 권한 신청 방법 : https://devtalk.kakao.com/t/api-how-to-request-permission-for-messaging-api/80421?source_topic_id=115052

좋아요 1