在过去的 4 个小时里,我一直在尝试将 BitBucket 集成到我的应用程序中,但无济于事。
在阅读BitBucket 的 RESTful API 文档时,我注意到您需要使用 OAuth — 没关系,我正在使用 JR Conlin 的OAuthSimple库,如果我觉得很好(我尝试了oauth-php,但它有点复杂 — 我没有需要所有这些选项来进行如此小的集成)。
据我了解,使用 OAuth 进行身份验证的第一步是通过 POST 请求新令牌。提供必要的参数时,您应该得到来自 BitBucket 的响应,如下所示:
oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true
为此,我使用 cURL 和 OAuthSimple:
$key = 'key_provided_by_bitbucket';
$secret = 'key_provided_by_bitbucket';
$path = 'https://api.bitbucket.org/1.0/oauth/request_token';
$params = array(
'oauth_consumer_key' => $key,
'oauth_nonce' => base_convert(mt_rand(10000, 90000), 10, 32) . 'a',
'oauth_signature' => 'HMAC-SHA1',
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_callback' => base_url('dashboard'),
'oauth_version' => '1.0a'
);
$oauth = new OAuthSimple($key, $secret);
$result = $oauth->sign(array(
'action' => 'POST',
'path' => $path,
'parameters' => $params
));
// load resulting url into a string
$ch = curl_init($result['signed_url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
问题是,当我发送请求时,会发生以下两种情况之一:
- 如果我像张贴在这里一样发送它,我会收到 401 错误(我可以通过 curl_getinfo($ch) 看到)
- 如果我设置 curl_setopt($ch, CURLOPT_POST, 1),我会收到 400 Bad request
结果字符串(存储在 中$r
)是一个空字符串。这signed_url
是一个正确格式的 URL AFAIK,它是这样的:
https://api.bitbucket.org/1.0/oauth/request_token?oauth_callback=http%3A%2F%2Flocalhost%2Fidv&oauth_consumer_key=key_provided_by_bitbucket&oauth_nonce=b47a&oauth_signature=3A1R%2FoKxTqh6Q23poaS%2BVNzhwpE%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1347167282&oauth_version=1.0a
如果我在浏览器的地址栏中手动输入该地址,我将获得 BitBucket API 的身份验证对话框,端口为 443。但我无法使用我的凭据登录。然后它会一直说“无法验证 OAuth 请求”。
我不知道我做错了什么,因为这是我第一次使用 OAuth。
任何帮助表示赞赏!