oAuth для входа в Quickbooks API

У меня проблема с использованием API-интерфейса untuit для quickbooks, я пытаюсь создать плагин для Wordpress, который позволяет пользователям вызывать API. однако, когда я пытаюсь зарегистрироваться, я получаю странную ошибку

define('OAUTH_CONSUMER_KEY', 'qyprdCeT1XrfB2naZuXXXXXXXXXX');
define('OAUTH_CONSUMER_SECRET', 'AItwjqmICEnr9nQNzkTc8nzC24tXXXXXXXXXXX');
define('OAUTH_REQUEST_URL', 'https://oauth.intuit.com/oauth/v1/get_request_token');
define('OAUTH_ACCESS_URL', 'https://oauth.intuit.com/oauth/v1/get_access_token');
define('OAUTH_AUTHORISE_URL', 'https://appcenter.intuit.com/Connect/Begin');
$schema = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
define('CALLBACK_URL', $schema.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);
$oauth = new OAuth( OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
try {

    if(isset($_POST['posted']) && !isset($_GET['oauth_token'])){
        $request_token = $oauth->getRequestToken( OAUTH_REQUEST_URL, CALLBACK_URL );
        $_SESSION['secret'] = $request_token['oauth_token_secret'];
        $vl->redirectUri =  OAUTH_AUTHORISE_URL .'?oauth_token='.$request_token['oauth_token'];
    }

    if( isset($_GET['oauth_token']) && isset($_GET['oauth_verifier']) ){
        $oauth->setToken($_GET['oauth_token'], $_SESSION['secret']);
        $access_token = $oauth->getAccessToken( OAUTH_ACCESS_URL );

        $vl->debug = print_r($access_token, true);
    }
}
catch(OAuthException $e) {
    $vl->debug = print_r($e, true);
}

Когда я пробую этот способ, я просто получаю ОБНОВЛЕНО полный журнал (это происходит при запуске соединения oAuth, когда возникают ошибки)

Итак, теперь единственная проблема, которую я получаю, заключается в том, что подпись недействительна. так что это должно быть что-то из URL-адреса, но класс oAuth PCEL обрабатывает это, поэтому я не знаю, где может быть ошибка.

OAuthException Object
(
    [message:protected] => Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)
    [string:Exception:private] => 
    [code:protected] => 401
    [file:protected] => /home/ebers/www/wordpress/offPeakTraining/wp-content/plugins/QuickBooks/qb.php
    [line:protected] => 71
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /home/ebers/www/wordpress/offPeakTraining/wp-content/plugins/QuickBooks/qb.php
                    [line] => 71
                    [function] => getAccessToken
                    [class] => OAuth
                    [type] => ->
                    [args] => Array
                        (
                            [0] => https://oauth.intuit.com/oauth/v1/get_access_token
                        )

                )

            [1] => Array
                (
                    [function] => qbwp_plugin_options
                    [args] => Array
                        (
                            [0] => 
                        )

                )

            [2] => Array
                (
                    [file] => /home/ebers/www/wordpress/offPeakTraining/wp-includes/plugin.php
                    [line] => 429
                    [function] => call_user_func_array
                    [args] => Array
                        (
                            [0] => qbwp_plugin_options
                            [1] => Array
                                (
                                    [0] => 
                                )

                        )

                )

            [3] => Array
                (
                    [file] => /home/ebers/www/wordpress/offPeakTraining/wp-admin/admin.php
                    [line] => 217
                    [function] => do_action
                    [args] => Array
                        (
                            [0] => settings_page_qbwpapi
                        )

                )

            [4] => Array
                (
                    [file] => /home/ebers/www/wordpress/offPeakTraining/wp-admin/options-general.php
                    [line] => 10
                    [args] => Array
                        (
                            [0] => /home/ebers/www/wordpress/offPeakTraining/wp-admin/admin.php
                        )

                    [function] => require_once
                )

        )

    [previous:Exception:private] => 
    [lastResponse] => oauth_problem=signature_invalid
    [debugInfo] => Array
        (
            [sbs] => GET&https%3A%2F%2Foauth.intuit.com%2Foauth%2Fv1%2Fget_access_token&oauth_consumer_key%3DqyprdCeT1XrfB2naZu0o7bKSFL3MyK%26oauth_nonce%3D12533744765415534dd89b43.77283483%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1410683725%26oauth_token%3Dqyprdn36hBYpc75UmnkItTyxGBVDu09NhWlO4COKnRyq03xY%26oauth_verifier%3D63vgjdf%26oauth_version%3D1.0
            [headers_recv] => HTTP/1.1 401 Unauthorized
Date: Sun, 14 Sep 2014 08:35:08 GMT
Server: Apache
WWW-Authenticate: OAuth oauth_problem="signature_invalid"
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Length: 31
Connection: close
Content-Type: text/plain
X-Pad: avoid browser bug
            [body_recv] => oauth_problem=signature_invalid
        )

    [xdebug_message] => 
