我的问题是:我试图使用stackexchange 2.0 API获取stackerflow上的当前用户配置文件url。如果用户已经登录,那么一切都很好,OAuth流会给我访问令牌,我可以获得我想要的每一个信息。但是,如果用户没有登录,stackexchange会要求用户使用任何身份验证方法(谷歌、脸书、雅虎等)登录,但在用户登录后(比方说使用谷歌),我得到的回复是一个糟糕的请求。
我的第一个授权码请求如下:
https://stackexchange.com/oauth?client_id=193&scope=read_inbox&redirect_uri=https%3a%2f%2fdioslaska.homeinux.org/2fcards%2fcard%2editcards
之后,它返回url中的代码,我想用一个访问令牌交换它,并发出这样的Post请求:
https://stackexchange.com/oauth/access_token?client_id=193&redirect_uri=https%3a%2f%2fdioslaska.homeinux.org/2fcards%2fcard%2editcards&client_secret={此处为我的客户端机密}&代码=tCEeEFp1UX2GYilnjR2GcA)
响应是一个错误400坏请求。我查阅了stackexchangeapi文档,它只说这是一个糟糕的参数。但是,当我为已经登录的用户执行此操作时,我会使用相同的参数,并且它是有效的。
我搜索了很多,但找不到任何类似于这个问题的东西。任何帮助都将不胜感激!!
(如果有帮助的话,我将在visualstudio2010中使用mvc 3框架)
在您的一个页面上获得CODE(您为代码请求提供的重定向_uri url)后,制作如下
<?php
if(isset($_GET['code']))
{
?>
<form method="POST" action="https://stackexchange.com/oauth/access_token" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="client_secret" value="asdhfbakjhsdfbjsd" />
<input type="hidden" name="code" value="<?php echo $_GET['code'];?>" />
<input type="hidden" name="client_id" value="1234" />
<input type="hidden" name="redirect_uri" value="http%3A%2F%2Fmysite.com%2Fmypage.php" />
<input type="submit" name="submit" value="stack" />
</form>
<?php
}
?>
您将在其中一个stackexchange页面上获得访问令牌,请注意,要获得access_token,您必须提供与CODE请求相同的redirect_uri。
检查最终POST请求中的标头Content-Type=application/x-www-form-urlencoded。
这是文件要求的。