Я пытался интегрировать BitBucket в мое приложение в течение последних 4 часов безрезультатно.
Прочитав через документацию RESTful API от BitBucket , я заметил, что вам нужно использовать OAuth – все в порядке, я использую библиотеку OAuthSimple от JR Conlin , которая, если она мне известна (я пробовал oauth–php, но это было довольно сложно – я не нужны все эти варианты для такой небольшой интеграции).
Насколько я понимаю, первым шагом для аутентификации с помощью 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);
Дело в том, что когда я отправляю свой запрос, происходит одна из двух вещей:
Полученная строка (хранимая в $r
) является пустой строкой. signed_url
– это правильно сформированный URL AFAIK, который выглядит примерно так:
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 BitBucket, порт 443. Однако я не могу войти в систему с моими учетными данными. Затем он просто будет говорить: «Не удалось проверить запрос OAuth».
Я не знаю, что я делаю неправильно, так как я впервые использовал OAuth.
Любая помощь оценена!
Проблема в том, что Curl проверит сертификат SSL.
Чтобы решить проблему, вы можете сказать Curl игнорировать проверку SSL-сертификатов:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);