gpt4 book ai didi

php - 我如何从 tumblr 的官方 php 客户端获取 access_token?

转载 作者:行者123 更新时间:2023-12-04 20:19:33 24 4
gpt4 key购买 nike

我已按照 this stackoverflow question 中发布的说明进行操作,但我被卡住了。

我正在使用来自 Github 的 tumblr/tumblr.php(官方的“tumblr API 的 PHP 客户端”)。

我也在遵循指示 here (实际上是针对 Twitter 的),但这些说明并不是为我正在使用的 git 库量身定制的。

我有一个有效的消费者 key 和 secret 。

从那些我发出请求并像这样获得 oauth_token 和 oauth_token_secret 的人:

$client = new Tumblr\API\Client($consumerKey,$consumerSecret);
$client->getRequestHandler()->setBaseUrl('https://www.tumblr.com/');
$req = $client->getRequestHandler()->request('POST', 'oauth/request_token', [
'oauth_callback' => '...',
]);
// Get the result
$result = $req->body->__toString();
print_r( $result );

这给了我:

oauth_token=2C6f...MqSF&oauth_token_secret=HaGh...IJLi&oauth_callback_confirmed=true

然后我将用户发送到 http://www.tumblr.com/oauth/authorize?oauth_token=2C6f...MqSF ,这样他们就可以允许访问该应用程序。这重定向到:...?oauth_token=2C6f...MqSF&oauth_verifier=nvjl...GtEa#_=_

现在在最后一步,我认为我应该将我的请求 token 转换为访问 token 。那正确吗?我做错了什么:

$client = new Tumblr\API\Client($consumerKey,$consumerSecret);
$client->getRequestHandler()->setBaseUrl('https://www.tumblr.com/');
$req = $client->getRequestHandler()->request('POST', 'oauth/access_token', [
'oauth_token' => '2C6f...MqSF',
'oauth_verifier' => 'nvjl...GtEa'
]);
// Get the result
$result = $req->body->__toString();
print_r( $result );

因为我收到这样的回复:

oauth_signature [AqbbYs0XSZ7plqB0V3UQ6O6SCVI=] does not match expected value [0XwhYMWswlRWgcr6WeA7/RrwrhA=]

我最后一步有什么问题?

我不确定我是否应该在请求中发送 oauth_verifier#_=_ 应该是 oauth_verifier 的一部分吗?我不这么认为。我尝试过的所有变体都出现签名错误。

没有 token 和 tokenSecret,我无法对 API 进行某些调用。我收到未经授权的 403 响应。当我使用第二步中的 token 和 token_secret 时也是如此。我很确定我需要一个新的 token / secret 对。

最佳答案

您非常接近,您只是在最后一步错误地传递了 oauth_token,并跳过了 oauth_token_secret altogeter。

我已经编译了这段工作代码(您现在也可以在 Wiki 上的 https://github.com/tumblr/tumblr.php/wiki/Authentication 找到它):

<?php

require_once('vendor/autoload.php');

// some variables that will be pretttty useful
$consumerKey = '<your consumer key>';
$consumerSecret = 'your consumer secret>';
$client = new Tumblr\API\Client($consumerKey, $consumerSecret);
$requestHandler = $client->getRequestHandler();
$requestHandler->setBaseUrl('https://www.tumblr.com/');

// start the old gal up
$resp = $requestHandler->request('POST', 'oauth/request_token', array());

// get the oauth_token
$out = $result = $resp->body;
$data = array();
parse_str($out, $data);

// tell the user where to go
echo 'https://www.tumblr.com/oauth/authorize?oauth_token=' . $data['oauth_token'];
$client->setToken($data['oauth_token'], $data['oauth_token_secret']);

// get the verifier
echo "\noauth_verifier: ";
$handle = fopen('php://stdin', 'r');
$line = fgets($handle);

// exchange the verifier for the keys
$verifier = trim($line);
$resp = $requestHandler->request('POST', 'oauth/access_token', array('oauth_verifier' => $verifier));
$out = $result = $resp->body;
$data = array();
parse_str($out, $data);

// and print out our new keys
$token = $data['oauth_token'];
$secret = $data['oauth_token_secret'];
echo "\ntoken: " . $token . "\nsecret: " . $secret;

// and prove we're in the money
$client = new Tumblr\API\Client($consumerKey, $consumerSecret, $token, $secret);
$info = $client->getUserInfo();
echo "\ncongrats " . $info->user->name . "!\n";

关于php - 我如何从 tumblr 的官方 php 客户端获取 access_token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20235182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com