аутентификация — аутентификация запроса к частному приложению для API Xero с использованием PHP / Guzzle

Я пытаюсь интегрировать интернет-магазин моей компании (написанный на php / Laravel) с Xero таким образом, чтобы я мог создать счет для каждого заказа. Для этого я создал приложение Private Xero, сгенерировал сертификат, необходимый для аутентификации Oauth, и добавил его в приложение Xero, так что теперь у меня есть ключ и секретный ключ.

Я посмотрел на официальную оболочку php и обнаружил, что она очень устарела и не подходит для интеграции в мое приложение, поэтому, учитывая малое количество взаимодействий с Xero, я решил попробовать напрямую вызвать API.

Я использую Guzzle и подписчика Guzzle Oauth, но пытаюсь отправить правильно аутентифицированный запрос.

Поскольку мое приложение Xero является приватным, следующий абзац должен применяться к моему запросу (как упомянуто в области разработки Xero):

Примечание. Для частных приложений токен и секретный пользователь также используются в качестве токена доступа и секретного.

Поэтому я создаю запрос примерно так:

$stack = HandlerStack::create();

$middleware = new Oauth1([
'consumer_key'    => config('services.xero.key'),
'consumer_secret' => config('services.xero.secret'),
'signature_method' => Oauth1::SIGNATURE_METHOD_RSA,
]);

$stack->push($middleware);

$client = new Client([
'base_uri' => 'https://api.xero.com/api.xro/2.0/',
'handler'  => $stack,
]);

$res = $client->request('GET', 'Contacts');

dd($res);

Однако я получаю следующее исключение:

[GuzzleHttp \ Exception \ ClientException] Ошибка клиента: GET https://api.xero.com/api.xro/2.0/Contacts в результате
в 401 Unauthorized ответ:
oauth_problem = consumer_key_unknown&oauth_problem_advice = Потребительские% 20key% 20was% 20not% 20recognised

Насколько я могу судить, я правильно настроил приложение Xero и сгенерировал ключ и секретный ключ пользователя, но я не могу отладить это.

Любой совет, как сделать правильный запрос?

0

Решение

У меня была та же проблема, что и у вас. Это сработало для меня:

$middleware = new Oauth1([
'consumer_key' => config('services.xero.key'),
'token' => config('services.xero.key'),
'private_key_file' => config('services.xero.path_to_my_private_key.pem'),
'private_key_passphrase' => config('services.xero.private_key_passphrase'),
'signature_method' => Oauth1::SIGNATURE_METHOD_RSA,
]);

$stack = GuzzleHttp\HandlerStack::create();
$stack->push($middleware);

$options = [
'base_uri' => 'https://api.xero.com/',
'handler' => $stack
];

$this->apiClient = new GuzzleHttp\Client($options);

В https://developer.xero.com/documentation/auth-and-limits/private-applications утверждается, что «ключ потребителя также используется в качестве токена доступа. секрет потребителя не используется для частных приложений». вот как я узнал этот конфиг.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]