7

過去 4 時間、BitBucket を自分のアプリケーションに統合しようとしましたが、うまくいきませんでした。

BitBucket の RESTful API ドキュメントを読んでいるときに、OAuth を使用する必要があることに気付きました — OK です。JR Conlin の OAuthSimple ライブラリを使用います。このような小規模な統合には、これらすべてのオプションが必要です)。

私の理解では、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);

問題は、リクエストを送信すると、次の 2 つのいずれかが発生することです。

  1. ここに投稿されているように送信すると、401 エラーが発生します (curl_getinfo($ch) で確認できます)。
  2. curl_setopt($ch, CURLOPT_POST, 1) を設定すると、400 Bad request が返されます

結果の文字列 ( に格納$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

そのアドレスをブラウザのアドレス バーに手動で入力すると、BitBucket API のポート 443 への認証ダイアログが表示されます。ただし、自分の資格情報でログインすることはできません。その後、「OAuth リクエストを検証できませんでした」と言い続けます。

OAuth を使用するのは初めてなので、何が間違っているのかわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

問題は、Curl が SSL 証明書を検証することです。

この問題を解決するには、SSL 証明書の検証を無視するように Curl に指示します。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
于 2013-04-24T01:31:10.743 に答える