티스토리 뷰
반응형
<?php //공통 : Config
$REST_API_KEY = "발급받은 키"; // 내 애플리케이션 > 앱 설정 > 요약 정보
$CLIENT_SECRET = "발급받은 키"; // 내 애플리케이션 > 제품 설정 > 카카오 로그인 > 보안
$REDIRECT_URI = urlencode("http://<자신의웹사이트 주소>/kakao_rest_api_example.php");
?>
<?php //공통 : API Call Function
function Call($callUrl, $method, $headers = array(), $data = array(), $returnType="jsonObject")
{
echo "<pre>".$callUrl."</pre>";
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $callUrl);
if ($method == "POST") {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
} else {
curl_setopt($ch, CURLOPT_POST, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "<pre>".$status_code.":".$response."</pre>";
if ($returnType=="jsonObject") return json_decode($response);
else return $response;
} catch (Exception $e) {
echo $e;
}
}
?>
<h1>1. 카카오 로그인 및 프로필 조회 예제</h1>
<pre>
- [KOE101, KOE004] 내 애플리케이션>제품 설정>카카오 로그인 > 활성화 설정 : ON
- [KOE006] 내 애플리케이션>제품 설정>카카오 로그인 > Redirect URI : http://<자신의웹사이트 주소>/kakao_rest_api_example.php
</pre>
<a href="https://kauth.kakao.com/oauth/authorize?client_id=<?=$REST_API_KEY?>&response_type=code&redirect_uri=<?=$REDIRECT_URI?>"><img src="//k.kakaocdn.net/14/dn/btqCn0WEmI3/nijroPfbpCa4at5EIsjyf0/o.jpg" width="222" /></a>
<?php
if (!isset($_GET["code"])) die(); //code 받기 전이면 수행 안함
function getToken($REST_API_KEY, $REDIRECT_URI, $CLIENT_SECRET) //로그인 : 토큰 조회
{
$code = $_GET["code"]; //Redirect URI로 돌아올 때, 받아온 파라메터
$callUrl = "https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=".$REST_API_KEY."&redirect_uri=".$REDIRECT_URI."&code=".$code."&client_secret=".$CLIENT_SECRET;
$res = Call($callUrl, "POST");
if($res->error_code == "KOE320") die("[KOE320] code 받은 후, 새로고침하면 code 재사용 불가 에러 : 다시 로그인 시도 할 것");
return $res;
}
function getProfile($ACCESS_TOKEN) //로그인 : 플로필 조회
{
$callUrl = "https://kapi.kakao.com/v2/user/me";
$headers[] = "Authorization: Bearer ".$ACCESS_TOKEN;
$res = Call($callUrl, "POST", $headers);
if($res->properties == "") die("내 애플리케이션>제품 설정>카카오 로그인> 동의항목 : profile 필수 설정");
return $res;
}
?>
<?php
$ACCESS_TOKEN = getToken($REST_API_KEY, $REDIRECT_URI, $CLIENT_SECRET)->access_token; // 토큰 조회 및 토큰 저장
?>
<?php
getProfile($ACCESS_TOKEN); // 프로필 조회
?>
<h1>2. 카카오 친구목록 조회 및 카카오톡 메시지 예제</h1>
<pre>
* 로그인한 사용자의 전체 친구 목록을 표시하고 선택한 후, 발송하는 방식은 카카오 링크 참조 (REST API 불가)
* 친구에게 테스트 메시지 발송을 위해서는 "내 애플리케이션>앱 설정>팀 관리"에 카톡친구를 등록해야함.
* 친구 API, 메시지 API는 카톡 친구이며 발신자, 수신자 모두 앱에 로그인하여 <font color="red">권한 동의</font>한 경우만 사용 가능
- [KOE205] 내 애플리케이션>제품 설정>카카오 로그인> 동의항목 : friends,talk_message 선택 동의 or 이용 중 동의 설정
</pre>
<a href="https://kauth.kakao.com/oauth/authorize?client_id=<?=$REST_API_KEY?>&response_type=code&redirect_uri=<?=$REDIRECT_URI?>&scope=friends,talk_message" class="btn btn-primary"><h2>친구목록 조회와 메세지 발송 권한 획득</h2></a>
<?php
function sendMessage($ACCESS_TOKEN, $data)
{
$callUrl = "https://kapi.kakao.com/v2/api/talk/memo/default/send";
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
return Call($callUrl, "POST", $headers, $data);
}
function sendScrap($ACCESS_TOKEN, $request_url)
{
$callUrl = "https://kapi.kakao.com/v2/api/talk/memo/scrap/send";
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$data = 'request_url='.urlencode($request_url);
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
return Call($callUrl, "POST", $headers, $data);
}
function sendCustomTemplate($ACCESS_TOKEN, $template_id)
{
$callUrl = "https://kapi.kakao.com/v2/api/talk/memo/send?template_id=".$template_id;
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
return Call($callUrl, "POST", $headers);
}
function getFriendsList($ACCESS_TOKEN)
{
$callUrl = "https://kapi.kakao.com/v1/api/talk/friends";
$headers = array();
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
return Call($callUrl, "GET", $headers);
}
function sendMessageForFriend($ACCESS_TOKEN, $receiver_uuids, $template)
{
$callUrl = "https://kapi.kakao.com/v1/api/talk/friends/message/default/send";
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
$data = $template."&receiver_uuids=".json_encode($receiver_uuids);
return Call($callUrl, "POST", $headers, $data);
}
function sendScrapForFriend($ACCESS_TOKEN, $receiver_uuids, $request_url)
{
$callUrl = "https://kapi.kakao.com/v1/api/talk/friends/message/scrap/send";
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
$data = 'request_url='.urlencode($request_url)."&receiver_uuids=".json_encode($receiver_uuids);
return Call($callUrl, "POST", $headers, $data);
}
function sendCustomTemplateForFriend($ACCESS_TOKEN, $receiver_uuids, $template_id)
{
$callUrl = "https://kapi.kakao.com/v1/api/talk/friends/message/send?template_id=".$template_id;
$headers = array('Content-type:application/x-www-form-urlencoded;charset=utf-8');
$headers[] = "Authorization: Bearer " . $ACCESS_TOKEN;
$data = "receiver_uuids=".json_encode($receiver_uuids);
return Call($callUrl, "POST", $headers, $data);
}
?>
<?php
// "image_url": "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
$data_feed = 'template_object={
"object_type": "feed",
"content": {
"title": "미래기업 카톡메시지",
"description": "월요일입니다. 금일부터 마스크 일부 해제입니다. \n 이젠 카톡메시지 역시 미래기업.",
"image_url": "http://<자신의웹사이트 주소>/img/200.jpg",
"image_width": 640,"image_height": 640,
"link": {"web_url": "http://<자신의웹사이트 주소>","mobile_web_url": "http://<자신의웹사이트 주소>"}
},
"social": {"like_count": 100,"comment_count": 100,"shared_count": 100},
"buttons": [
{
"title": "(주)미래기업 카톡",
"link": {"web_url": "http://<자신의웹사이트 주소>","mobile_web_url": "http://<자신의웹사이트 주소>"}
}
]
}';
// 로그인 승인되면 바로 메시지 보내는 것 중지 아래 명령어
// sendMessage($ACCESS_TOKEN, $data_feed);
// sendScrap($ACCESS_TOKEN,"http://<자신의웹사이트 주소>"); //도메인에 등록된 주소 설정 시, 스크랩서버가 접근하여 수집한 미리보기 내용(og태그)을 메시지에 표시함.
//sendCustomTemplate($ACCESS_TOKEN,"88645"); //도구 > 메시지 템플릿에서 템플릿 등록 필수
$res = getFriendsList($ACCESS_TOKEN);
var_dump($res);
$receiver_uuids = array();
foreach ($res->elements as $obj)
{
echo $obj->profile_nickname;
if($obj->profile_nickname!="미래 안현섭차장") // 안현섭 차장이 아닐경우 메시지 보내기
$receiver_uuids[] = $obj->uuid;
}
echo "카톡 친구 : " . count($receiver_uuids) ;
// 카톡친구 수가 0보다 크면 count($receiver_uuids[]
if(count($receiver_uuids)>0)
sendMessageForFriend($ACCESS_TOKEN, $receiver_uuids, $data_feed);
// sendScrapForFriend($ACCESS_TOKEN, $receiver_uuids,"http://<자신의웹사이트 주소>"); //도메인에 등록된 주소 설정 시, 스크랩서버가 접근하여 수집한 미리보기 내용(og태그)을 메시지에 표시함.
// sendCustomTemplateForFriend($ACCESS_TOKEN, $obj->uuid,"88645"); //도구 > 메시지 템플릿에서 템플릿 등록 필수
?>
회사에서 카카오톡으로 직원들에게 메시지를 보낼일이 많을때....
카톡으로 메시지를 웹에서 보낼 수 없을까 싶어서 카카오톡 개발자웹사이트를 통해 배우고 있습니다.
설명이 메뉴얼 형식으로 되어있어도 역시 다 그 오류 하나하나를 담을 수 없는 것이 개발영역이란 확신이 드네요.
차근차근 메뉴얼대로 했지만, 사실 삽질이 상당하긴 하네요.
제반지식이 아직 많이 부족한 것도 있으리라 짐작은 되지만...
직접 주어진 코드를 받아서 수정하면서 작성한 소스코드,
개발언어 PHP
[팀원 가입] 시켜서 초대하고 해도 되는 사람이 있고 안되는 사람이 있고....
처음에 애를 많이 먹었습니다.
문제점 : 3명의 팀원중 한명만 불러와지는 현상...
이런 경우는 이렇게 해보세요.
팀멤버로 등록한 카톡친구 역시, 만드신 서비스에 로그인하고 권한동의 해야 목록에 표시가됩니다.
이후, 친구 API권한 신청하셔서 승인받으셔도 반드시 카톡 친구가 만드신 서비스에 로그인하고 권한동의 해야 목록에 표시되는 것은 동일합니다.
팀원으로 된 사람들도
카카오로그인-동의항목-카카오 서비스내 친구목록(즐겨찾기 친구포함) 을 "이용 중 동의"로 설정
반드시 해야 된다는 것입니다.
이걸 몰라서 더 해맸던 것 같아요~
여러분 힘내세요~
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 엑셀보호
- #웹개발
- #트리구조
- 엑셀셀보호
- #데이터베이스설계
- json파일형태보기
- 오토핫키가이드
- #php에러해결 #php경고메시지 #nonwellformednumeric #php초보자팁 #웹개발에러 #프로그래밍디버깅 #php정규식 #코드디버깅팁 #웹개발문제해결 #php숫자형변환
- Bootstrap 5
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 구글드라이브API
- json파일편하게보는법
- 효율적코딩방법
- #tuigrid #자바스크립트그리드 #행삽입 #행삭제 #웹개발팁 #프론트엔드개발 #javascriptgrid #데이터테이블 #ui개선 #그리드커스터마이징
- #계층형데이터
- General error: 2031
- 웹제작강의안2주차
- 자바스크립트 코드 기본지식
- #데이터무결성
- ajax오류메시지
- 캐드자동작도
- #textarea #자동높이조절 #ux개선 #웹개발 #프론트엔드 #자바스크립트 #html팁 #웹디자인 #uiux #코딩팁
- isset을 적용해야 하는 이유
- 도면자동생성
- 엑셀입력보호
- 오블완
- 티스토리챌린지
- #카테고리트리
- #동적ui
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함