OAuthException: Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect) in /home/ebers/www/wordpress/offPeakTraining/wp-content/plugins/QuickBooks/qb.php on line 71

Call Stack:
    0.0009     828960   1. {main}() /home/ebers/www/wordpress/offPeakTraining/wp-admin/options-general.php:0
    0.0015     954840   2. require_once('/home/ebers/www/wordpress/offPeakTraining/wp-admin/admin.php') /home/ebers/www/wordpress/offPeakTraining/wp-admin/options-general.php:10
    0.4527   53686792   3. do_action() /home/ebers/www/wordpress/offPeakTraining/wp-admin/admin.php:217
    0.4527   53688976   4. call_user_func_array() /home/ebers/www/wordpress/offPeakTraining/wp-includes/plugin.php:429
    0.4527   53689032   5. qbwp_plugin_options() /home/ebers/www/wordpress/offPeakTraining/wp-includes/plugin.php:429
    0.4534   53693984   6. OAuth->getAccessToken() /home/ebers/www/wordpress/offPeakTraining/wp-content/plugins/QuickBooks/qb.php:71

)

person Barkermn01    schedule 12.09.2014    source источник


Ответы (3)


Подпись OAuth, которую вы отправляете в Intuit, недействительна:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: OAuth oauth_problem="signature_invalid"

Трудно точно сказать, почему, не видя более подробной информации о том, как выглядит этот код/как выглядят HTTP-запросы, которые вы отправляете.

Рассматривали ли вы возможность использования одной из уже существующих библиотек, которые уже сделали всю эту тяжелую работу за вас? например

В частности, после этого быстрого старта:

И использовать этот код?

person Keith Palmer Jr.    schedule 12.09.2014
comment
Я использую их библиотеку только не для входа в систему oAuth. так как путь использует oAuth.php, я не могу использовать такое расположение файла, поскольку оно является частью плагина wordpress для административной части. - person Barkermn01; 14.09.2014
comment
система oAuth обрабатывается pecl oAuth, проблема именно в отправке URL-адреса с query_stirng в конце. если я urlencode адрес, чтобы не сломать строку запроса, она ломается при попытке перенаправить обратно на мою страницу. - person Barkermn01; 14.09.2014
comment
Я использую runnable.com/UtEZ4OpSEoFzAACs/ этот код работает нормально, когда я помещаю все это в шорткод, так что я знаю, что его код работает. просто похоже проблема с ? - person Barkermn01; 15.09.2014
comment
В частности, почему код, связанный с кодом, не работает для вас? Какое сообщение об ошибке / конкретная проблема у вас есть? - person Keith Palmer Jr.; 15.09.2014
comment
Проблема в том, что когда я передаю URL-адрес обратного вызова, который использует строку запроса, он ломает подпись, вероятно, из-за? в адресе, но если я urlencode его, удаленный сайт oAuth генерирует ошибку 500 при перенаправлении обратно на мой веб-сайт. - person Barkermn01; 15.09.2014
comment
Я могу ошибаться в этом, но я думаю, что слышал, что URL-адреса обратного вызова прямо не могут содержать строки запроса. Вы уверены, что вам НУЖНА строка запроса в вашем URL-адресе? - person Keith Palmer Jr.; 15.09.2014
comment
да, это плагин WordPress, поэтому панель администратора использует /wp-admin/options-general.php?page=qbwpapi без страницы = в конце он не будет вызывать плагин - person Barkermn01; 15.09.2014

Обратите внимание, что oauth_callback должен быть закодирован в два процента времени, чтобы создать базовую строку подписи.

Например: oauth_callback="http://boauth.local/get_access_token.php"

И это строка, которую я добавляю к базовой строке подписи:

http%253A%252F%252Fboauth.local%252Fget_access_token.php

person nimisha shrivastava    schedule 13.09.2014

Итак, после многих часов работы над этим я понял, что Intuit соответствует тому, что сказал Кит Палмер.

Я могу ошибаться в этом, но я думаю, что слышал, что URL-адреса обратного вызова прямо не могут содержать строки запроса. Вы уверены, что вам НУЖНА строка запроса в вашем URL-адресе?

Ну, это неправильно, стандарты oAuth гласят, что все параметры должны быть закодированы в URL, однако это означает, что существует проблема с сервером oAuth Intuit, поэтому я ничего не могу исправить. поэтому мне пришлось настроить страницу на wordpress на внешнем интерфейсе /wpoAuthLogin/ и привязать короткий код к функции параметров, и она отлично работает без ошибок, так что это убеждает меня, что это проблема на сервере Intuit oAuth.

person Barkermn01    schedule 23.09.2014