2012-09-09 8 views
7

Ho cercato di integrare BitBucket nella mia applicazione per le ultime 4 ore senza alcun risultato.Richiesta token OAuth da BitBucket

Durante la lettura attraverso BitBucket's RESTful API documentation, ho notato che è necessario utilizzare OAuth - va bene, sto usando la biblioteca di JR Conlin OAuthSimple, che se bene per me (ho provato oauth-php ma era un po 'complicato - non ho avuto bisogno tutte queste opzioni per un'integrazione così piccola).

Per quello che ho capito, il primo passo per autenticare con OAuth è richiedere un nuovo token via POST. Nel fornire i parametri necessari, si dovrebbe ottenere una risposta da BitBucket, come questo:

oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true

Per fare questo, sto usando curl e 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); 

Il fatto è che, quando invio la mia richiesta, una delle due cose accada:

  1. Se invio piace postato qui, mi metterò un errore di 401 (vedo che tramite curl_getinfo ($ ch))
  2. se ho impostato curl_setopt ($ ch, CURLOPT_POST, 1), ho un 400 Richiesta

La stringa risultante (memorizzato in $r) è una stringa vuota. Il signed_url è un URL per quanto ne so formata correttamente, che è qualcosa di simile:

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

Se entro manualmente l'indirizzo nella mia barra degli indirizzi in un browser, vado a prendere un dialogo di autenticazione per l'API BitBucket, porta 443. Non riesco ad accedere con le mie credenziali, però. Quindi continuerà a dire "Impossibile verificare la richiesta OAuth".

Non so cosa sto facendo male, poiché è la prima volta che utilizzo OAuth.

Qualsiasi aiuto è apprezzato!

+0

po 'di fortuna su questo? Sto ottenendo lo stesso errore di te ... – ericbae

+0

@ericbae Ho finito per avere una conversazione con il supporto tecnico di BitBucket - si scopre che avevano informazioni obsolete nel loro manuale, ed è stato corretto. Appena mi hanno detto che (e ho apportato le necessarie modifiche al percorso) tutto ha funzionato come un incantesimo. Assicurati di utilizzare i percorsi corretti (perché [OAuthSimple] (https://github.com/jrconlin/oauthsimple/ funziona perfettamente) – AeroCross

+0

@AeroCross sei in grado di mettere la tua risposta e/o i percorsi corretti che hanno portato alla tua risolvere? –

risposta

1

Il problema è che Curl verificherà il certificato SSL.

Per risolvere il problema si può dire Curl di ignorare la verifica dei certificati SSL:

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

ma niente di meglio ti permette conoscere –