[.Net] C#์์ ์นด์นด์คํก ์คํAPI/REST API๋ก ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
์นด์นด์คํก ์คํ API / REST API๋?
์ง๊ธ๊น์ง ๋ค๋ฅธ ํฌ์คํ ์์ ๋ค์ด๋ฒ ์คํ API, ๊ณต๊ณต๋ฐ์ดํฐํฌํธ ์คํ API๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์์ ์ฝ๋๋ฅผ ๋ค๋ค๋ดค์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ์คํ API๋ฅผ ์นด์นด์คํก๋ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
์นด์นด์ค ๋ก๊ทธ์ธ์ด๋ผ๋ ๊ฐ ๋ฉ์์ง ๋ณด๋ด๊ธฐ, ์ง๋ ์์น, ์นด์นด์ค ๋ด๋น ๋ฑ ์ผ๋ฐ์ ์ธ ์์ ํตํฉ API ๋ฟ๋ง ์๋๋ผ ๋น์ง๋์ค API ๋ฐ ์ธ๊ณต์ง๋ฅ API๊น์ง๋ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์นด์นด์คํก ์คํ API ์ค ๋ฉ์์ง ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ, ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ ๋์์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น ๋จ๊ณ
1. ์นด์นด์คํก ์คํ API ์๋น์ค ์ ์ฒญํ๊ธฐ
๋ก๊ทธ์ธ ํ ์๋จ์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๊ณ , ์๋์ ๊ฐ์ ํ๋ฉด์ด ํ์๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์๋์ ๊ฐ์ ํ๋ฉด์ด ํ์๋๋ฉด ์ฑ ์ด๋ฆ๊ณผ ์ฌ์ ์๋ช ์ ์ ๋ ฅํฉ๋๋ค. ์ฑ ์์ด์ฝ ๋ฑ๋ก์ ์ ํ์ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชฉ๋ก์ ์ถ๊ฐ๋๋ฉด, ์์ฑ๋ ํญ๋ชฉ์ ํด๋ฆญํฉ๋๋ค. ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ ํ์ด์ง๊ฐ ํ์๋๊ณ , REST API ํค ์ธ์๋ ์ฌ๋ฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆํค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๊ฐ์ ์๋ ํ๋ซํผ ์ค์ ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์๋์ ๊ฐ์ ํ๋ฉด์ด ํ์๋๋ฉด Web ํ๋ซํผ ๋ฑ๋ก ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ฌ์ดํธ ๋๋ฉ์ธ์ ์ ๋ ฅํ๋ผ๋ ํ๋ฉด์ด ํ์๋ฉ๋๋ค. ์ ๋ ์์๋ก ์ ์ ๋ธ๋ก๊ทธ ์ฃผ์๋ฅผ ์ ๋ ฅํ์ต๋๋ค. ์ด๋ ์ถํ ๋์ฌ ๋งํฌ ๋ฒํผ ํด๋ฆญ ์ ์ฐ๊ฒฐ๋๋ ์ฃผ์์ ๋๋ค. ๋์ค์ ์ธ์ ๋ ์ง ์์ ๋ฐ ์ญ์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
2. ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ํ๊ธฐ
์ ๊ณผ์ ์ด ๋ชจ๋ ๋๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด ํ๋ฉด์์ REST API ํค
๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ฉด์ ์ข์๋จ์ ์๋ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ๋ฉ๋ด๊ฐ ํ์ฅ๋ฉ๋๋ค.
์ข์ธก์ ๋ฉ๋ด์์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ํด๋ฆญํ๊ณ , ์ํ๋ฅผ ํ์ฑํํฉ๋๋ค.
Redirect URI
์๋ ์์๋ก ์๋์ ๊ฐ์ด ์ค์ ํ์ต๋๋ค.
์ด๋ฒ์๋ ๋์ํญ๋ชฉ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๊ณ , ํ๋จ์ ์นด์นด์คํก ๋ฉ์์ง ์ ์ก์ ์ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ฐ๋จํ๊ฒ ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ ์ ๋๋ก๋ง ํ ์คํธํ ๋ชฉ์ ์ด๋ฏ๋ก, ์๋์ ๊ฐ์ด ์ ํ ๋์๋ฅผ ์ ํํ๊ณ ๋ชฉ์ ์๋ ๊ฐ๋จํ๊ฒ ์์ฑํฉ๋๋ค.
์ข์ธก ๋ฉ๋ด์์ ์นด์นด์ค๋งํฌ๋ฅผ ์ ํํ๊ณ , ๋ฉ์์ง ํ ํ๋ฆฟ ๋น๋ ๋ฐ๋ก๊ฐ๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์๋์ ๊ฐ์ ํ์ด์ง๋ก ์ด๋ํ๋ฉด, ์ข์ธก์ ํ ํ๋ฆฟ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ์๋์ ๋ณด์ด๋ ํ๋ฉด์ ์ด์ ์ ๋ง๋ ํ ํ๋ฆฟ์ ์ค์ ์ ๋๋ค.
์ธ ๊ฐ์ง ์ข ๋ฅ์ ํ ํ๋ฆฟ์ด ๋ณด์ด๋๋ฐ์. ๋ณธ๋ฌธ์์๋ ๊ฐ๋จํ๊ฒ ํ ์คํธ๋ง ์ ์กํ ๊ฒ์ด๋ฏ๋ก ์ ์ผ ์ผ์ชฝ์ FEED ํญ๋ชฉ์ ์ ํํฉ๋๋ค.
์๋์ ๊ฐ์ด ํ ํ๋ฆฟ์ ๊พธ๋ฏธ๋ ์ค์ ์ด ํ์๋ฉ๋๋ค. ์ด๋ฏธ์ง๋ ํ๋กํ, ์ ๋ชฉ๊ณผ ์ค๋ช ๊ทธ๋ฆฌ๊ณ ๋งํฌ ๋ฑ ์ฌ๋ฌ ํญ๋ชฉ์ ์์ธํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์ทจํฅ์ ๋ง๊ฒ ์ค์ ํ๊ณ ๋์ด๊ฐ๋๋ค.
์ด๋ ๊ฒ ์ค์ ๋ ํ ํ๋ฆฟ์ ์ถํ ํ ํ๋ฆฟ ID๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
๋ฐ๋ผ ํ๊ธฐ
1. C# ํ๋ก์ ํธ ์ค์
๋ณธ๋ฌธ์ ์์ ์ฝ๋๋ ExamKakaoTalk
์ด๋ฆ์ Windows Forms ์ฑ ํ๋ก์ ํธ
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๊ฒ(NuGet)
์์ Newtonsoft.Json
๋ฐ RestSharp
์ ์ค์นํฉ๋๋ค.
์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ ์นด์นด์ค API ์์ฒญ์ ์ํ ์ธ์ฆํค, URL ๋ฑ์ ์ ์ํ๊ธฐ ์ํ ํด๋์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ฆ์ DefineKakao.cs
๋ก ์์ฑํฉ๋๋ค.
DefineKakao Class
์๋ ์๋์ ๊ฐ์ด ๋ฌธ์์ด์ ์ ์ํ์ฌ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉ๋ ์์ ์
๋๋ค.
namespace ExamKakaoTalk
{
class DefineKakao
{
public const string API_KEY = "89d43f60892ee4b8ad1f3a8f1501da67"; //์ฌ์ฉ์ ์ธ์ฆํค
public const string TEMPLATE_ID = "44556"; //๋ฉ์์ง ํ
ํ๋ฆฟ ์์ด๋
public const string USER_ID = "528477"; //์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์
์์ด๋
public const string REDIRECT_URL = "https://www.naver.com/oauth"; //Redirect URL
//Login Request URL: https://kauth.kakao.com/oauth/authorize?response_type=code&client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}
public const string LOGIN_URL = "https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=" + API_KEY + "&redirect_uri=" + REDIRECT_URL;
public const string HOST_OAUTH_URL = "https://kauth.kakao.com";
public const string HOST_API_URL = "https://kapi.kakao.com";
public static string USER_TOKEN;
public static string ACCESS_TOKEN;
}
}
2. ์นด์นด์คํก ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ตฌํํ๊ธฐ
๋ณธ๋ฌธ์์ ์นด์นด์คํก ๋ก๊ทธ์ธ ํ์ด์ง๋ ์๋ ์ ๋๋ฉ์ด์ ์ฒ๋ผ ๋ง๋ค ์์ ์ ๋๋ค.
์นด์นด์ค ๋ก๊ทธ์ธ์ ๊ดํ ๊ฐ๋ฐ ๋ฌธ์๋ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค.
developers.kakao.com/docs/latest/ko/kakaologin/rest-api
์นด์นด์ค ๋ก๊ทธ์ธ ๊ตฌํ์ ์ํด์๋ โ ์ธ๊ฐ ์ฝ๋ ๋ฐ๊ธฐ โก ํ ํฐ ๋ฐ๊ธฐ ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค. ์ฆ, ๋จผ์ ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๊ณ , ๊ทธ ์ธ๊ฐ ์ฝ๋๋ก ํ ํฐ์ ์์ฒญํ๋ ๊ฒ์ ๋๋ค.
์ด์ ์ฝ๋๋ฅผ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ์์ ํ๋ก์ ํธ์ ์๋์ ๊ฐ์ด ๋ก๊ทธ์ธ ๋์์ ์ํ ๋ฒํผ์ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์นด์นด๋ก ๊ณ์ ๋ก๊ทธ์ธ ํ๋ฉด์ด ํ์๋๋๋ก ๋ง๋ค ๊ฑด๋ฐ์. ์ด๋ฅผ ์ํด ์๋ก์ด ์ ํผ์ ์ถ๊ฐํฉ๋๋ค.
FormKakaoLogin.cs
์ด๋ฆ์ผ๋ก ์์ฑํฉ๋๋ค.
์์ฑ๋ ํผ
์ webBrowser
์ปจํธ๋กค์ ์ถ๊ฐํฉ๋๋ค. ์ปจํธ๋กค์ ์ด๋ฆ์ webBrowserKakaoLogin
์
๋๋ค.
FormKakaoLogin
์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
using RestSharp;
using Newtonsoft.Json.Linq;
namespace ExamKakaoTalk
{
public partial class FormKakaoLogin : Form
{
public FormKakaoLogin()
{
InitializeComponent();
webBrowserKakaoLogin.Navigate(DefineKakao.LOGIN_URL);
}
private void webBrowserKakaoLogin_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string code = getCode();
if (code != "")
{
DefineKakao.USER_CODE = code;
DefineKakao.ACCESS_TOKEN = getToken();
this.DialogResult = DialogResult.OK;
this.Close();
}
}
//์ธ๊ฐ ์ฝ๋ ์์ฒญํ๊ธฐ
public string getCode()
{
string url = webBrowserKakaoLogin.Url.ToString();
string token = url.Substring(url.IndexOf("=") + 1);
//์ฌ์ฉ์๊ฐ '๋์ํ๊ณ ๊ณ์ํ๊ธฐ' ์ ํ, ๋ก๊ทธ์ธ ์งํ ์ ์๋ต ํํ:
//{REDIRECT_URI}?code={AUTHORIZE_CODE}
if (url.CompareTo(DefineKakao.REDIRECT_URL + "?code=" + token) == 0)
{
return token;
}
else
{
return "";
}
}
//ํ ํฐ ์์ฒญํ๊ธฐ
public string getToken()
{
var client = new RestClient(DefineKakao.HOST_OAUTH_URL);
var request = new RestRequest("/oauth/token", Method.POST);
request.AddParameter("grant_type", "authorization_code");
request.AddParameter("client_id", DefineKakao.API_KEY);
request.AddParameter("redirect_uri", DefineKakao.REDIRECT_URL);
request.AddParameter("code", DefineKakao.USER_CODE);
var result = client.Execute(request);
var json = JObject.Parse(result.Content);
return json["access_token"].ToString();
}
}
}
์ธ๊ฐ ์ฝ๋๋ฅผ ์ป๊ธฐ ์ํด์ ์๋ ๋ฌธ์์ ๊ฐ์ด Request
ํํ๋ก ํธ์ถํ๋ฉด {REDIRECT_URI}?code={AUTHORIZE_CODE}
ํํ๋ก ์๋ต์ด ์ต๋๋ค. ํด๋น ์๋ต ๋ฌธ์์ด์์ {AUTHORIZE_CODE}
๋ฅผ ์ถ์ถํ๋ฉด ๋๊ฒ ์ต๋๋ค. ์ด๋ฌํ ๋์์ด getCode()
์์ ์ด๋ฃจ์ด์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ํฐ์ ์ป๊ธฐ ์ํด์๋ ์๋ ๋ฌธ์์ฒ๋ผ ์์ฒญํ๊ณ , ์๋ต๋ฐ์ JSON ๋ฐ์ดํฐ
๋ฅผ ํ์ฑ ํ์ฌ access_token
์ ์ป์ ์ ์์ต๋๋ค.
๋ฉ์ธ Form์ ๋ฒํผ ์ด๋ฒคํธ๋ ์๋์ ๊ฐ์ด ๊ตฌํํฉ๋๋ค.
private void buttonLogInOut_Click(object sender, EventArgs e)
{
if (buttonLogInOut.Text == "๋ก๊ทธ์ธ")
{
//์นด์นด์ค ๋ก๊ทธ์ธ ํ์ด์ง ํผ ์์ฑํ๊ธฐ
FormKakaoLogin form = new FormKakaoLogin();
if (form.ShowDialog() == DialogResult.OK)
{
buttonLogInOut.Text = "๋ก๊ทธ์์";
}
}
else
{
var client = new RestClient(DefineKakao.HOST_API_URL);
//๋ก๊ทธ์์ ์์ฒญํ๊ธฐ
var request = new RestRequest("/v1/user/unlink", Method.POST);
request.AddHeader("Authorization", "bearer " + DefineKakao.ACCESS_TOKEN);
if (client.Execute(request).IsSuccessful)
{
buttonLogInOut.Text = "๋ก๊ทธ์ธ";
}
}
}
๋ก๊ทธ์ธ ๋์์์๋ ์์์ ์ค๋ช
ํ FormKakaoLogin
์ ๋์์ด ์ด๋ค์ง๊ณ , ๋ก๊ทธ์์ ๋์์์๋ ์๋์ ๋ก๊ทธ์์ ์์ฒญ๋๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ๊ตฌํํ๊ณ ํ๋ก๊ทธ๋จ์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ ์ด๋ฏธ์ง์ UI์ ์ง๊ธ๊น์ง ์ค๋ช ํ UI์ ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ต๋๋ค. ์ถํ ๊ณ์ ์ค๋ช ํ๋ฉด์ ์ถ๊ฐํ ์์ ์ด๋ ๊ฑฑ์ ํ์ง ์์ผ์ ๋ ๋๊ฒ ์ต๋๋ค. ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
FormKakaoLogin Form
์ด ์์ฑ๋ฉ๋๋ค. ๊ณ์ ์ ๋ณด๋ฅผ ์
๋ ฅํ๊ณ ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์๋น์ค ์ ๊ทผ ๊ถํ ์ธ์ฆ ํ๋ฉด์ด ํ์๋ฉ๋๋ค. ์ ์ฒด ๋์ํ๊ธฐ ๋๋ ์นด์นด์คํก ๋ฉ์์ง ์ ์ก์ ์ฒดํฌํ๊ณ ๋์ํ๊ณ ๊ณ์ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฌด๋ฆฌ ๋ง์ฐ์ค๋ก ํด๋ฆญํด๋ ๊ณ์ ํ์ ์์์ผ๋ก ํ์๋ ๊ฒ์
๋๋ค. ์ด๋ WinForm WebBrowser ์ปจํธ๋กค์ IE ๋ฒ์ ์ด ๋๋ฌด ๋ฎ์์ ๊ทธ๋ ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ ์ง์คํธ๋ฆฌ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค. ๋ณธ๋ฌธ์ ์ฒจ๋ถ๋ ์ฝ๋์์ SetIE11KeyforWebBrowserControl()
์ IE11๋ก ๋์ํ๋๋ก ๋ ์ง์คํธ๋ฆฌ ๋ณ๊ฒฝ ์ฝ๋๊ฐ ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ํ, ๋ ์ง์คํธ๋ฆฌ ๋ณ๊ฒฝ์ ์ํด์๋ Visual Studio๋ฅผ ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํํด์ผ ํ๋ ์ ์ ์ฃผ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ ์ง์คํธ๋ฆฌ ๋ณ๊ฒฝ ํ ๋ค์ ์๋ํ๋ฉด ์๋์ ๊ฐ์ด ์ ์์ ์ผ๋ก ์ฒดํฌ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
3. ๋์๊ฒ ๊ธฐ๋ณธ ๋ฉ์์ง / ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง(ํ ํ๋ฆฟ) ์ ์กํ๊ธฐ
๊ธฐ๋ณธ ๋ฉ์์ง์ ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ฉด ์๋์ ๊ฐ์ด ๋ฉ์์ง๊ฐ ๋ณด๋ด์ง๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ์์ ๋ฉ์์ง ํ ํ๋ฆฟ ๋ง๋ค๊ธฐ์์ ์ค์ ํ ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค.
๋ฉ์์ง ๋ณด๋ด๊ธฐ์ ๊ดํ ๊ฐ๋ฐ ๋ฌธ์๋ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค.
developers.kakao.com/docs/latest/ko/message/rest-api
์ด์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ๋ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ UI๋ฅผ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํฉ๋๋ค.
์ ์ก ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ ํ๋ ๋ผ๋์ค ๋ฒํผ์ ๋ฐ๋ผ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
private void buttonSendMessage_Click(object sender, EventArgs e)
{
if (radioButtonCustom.Checked == true) //์ฌ์ฉ์ ์ ์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ
{
sendMessageToMyself(textBoxMessage.Text);
textBoxMessage.Text = "";
}
else //ํ
ํ๋ฆฟ ๋ฉ์์ง ๋ณด๋ด๊ธฐ
sendTemplateMessageToMyself();
}
๊ทธ๋ผ ๋์๊ฒ ๊ธฐ๋ณธ ๋ฉ์์ง ๋ณด๋ด๊ธฐ๋ถํฐ ์์ธํ๊ฒ ๋ณด๊ฒ ์ต๋๋ค. ๋ณธ๋ฌธ์ ๊ธฐ๋ณธ ๋ฉ์์ง๋ ํ ์คํธ ํ์ ์ผ๋ก ๋ณด๋ ๋๋ค. ํ ์คํธ ํ์ ์ ์์ฒญ์ ์๋์ ๊ฐ์ต๋๋ค.
JSON ์ค๋ธ์ ํธ๋ฅผ ์๋์ ๊ฐ์ด ์์ฒญํ๋ฉด ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค.
๊ธฐ๋ณธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ฝ๋๋ sendMessagetoMyself()
์ ๊ตฌํ๋์ด ์์ต๋๋ค.
private void sendMessageToMyself(string message)
{
//JSON ๊ตฌ์ฑ
JObject send = new JObject();
JObject link = new JObject();
send.Add("object_type", "text");
send.Add("text", message);
link.Add("web_url", "https://developers.kakao.com");
link.Add("mobile_web_url", "https://developers.kakao.com");
send.Add("link", link);
send.Add("button_title", "๋งํฌ ์ด๋");
//์์ฒญ
var client = new RestClient(DefineKakao.HOST_API_URL);
var request = new RestRequest("/v2/api/talk/memo/default/send", Method.POST);
request.AddHeader("Authorization", "bearer " + DefineKakao.ACCESS_TOKEN);
request.AddParameter("template_object", send);
if (client.Execute(request).IsSuccessful)
MessageBox.Show("๋ฉ์์ง ์ ์ก ์ฑ๊ณต!");
else
MessageBox.Show("๋ฉ์์ง ์ ์ก ์คํจ!");
}
์ฌ์ฉ์ ์ ์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ๋ ๋์ฑ ์ฌํํฉ๋๋ค.
์๋์ ๊ฐ์ด template_id
๋ง ๊ตฌ์ฑํ์ฌ ์์ฒญํ๋ฉด, ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ํ
ํ๋ฆฟ ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ฝ๋๋ sendTemplateMessageToMyself()
์ ๊ตฌํ๋์ด ์์ต๋๋ค.
public void sendTemplateMessageToMyself()
{
var client = new RestClient(DefineKakao.HOST_API_URL);
var request = new RestRequest("/v2/api/talk/memo/send", Method.POST);
request.AddHeader("Authorization", "bearer " + DefineKakao.ACCESS_TOKEN);
request.AddParameter("template_id", DefineKakao.TEMPLATE_ID);
if (client.Execute(request).IsSuccessful)
MessageBox.Show("๋ฉ์์ง ๋ณด๋ด๊ธฐ ์ฑ๊ณต");
else
MessageBox.Show("๋ฉ์์ง ๋ณด๋ด๊ธฐ ์คํจ");
}
๊ฒฐ๋ก
๋ณธ๋ฌธ์์ ์๊ฐํ ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ๋ ์นด์นด์ค ์คํ API์ ์์ฃผ ์ผ๋ถ๋ถ์ผ ๋ฟ์ ๋๋ค. ์ด ์ธ์๋ ์นด์นด์คํก ์์ , ์คํ ๋ฆฌ, ์ฑ๋, ์ฑํฌ, ํ์ด ๋ฑ ์ ๋ง ๋ค์ํ ๋ถ์ผ์ API๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ํ๋๋ผ๋ ํ ์ค๋ง ์๋ค๋ฉด, ๋ค๋ฅธ ๊ฒ๋ ๊ฐ๋ฐํ๋๋ฐ ์ ํ ๋ฌธ์ ๊ฐ ์์ผ๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค.
๋ณธ๋ฌธ์ ์์ ์ฝ๋๋ ์๋ ์ฒจ๋ถ๋ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ - ํฌ๋ ์จ ํ๋ฌ์ค ์ค๋น ๋จ๊ณ
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ - ํฌ๋ ์จ ํ๋ฌ์ค ์ค๋น ๋จ๊ณ
2021.04.12 -
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
2021.04.09 -
[.Net] ๊ณต๊ณต๋ฐ์ดํฐํฌํธ API ์ฌ์ฉํ์ฌ C#์์ ์ค์๊ฐ ๋ฒ์ค ์์น ์กฐํํ๊ธฐ(์์ ํฌํจ)
[.Net] ๊ณต๊ณต๋ฐ์ดํฐํฌํธ API ์ฌ์ฉํ์ฌ C#์์ ์ค์๊ฐ ๋ฒ์ค ์์น ์กฐํํ๊ธฐ(์์ ํฌํจ)
2021.03.20 -
[.Net] C#์์ ๋ค์ด๋ฒ ๋ด์ค REST API๋ก ์ํ๋ ๋ด์ค๋ง ์์งํ๊ธฐ (์์ ํฌํจ)
[.Net] C#์์ ๋ค์ด๋ฒ ๋ด์ค REST API๋ก ์ํ๋ ๋ด์ค๋ง ์์งํ๊ธฐ (์์ ํฌํจ)
2021.03.18