2012-09-09 6 views
7

Ich habe versucht, BitBucket für die letzten 4 Stunden in meine Anwendung zu integrieren, ohne Erfolg.Anfrage OAuth-Token von BitBucket

Während durch BitBucket's RESTful API documentation Lesen, bemerkte ich, dass Sie OAuth verwenden müssen - es ist OK, ich bin mit OAuthSimple Bibliothek JR Conlin, die von mir, wenn in Ordnung (ich oauth-php versucht, aber es war ein bisschen kompliziert - ich nicht brauchen all diese Optionen für eine so kleine Integration).

Nach meinem Verständnis besteht der erste Schritt zur Authentifizierung mit OAuth darin, ein neues Token über POST anzufordern. Wenn die notwendigen Parameter bereitstellt, sollten Sie eine Antwort von BitBucket erhalten, wie folgt aus:

oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true

Um das zu tun, ich bin mit cURL und 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); 

Die Sache ist, dass, wenn ich meine Anfrage senden, eine von zwei Dingen passieren:

  1. Wenn ich es wie hier gepostet senden, werde ich einen 401-Fehler erhalten (das kann ich über curl_getinfo ($ ch) sehen) Wenn ich gesetzt curl_setopt ($ ch, CURLOPT_POST, 1), erhalte ich ein 400 Bad Anfrage

Die resultierende Zeichenfolge (gespeichert in $r) ist eine leere Zeichenfolge. Die signed_url ist eine richtig gebildet URL AFAIK, die so etwas wie diese:

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

Wenn ich in einem Browser manuell die Adresse in meine Adressleiste eingeben, ich werde einen Anmeldedialog zum BitBucket API bekommen, Port 443. Ich kann mich jedoch nicht mit meinen Zugangsdaten einloggen. Dann wird es immer wieder sagen: "OAuth-Anfrage konnte nicht überprüft werden."

Ich weiß nicht, was ich falsch mache, da ich OAuth das erste Mal benutze.

Jede Hilfe ist willkommen!

+0

etwas Glück dazu? Ich bekomme den gleichen Fehler wie Sie ... – ericbae

+0

@ericbae Ich endete mit einer Unterhaltung mit BitBucket's Technical Support - es stellt sich heraus, dass sie veraltete Informationen in ihrem Handbuch hatten, und es wurde korrigiert. Sobald sie mir das gesagt haben (und ich habe die notwendigen Änderungen vorgenommen), hat alles wie ein Zauber funktioniert. Stellen Sie sicher, dass Sie die richtigen Pfade verwenden (weil [OAuthSimple] (https://github.com/jrconlin/oauthsimple/) großartig funktioniert) – AeroCross

+0

@AeroCross sind Sie in der Lage, Ihre Antwort und/oder die richtigen Pfade zu setzen, die zu Ihrem Ergebnis geführt haben Fix? –

Antwort

1

Das Problem ist, dass Curl das SSL-Zertifikat überprüfen wird.

Um das Problem zu lösen Sie Locke sagen kann die Überprüfung der SSL-Zertifikate zu ignorieren:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
+0

versucht, aber nichts, was Sie am besten lassen kennt –