kum*_*ade 5 php twitter twitter-oauth hybridauth
我在我的 PHP 应用程序中使用Hybridauth 3 代表我的帐户发布一些定期推文。该应用程序具有所有可能的权限。当它在第一个身份验证步骤中要求它们时,我将授予它所有权限。在那之后,Twitter 将我重定向到指定的回调 URL,在那里我得到了一对 access_token 和 access_token_secret。但是当我尝试使用这些令牌发推文时 - 它给了我:
{"errors":[{"code":220,"message":"Your credentials do not allow access to this resource."}]}
Run Code Online (Sandbox Code Playgroud)
这是我尝试发推文的方式:
$config = [
'authentication_parameters' => [
//Location where to redirect users once they authenticate
'callback' => 'https://mysite/twittercallback/',
//Twitter application credentials
'keys' => [
'key' => 'xxx',
'secret' => 'yyy'
],
'authorize' => true
]
];
$adapter = new Hybridauth\Provider\Twitter($config['authentication_parameters']);
//Attempt to authenticate the user
$adapter->setAccessToken(/*tokens I've got from getAccessToken() on /twittercallback/*/);
if(! $adapter->isConnected()) {
// never goes here, so adapter is connected
return null;
}
try{
$response = $adapter->setUserStatus('Hello world!');
}
catch (\Exception $e) {
// here I've got the error
echo $e->getMessage();
return;
}
Run Code Online (Sandbox Code Playgroud)
尝试重新创建令牌和密钥\秘密对并多次通过应用程序的身份验证过程,包括为我的 Twitter 帐户输入密码(如 stackoverflow 上的一些帖子中所建议),但仍然出现此错误。
PS根据此,Hybridauth已经固定在最近发布的问题。
将我的服务器发出的请求的标头与Twitter 所需的标头进行比较后,我注意到 Hybris 没有添加标头的非常重要的部分:oauth_token。至少它没有在 Twitter 适配器的代码中以及您使用 .app 应用访问令牌时的场景中执行此操作setAccessToken()。它只是将令牌存储在内部存储中,但没有初始化类中调用的相应类consumerToken成员OAuth1。因此,为了正确初始化消费者令牌,我重写了类apiRequest的方法Twitter(在使用默认父实现之前)并添加了一个小条件,因此当消费者令牌在请求之前为空时 - 我们需要尝试初始化它。
public function apiRequest($url, $method = 'GET', $parameters = [], $headers = [])
{
if(empty($this->consumerToken)) {
$this->initialize();
}
return parent::apiRequest($url, $method, $parameters, $headers);
}
Run Code Online (Sandbox Code Playgroud)
我不确定我是否已经以最好的方式解决了这个问题,但只要它能正常工作,那就没问题。
| 归档时间: |
|
| 查看次数: |
7370 次 |
| 最近记录: |