我一直試圖將BitBucket整合到我的應用程序過去4個小時無濟於事。從BitBucket請求OAuth令牌
儘管通讀BitBucket's RESTful API documentation,我注意到,你需要使用OAuth - 沒關係,我使用JR康林的OAuthSimple庫,如果罰款由我(我試過oauth-php但它有點複雜 - 我沒必要所有這些小集成的選項)。
據我所知,使用OAuth進行身份驗證的第一步是通過POST請求新令牌。當提供必要的參數,你應該從到位桶的響應,這樣的:
oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true
爲了做到這一點,我使用的捲曲和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錯誤請求
結果字符串(存儲在$r
)是空字符串。該signed_url
是正確形成的URL據我所知,這是這樣的:
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
如果我在瀏覽器中手動輸入該地址爲我的地址欄,我會得到一個身份驗證對話框到位桶API,但是我無法用我的憑據登錄。然後它會繼續說「無法驗證OAuth請求」。
我不知道我在做什麼錯,因爲這是我第一次使用OAuth。
任何幫助的讚賞!
任何運氣嗎?我得到了和你一樣的錯誤... – ericbae
@ericbae我最終與BitBucket的技術支持人員進行了一次對話 - 事實證明,他們的手冊中的信息已經過時,並且已被糾正。只要他們告訴我(我做了必要的路徑變更),一切都像魅力一樣。確保你使用的是正確的路徑(因爲[OAuthSimple](https://github.com/jrconlin/oauthsimple/)效果很好) – AeroCross
@AeroCross是你能夠把你的答案和或導致你的正確路徑固定? –