c# (asp.net core)로 “카카오 로그인, 카카오 카카오 친구목록 조회, 나에게 메시지 발송” 테스트 해볼 수 있는 간단한 예제입니다.
kakao_rest_api_example_asp.net.zip (1.4 MB)
[실행방법]
- Visual Studio Community를 받아 설치합니다.
- kakao_rest_api_example_asp.net.zip 파일을 받아 압축을 푼 후, kakao_rest_api_example_asp.net.sln 파일을 실행합니다.
- 내 애플리케이션 > 앱 설정 > 요약 정보 > "REST API 키"를 복사해서 Service 폴더 KakaoService.cs 파일 REST_API_KEY 항목에 설정합니다.
- 내 애플리케이션>제품 설정>카카오 로그인 > Redirect URI에 http://localhost:8888/Kakao/login-callback 주소를 설정합니다.
- Visual Studio 툴바에서 [ IIS Express] 를 실행하면, 브라우저가 실행되어 http://localhost:8888/ 에 접속 됩니다.
[실행결과]
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);
}
}
}
로그인에 관한 가이드 : REST API | Kakao Developers REST API
친구목록 관한 가이드 : REST API | Kakao Developers REST API
메시지에 관한 가이드 : 카카오톡 메시지: REST API | Kakao Developers 카카오톡 메시지: REST API
KOE006 에러 : Koe006 에러가 발생할 때
친구 api, 메시지 api 사용을 위한 체크 리스트 : 친구 api와 피커, 메시지 api 사용을 위한 체크 리스트
친구목록, 메시지 API 자주 겪는 에러 : [faq] 친구 목록 api, 메시지 전송 api를 연동하는 과정에서 자주 겪는 에러
메시지 API 권한 신청 방법 : '메시지 API' 사용 신청 방법 / How to request permission for 'Messaging API'