2016년 7월 22일 금요일

카카오api 나에게 보내기 (REST API) classic asp

카카오api 주소 (https://developers.kakao.com/)

예제 소스는 classic asp로 구현했습니다.

나에게 보내기Copy URL

카카오톡 나에게 보내기는 사용자 중에서 카카오계정에 연결한 카카오톡 사용자에 한해 카카오톡 나와의 챗팅방으로 메시지를 보낼 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.
(https://developers.kakao.com/docs/restapi#카카오톡-나에게-보내기)


1. 카카오 개발자 등록
https://accounts.kakao.com/login?continue=https://developers.kakao.com/login



2. 내 애플리케이션 추가작업



3. 사용자관리 설정


일반을 클릭하면 rest api 키를 얻을수 있습니다. 밑에 소스에서 client_id 변수에 이 값을 넣어주셔야됩니다.


4. 템플릿 추가


5. restapi key 확인 및 도메인 등록
내어플리케이션 >  설정 > 일반 > REST API 키 확인, 사이트 도메인 등록, path 등록




6. 로그인 처리
https://developers.kakao.com/docs/restapi#사용자-관리-로그인

ex>
https://kauth.kakao.com/oauth/authorize?client_id={client_id}&redirect_uri={등록한 path}&response_type=code


7. 토큰받기 처리 및 나에게 메시지 전송
등록한 path 페이지에서 code라는 request 값을 받는다.
받은 code값을 이용하여 token 값을 요청




[aaa.asp 페이지]



'async 함수
Function postFormData(url, headerArr, data) Dim xhr, i Set xhr = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xhr.open "POST", url, false for i = 0 to ubound(headerArr) xhr.setRequestHeader headerArr(i)(0), headerArr(i)(1) next xhr.send data If (xhr.Status = 200) then postFormData = xhr.ResponseText response.write postFormData Else Err.Raise 1001, "postFormData", "Post to " & url & " failed with " & xhr.Status&" message "&xhr.responseText End If End Function


 client_id = "38c9*********************8" 
 url = "https://주소.co.kr/index22.asp"
        code = request("code")

  '토큰 요청 값 받기 
  '최초 요청을 보냈을시 access_token, refresh_token
  set tokenObj = JSON.parse(
                  postFormData("https://kauth.kakao.com/oauth/token", 
                  array(array("Content-Type","application/x-www-form-urlencoded")),
                  "grant_type=authorization_code&client_id="&client_id&"&redirect_uri="&url&"&code="&code))
  
  access_token = tokenObj.access_token  
  refresh_token = tokenObj.refresh_token

  'refresh token 요청 값 받기  
  'refresh_token은 기본 12시간~24시간이 아닌 더 긴 시간을 유지할수 있는 token임 
  set refreshTokenObj = JSON.parse(
                        postFormData("https://kauth.kakao.com/oauth/token",
                        array(array("Content-Type","application/x-www-form-urlencoded")),
                        "grant_type=refresh_token&client_id="&client_id&"&redirect_uri="&url&"&refresh_token="&refresh_token))

  'refresh token 요청시 access_token만 넘어옴 
  access_token = refreshTokenObj.access_token

  'access_token 값을 이용하여 message 보내기
  response.write postFormData("https://kapi.kakao.com/v1/api/talk/memo/send?template_id=828&args="&
                 Server.URLEncode("{""${message}"":""테스트적용완료"",""${subject}"":""적용완료""}"),
                 array(array("Authorization", "Bearer "& access_token)),"")





위와 같이 나에게 메시지가 옴 


- 나에게 보낸다는 서비스이기때문에 광범위하게 사용하기에 제약사항이 좀 있습니다. 
구현하시서 생각해보시길..

댓글 6개:

  1. 안녕하세요. 해당 블로그 보고 카카오톡 나에게 보내기 기능을 PHP로 사용 해보려고 하는 사람입니다. 적어주신 예시대로 진행하여 [ 'access_token 값을 이용하여 message 보내기 ] 여기 단계까지 진행했는데, 메시지를 보내려고하니 [{"code":-501,"msg":"given account is not connected to any talk user."} ] 라는 에러가 나오는데 혹시 해결책을 알 수있을지 여쭤보려고합니다. 감사합니다.

    답글삭제
    답글
    1. 제가 빼먹고 이미치 추가를 안한 항목이 있습니다
      "3. 사용자관리 설정" 두번째 이미지 보시면 rest api client_id를 받아오실수 있습니다.
      여기서 얻은 client_id를 최초 토큰 받아올때부터 사용해서 받아와야됩니다.


      https://developers.kakao.com/docs/restapi#간편한-참조-응답-코드
      이 안에 501 코드 살펴보면
      "카카오톡 미가입 사용자가 카카오톡 API를 호출 하였을 경우"라고 나옵니다.

      'access_token 값을 이용하여 message 보내기 이 전에 access_token을 받아오는데 이것은 제대로 받아오는지도 확인해주세요.

      삭제
  2. 안녕하세요. 저도 나에게 보내기 개발하려고 하는데요.
    PHP 로 개발해도 ASP 와 동일하게 진행 하면 될까요?
    감사합니다.

    답글삭제
  3. index22.asp에는 어떤내용이 들어가나요?

    답글삭제