Skip to content

Instantly share code, notes, and snippets.

@upsilon
Last active March 6, 2017 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save upsilon/9a3ad8fb319276519ef90abe5f472235 to your computer and use it in GitHub Desktop.
Save upsilon/9a3ad8fb319276519ef90abe5f472235 to your computer and use it in GitHub Desktop.
opWebAPIPlugin でメンバーID 1 のプロフィールを取得するサンプル
<?php
// https://oauth.googlecode.com/svn/code/php/OAuth.php を使用する
require_once __DIR__.'/OAuth.php';
define('BASE_URL', 'http://sns.example.com');
// http://sns.example.com/pc_backend.php/connection/new で取得できる
define('CONSUMER_KEY', '8LJ75AjDVF6t0Seh');
define('CONSUMER_SECRET', '5HIahbSn3Dh_-Cb#aQ7?b_D3JzgyfmG#');
// 設定ここまで
function execRequest(OAuthRequest $request)
{
$curl = curl_init();
if ($request->get_normalized_http_method() === 'GET')
{
curl_setopt($curl, CURLOPT_URL, $request->to_url());
}
else
{
curl_setopt($curl, CURLOPT_URL, $request->get_normalized_http_url());
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request->to_postdata());
}
curl_setopt($curl, CURLOPT_HTTPHEADER, array($request->to_header()));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$responseText = curl_exec($curl);
curl_close($curl);
return $responseText;
}
function fetchOAuthToken($url, OAuthToken $requestToken = null, array $params = array())
{
global $consumer, $signatureMethod;
$request = OAuthRequest::from_consumer_and_token($consumer, $requestToken, 'POST', $url, $params);
$request->sign_request($signatureMethod, $consumer, $requestToken);
$responseText = execRequest($request);
parse_str($responseText, $responseArray);
return new OAuthToken($responseArray['oauth_token'], $responseArray['oauth_token_secret']);
}
$consumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
$signatureMethod = new OAuthSignatureMethod_HMAC_SHA1();
$requestTokenUrl = BASE_URL.'/pc_backend.php/oauth/request_token';
$requestToken = fetchOAuthToken($requestTokenUrl, null, array('oauth_callback' => 'oob'));
$authorizeUrl = BASE_URL.'/pc_backend.php/oauth/authorize?oauth_token='.$requestToken->key;
echo "Authorize URL: ${authorizeUrl}\n";
echo 'PIN Code > ';
$input = rtrim(fgets(STDIN), "\n");
// https://redmine.openpne.jp/issues/3232 のバグが修正済みである必要がある
$accessTokenUrl = BASE_URL.'/pc_backend.php/oauth/access_token';
$accessToken = fetchOAuthToken($accessTokenUrl, $requestToken, array('oauth_verifier' => $input));
$memberFeedUrl = BASE_URL.'/api.php/feeds/member/1';
$request = OAuthRequest::from_consumer_and_token($consumer, $accessToken, 'GET', $memberFeedUrl, array('token_type' => 'admin'));
$request->sign_request($signatureMethod, $consumer, $accessToken);
echo execRequest($request);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment