我正在尝试使用QOAuth对twitter的API进行身份验证。
我的代码目前是:
oauthInterface->setConsumerKey(CONSUMER_KEY);
oauthInterface->setConsumerSecret(CONSUMER_SECRET_KEY);
oauthInterface->setRequestTimeout(10000);
QOAuth::ParamMap reply = oauthInterface->requestToken("https://api.twitter.com/oauth/request_token", QOAuth::GET, QOAuth::HMAC_SHA1);
if(oauthInterface->error() == QOAuth::NoError)
{
token = reply.value(QOAuth::tokenParameterName());
tokenSecret = reply.value(QOAuth::tokenSecretParameterName());
qDebug() << "temporary token" << token << tokenSecret;
}
reply = oauthInterface->accessToken("https://api.twitter.com/oauth/access_token",QOAuth::GET, token, tokenSecret, QOAuth::HMAC_SHA1);
if(oauthInterface->error() == QOAuth::NoError)
{
qDebug() << "final token" << reply.value("screen_name") << reply.value(QOAuth::tokenParameterName()) << reply.value(QOAuth::tokenSecretParameterName());
}
else
{
qDebug() << "ERROR" << oauthInterface->error();
}`
并给我
temporary token "cBhxmmdkYgmghyy02kmfc0VSIuykRCNoQRh2h1r3Yg" "oYF8b2lzPSgDTRku8X4BjjnoVw5dAXXZBXc2R9P8Jk"
ERROR 401
使用QOAuth :: POST代替QOAuth :: GET我有相同的结果
我如何使用QOAuth获取访问令牌?
答案 0 :(得分:2)
当我设法解决我自己的问题时,我在这里发布解决方案:
事实是,对于授予访问权限https://api.twitter.com/oauth/access_token的权限,您需要一个可由用户在https://api.twitter.com/oauth/authenticate
获取的引脚如果你在https://api.twitter.com/oauth/request_token要求临时代币时设置oauth_callback = oob,那么你只能得到这个引脚
我最终得到了以下代码:
oauthInterface->setConsumerKey(CONSUMER_KEY);
oauthInterface->setConsumerSecret(CONSUMER_SECRET_KEY);
oauthInterface->setRequestTimeout(10000);
QOAuth::ParamMap args;
args.insert("oauth_callback", "oob");
QOAuth::ParamMap reply = oauthInterface->requestToken("https://api.twitter.com/oauth/request_token", QOAuth::POST, QOAuth::HMAC_SHA1, args);
if(oauthInterface->error() == QOAuth::NoError)
{
token = reply.value(QOAuth::tokenParameterName());
tokenSecret = reply.value(QOAuth::tokenSecretParameterName());
qDebug() << "temporary token" << token << tokenSecret;
}
QString url = "https://api.twitter.com/oauth/authenticate";
url.append("?");
url.append(QOAuth::tokenParameterName() + "=" + token);
QDesktopServices::openUrl(QUrl(url));
QOAuth::ParamMap args2;
QString pin = QInputDialog::getText(this, "Pin", "Enter pin");
args2.insert("oauth_verifier", pin.toAscii()); //pin.toAscii());
reply = oauthInterface->accessToken("https://api.twitter.com/oauth/access_token", QOAuth::GET, token, tokenSecret, QOAuth::HMAC_SHA1, args2);
if(oauthInterface->error() == QOAuth::NoError)
{
qDebug() << "final token" << reply.value("screen_name") << reply.value(QOAuth::tokenParameterName()) << reply.value(QOAuth::tokenSecretParameterName());
}
else
{
qDebug() << "ERROR" << oauthInterface->error();
}