Я пытаюсь подключиться к API WooCommerce с помощью Guzzle 5 (у Guzzle 6, похоже, нет опций oAuth o.O). Woocommerce requires the oAuth authentication method работать.Как использовать oAuth с Guzzle 5 (или, лучше, с Guzzle 6)
Это код, я использую:
<?php
/**
* Example of usage of Guzzle 5 to get information
* from a WooCommerce Store.
*/
require('../vendor/autoload.php');
use GuzzleHttp\Client;
use GuzzleHttp\Subscriber\Oauth\Oauth1;
use GuzzleHttp\Exception\RequestException;
$consumer_key = 'my_consumer_key'; // Add your own Consumer Key here
$consumer_secret = 'my_consumer_secret'; // Add your own Consumer Secret here
$store_url = 'http://example.com'; // Add the home URL to the store you want to connect to here
$api_path = '/wc-api/v2/';
$api_end_point = [
'root' => '',
'orders' => 'orders'
];
$base_uri = $store_url . $api_path;
$client = new Client([
'base_url' => $base_uri,
'defaults' => ['auth' => 'oauth']
]);
$oauth = new Oauth1([
'consumer_key' => $consumer_key,
'consumer_secret' => $consumer_secret,
'request_method' => 'query'
]);
$client->getEmitter()->attach($oauth);
try
{
$res = $client->get($api_end_point['orders']);
}
catch (RequestException $e)
{
$res = $e;
if ($e->hasResponse())
{
$res = $e->getResponse();
}
}
print_r($res);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'
Этот код возвращает
woocommerce_api_authentication_error: Invalid Signature - provided signature does not match
Использование чистых функций завиток (с использованием this package, в котором я положил некоторые функции, которые я нашел here) , вместо этого он работает, и я получаю все заказы и другие данные, которые я хочу.
некоторые другие детали
Чтобы использовать жрать 5 и OAuth Я использую те композиторские пакеты:
"require": {
"guzzlehttp/guzzle": "~5.0"
},
"require-dev": {
"guzzlehttp/oauth-subscriber": "~0.2",
},
Кажется, есть некоторые вещи, которые отличаются в создании подписи: одна создана по the library I've used until now работает, но созданный плагином oAuth (using the method getSignature()
) для Guzzle этого не делает, и я не так привык использовать oAuth, чтобы найти ошибку. Есть ли кто-нибудь, кто может помочь мне определить проблему?