php에서 링크 정보 얻어 카카오스토리에 포스팅하려면 어떻게 하면 되나요?

/oauth/token API를 통해서 access token을 발급 받은 후에 [YOUR_ACCESS_TOKEN] 부분을 발급받은 access token으로 변경하고 나면 포스팅이 됩니다.

  • 테스트 하기 전에 앱 설정을 들어가서 사이트 도메인 목록에 도메인(혹은 아이피주소)을 등록해야 합니다.
<?php

  header("Content-Type: text/html; charset=UTF-8");

  /**
   * 스크랩 정보 요청 및 포스팅하기 샘플
   */

  $API_HOST      = 'https://kapi.kakao.com';
  $LINK_INFO_URL = '/v1/api/story/linkinfo';
  $POST_LINK_URL = '/v1/api/story/post/link';

  // header 정보
  $headers = array(
    'Authorization: Bearer [YOUR_ACCESS_TOKEN]',
    'Content-type: application/x-www-form-urlencoded;charset=utf-8'
  );

  // 1. 링크정보 요청
  $params = array('url'=> 'https://developers.kakao.com');
  $linkInfoContent = request($API_HOST.$LINK_INFO_URL, $headers, $params);
  echo 'LinkInfo Result > '.$linkInfoContent;

  // 2. 링크 포스팅
  $params = array(
    // required
    'link_info' => $linkInfoContent,

    // optional
    'content' => '더 나은 세상을 꿈꾸고 그것을 현실로 만드는 카카오디벨로퍼스',
    'permission' => 'A',
    'enable_share' => 'false',
    'android_exec_param' => '',
    'ios_exec_param' => '',
    'android_market_param' => '',
    'ios_market_param' => ''
  );
  $linkPostResult = request($API_HOST.$POST_LINK_URL, $headers, $params, true);
  echo '<br>Post Link Result > '.$linkPostResult;

  // request helper
  function request($url, $headers, $params, $isPostMethod=false) {
    $opts = array(
     CURLOPT_RETURNTRANSFER => true,
     CURLOPT_HEADER => false,
     CURLOPT_HTTPHEADER => $headers,
     CURLOPT_SSL_VERIFYPEER => false,
     CURLOPT_SSLVERSION => 1 // TLS
    );

    if ($isPostMethod) {
      $opts[CURLOPT_URL] = $url;
      $opts[CURLOPT_POST] = true;
      if (!empty($params)) {
        $opts[CURLOPT_POSTFIELDS] = http_build_query($params);
      }
    } else {
      $url .= '?';
      if (!empty($params)) {
        $url .= http_build_query($params);
      }
      $opts[CURLOPT_URL] = $url;
    }

    $curlSession = curl_init();
    curl_setopt_array($curlSession, $opts);

    $result = curl_exec($curlSession);

    if ($result === false) {
      $error = curl_error($curlSession);
      curl_close($curlSession);
      return $error;
    }

    // for debug
    //print_r(curl_getinfo($curlSession));

    curl_close($curlSession);

    return $result;
  }
?>