이 작업을 수행하는 방법을 알아내는 데 도움이되도록 다른 답변으로 추가하십시오. 기본적으로 내 의견에서 언급했듯이 OAuth1을 사용하려는 경우 OAuth1을 사용자 계정과 연결해야합니다.
먼저 CURL을 사용하여 WordPress의 사용자 이름 비밀번호로 사이트에 로그인하고 쿠키를 저장하여 OAuth에 대한 CURL 호출에서 사용할 수 있도록하십시오 (쿠키를 포함하도록 CURL 호출을 업데이트하십시오).
/programming/724107/wordpress-autologin-using-curl-or-fsockopen-in-php
그런 다음 클라이언트 ID와 클라이언트 시크릿이있는 CURL을 사용하여 OAuth를 호출하여 임시 oauth 토큰과 시크릿 (요청 토큰)을 얻습니다.
이 통화 (및 액세스 토큰을 얻기위한 통화)를하려면 CURL 통화를 올바르게 설정해야합니다. 코드 및 참조는이 답변의 끝 부분을 참조하십시오.
임시 oauth 토큰과 비밀 (요청 토큰)을 얻은 후 사이트의이 URL에 대해 CURL POST 호출을 작성하십시오.
http://website.com/oauth1/authorize
그런 다음 권한 부여 페이지에 대해 리턴 된 HTML에서 모든 값을 가져 와서 양식 조치 URL에 자체 POST를 제출해야합니다.
/programming/35363815/how-to-get-a-value-input-from-html-returned-of-curl
특히 "권한 부여"POST를 완료하려면 POST 데이터에 이러한 정보를 포함해야합니다. http://domain.com/wp-login.php?action=oauth1_authorize
_wpnonce
-제출할 양식의 nonce 값입니다. HTML 입력에서 가져 와서 POST와 함께 제출해야합니다.
consumer
-HTML에서 숨겨진 입력입니다 (이것은 게시물 ID에 대한 참조이므로 HTML 입력에서 가져와야합니다)
oauth_token
-이것은 HTML에서 숨겨진 입력입니다 (그러나 이미 가지고 있어야합니다)
wp-submit
-이 값으로 설정해야합니다 authorize
인증 페이지 용으로 생성 된 HTML 예제는 다음과 같습니다.
<form name="oauth1_authorize_form" id="oauth1_authorize_form" action="http://website.com/wp-login.php?action=oauth1_authorize" method="post">
<h2 class="login-title">Connect My Auth</h2>
<div class="login-info">
<p>Howdy <strong>admin</strong>,<br/> "My OAuth Demo" would like to connect to Example Site.</p>
</div>
<input type="hidden" name="consumer" value="5428" /><input type="hidden" name="oauth_token" value="i1scugFXyPENniCP4kABKtGb" /><input type="hidden" id="_wpnonce" name="_wpnonce" value="ca9b267b4f" /><input type="hidden" name="_wp_http_referer" value="/wp-login.php?action=oauth1_authorize&oauth_consumer_key=TUPFNj1ZTd8u&oauth_token=i1scugFXyPENniCP4kABKtGb&oauth_token_secret=gzqW47pHG0tilFm9WT7lUgLoqN2YqS6tFFjUEiQoMgcmG2ic" /> <p class="submit">
<button type="submit" name="wp-submit" value="authorize" class="button button-primary button-large">Authorize</button>
<button type="submit" name="wp-submit" value="cancel" class="button button-large">Cancel</button>
</p>
</form>
이러한 모든 값 / 데이터로 POST를 만든 후에는 인증 코드와 함께 반환되는 HTML이므로 <code>
블록 내부에서 값을 가져와야합니다 .
<div id="login">
<h1><a href="https://wordpress.org/" title="Powered by WordPress" tabindex="-1">Example Site</a></h1>
<p>Your verification token is <code>yGOYFpyawe8iZmmcizqVIw3f</code></p> <p id="backtoblog"><a href="http://website.com/">← Back to Example Site</a></p>
</div>
확인 토큰이 있으면 /oauth1/access
확인 토큰, oauth 토큰 및 oauth 토큰 비밀 을 사용하여 전화를 걸 수 있습니다 . 검증 토큰은 POST 데이터에 다음과 같이 넣어야합니다.oauth_verifier
새롭고 영구적 인 액세스 토큰과 VOILA가 반환됩니다!
CURL 코드 예
다음은 CURL 호출을 작성하는 예제 코드이며, 가장 중요한 부분 oauth_signature
은 생성 방법 입니다.
https://oauth1.wp-api.org/docs/basics/Signing.html
function buildBaseString($baseURI, $method, $params){
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth){
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key=\"" . rawurlencode($value) . "\"";
$r .= implode(', ', $values);
return $r;
}
// Add request, authorize, etc to end of URL based on what call you're making
$url = "http://domain.com/oauth/";
$consumer_key = "CLIENT ID HERE";
$consumer_secret = "CLIENT SECRET HERE";
$oauth = array( 'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_callback' => 'oob',
'oauth_timestamp' => time(),
'oauth_version' => '1.0');
$base_info = buildBaseString($url, 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$return_data = json_decode($json);
print_r($return_data);
이 사이트는 OAuth 서명을 인코딩하는 방법과 CURL을 사용하여 보내는 방법을 정확하게 알려줍니다 (전체 페이지를 읽는 것이 좋습니다) :
https://hannah.wf/twitter-oauth-simple-curl-requests-for-your-own- 데이터/
OAuth1 서명 생성에 대한 추가 리소스 :
/programming/24613277/oauth-signature-generation-using-hmac-sha1
기타 자료 :
http://collaboradev.com/2011/04/01/twitter-oauth-php-tutorial/