2012-09-09 42 views
7

Tôi đã cố gắng tích hợp BitBucket vào ứng dụng của mình trong 4 giờ qua mà không có kết quả.Yêu cầu mã thông báo OAuth từ BitBucket

Trong khi đọc qua BitBucket's RESTful API documentation, tôi nhận thấy rằng bạn cần phải sử dụng OAuth - đó là OK, tôi đang sử dụng OAuthSimple thư viện JR Conlin, mà nếu tốt của tôi (Tôi đã thử oauth-php nhưng nó đã kinda phức tạp - Tôi không cần tất cả các tùy chọn cho một tích hợp nhỏ như vậy).

Đối với những gì tôi hiểu, bước đầu tiên để xác thực với OAuth là yêu cầu mã thông báo mới qua POST. Khi cung cấp các thông số cần thiết, bạn sẽ nhận được một phản hồi từ BitBucket, như thế này:

oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true

Để làm điều đó, tôi đang sử dụng cURL và 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); 

Cái này là, khi tôi gửi yêu cầu của tôi, một trong hai điều sau:

  1. Nếu tôi gửi nó như được đăng ở đây, tôi sẽ gặp lỗi 401 (tôi có thể thấy thông qua curl_getinfo ($ ch))
  2. Nếu tôi đặt curl_setopt ($ ch, CURLOPT_POST, 1), tôi nhận được một 400 Bad yêu cầu

Chuỗi kết quả (lưu trữ trong $r) là một chuỗi rỗng. Các signed_url là một AFAIK URL hình thành một cách chính xác, đó là một cái gì đó như thế này:

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

Nếu tôi nhập bằng tay địa chỉ đó vào thanh địa chỉ của tôi trong một trình duyệt, tôi sẽ nhận được một xác thực Dialog API BitBucket, cổng 443. Tuy nhiên, tôi không thể đăng nhập bằng thông tin đăng nhập của mình. Sau đó, nó sẽ chỉ nói rằng "Không thể xác minh yêu cầu OAuth."

Tôi không biết mình đang làm gì sai vì đây là lần đầu tiên tôi sử dụng OAuth.

Bất kỳ trợ giúp nào được đánh giá cao!

+0

bất kỳ may mắn về vấn đề này? Tôi nhận được lỗi tương tự như bạn ... – ericbae

+0

@ericbae Tôi đã kết thúc cuộc trò chuyện với Hỗ trợ kỹ thuật của BitBucket - hóa ra họ đã có thông tin lỗi thời trong sổ tay của họ và nó đã được sửa chữa. Ngay sau khi họ nói với tôi rằng (và tôi đã thực hiện những thay đổi đường dẫn cần thiết) tất cả mọi thứ làm việc như một say mê. Đảm bảo bạn đang sử dụng đúng đường dẫn (nguyên nhân [OAuthSimple] (https://github.com/jrconlin/oauthsimple/) hoạt động tốt) – AeroCross

+0

@AeroCross bạn có thể đặt câu trả lời và các đường dẫn chính xác dẫn đến sửa chữa? –

Trả lời

1

Vấn đề là Curl sẽ xác minh chứng chỉ SSL.

Để giải quyết vấn đề bạn có thể nói Curl để bỏ qua việc xác minh giấy chứng nhận SSL:

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

nhưng không có gì tốt nhất cho bạn biết –

Các vấn đề liên quan