Используйте Http-клиент CakePHP с критериями поиска API rest Magento2Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Используйте Http-клиент CakePHP с критериями поиска API rest Magento2

Сообщение Anonymous »

Я пытаюсь отправить запрос GET к локальному API-интерфейсу Magento2 rest, чтобы получить все заказы через определенное время. Я следую http://devdocs.magento.com/guides/v2.1/ ... -timestamp. Я использую Http-клиент CakePHP 3.4 (https://book.cakephp.org/3.0/en/core-li ... lient.html), успешно интегрировался с Magento с помощью Oauth1 и не имею проблем с более простыми запросами GET, такими как http://www.magento.dev.com/rest/V1/stoc ... productSku. Это проблема с прохождением критериев поиска. Ответом всегда является ошибка 401 Invalid Signature.

Используя Postman, я могу получить действительный ответ на http://www.magento.dev.com/ rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=2016-07-01 00:00:00&searchCriteria [filter_groups][0][filters][0][condition_type]=gt

Вот что у меня есть на данный момент/как я отправляю запрос:

В Model/Table/OrdersTable.php:

Код: Выделить всё

public function importNewOrders(\App\Model\Entity\OauthIntegration $integrationDetails)
{
$this->OauthIntegrations = TableRegistry::get('OauthIntegrations');
$this->Orders = TableRegistry::get('Orders');
$timeCutOff = '2015-01-01 00:00:00';
$search = [
'searchCriteria' => [
'filterGroups' => [
0 => [
'filters' => [
0 => [
'field' => 'created_at',
'value' => $timeCutOff,
'condition_type' => 'gt'
]
]
]
]
]
];
//           'searchCriteria[filter_groups][0][filters][0][field]' => 'created_at',
//           'searchCriteria[filter_groups][0][filters][0][value]' => $timeCutOff,
//           'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'gt'

$action = '/V1/orders';

$type = "GET";
$response = $this->OauthIntegrations->sendRequest(
$integrationDetails,
$action,
$type,
'',
$search);

Log::write('debug', $response->body());
return $response;
}
и в Model\Table\OauthIntegrationsTable.php:

Код: Выделить всё

public function sendRequest(\App\Model\Entity\OauthIntegration $integrationDetails,
string $action, string $method = "GET", string $data = '', array $search = null)
{

$http = new Client([
'auth' => [
'type' => 'oauth',
'consumerKey' => $integrationDetails->oauth_consumer_key,
'consumerSecret' => $integrationDetails->oauth_consumer_secret,
'token' => $integrationDetails->oauth_token,
'tokenSecret' => $integrationDetails->oauth_token_secret
]
]);
$url = $integrationDetails->store_base_url . 'rest' . $action;
if ($method == 'GET'){
if (!isset($search)){
$search = [];
}
$response = $http->get($url, $search, []);

} else if ($method == 'POST'){

$response = $http->post($url, $data, [
'type' => 'json',

]);

} else if($method == 'PUT'){
$response = $http->put($url, $data, [
'type' => 'json',
]);
}
Log::write('debug', 'url: ' . $url . ' and status code: ' .  $response->getStatusCode());
return $response;
}
и эта ошибка (надеюсь) является причиной ответа о недопустимой подписи:

Код: Выделить всё

2017-03-28 10:07:01 Notice: Notice (8): Array to string conversion in [/var/www/cakephp/html/beacon/vendor/cakephp/cakephp/src/Http/Client/Auth/Oauth.php, line 315]
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 153
Cake\Http\Client\Auth\Oauth::_normalizedParams() - CORE/src/Http/Client/Auth/Oauth.php, line 315
Cake\Http\Client\Auth\Oauth::baseString() - CORE/src/Http/Client/Auth/Oauth.php, line 246
Cake\Http\Client\Auth\Oauth::_hmacSha1() - CORE/src/Http/Client/Auth/Oauth.php, line 143
Cake\Http\Client\Auth\Oauth::authentication() - CORE/src/Http/Client/Auth/Oauth.php, line 61
Cake\Http\Client::_addAuthentication() - CORE/src/Http/Client.php, line 501
Cake\Http\Client::_createRequest() - CORE/src/Http/Client.php, line 448
Cake\Http\Client::_doRequest() - CORE/src/Http/Client.php, line 341
Cake\Http\Client::get() - CORE/src/Http/Client.php, line 211
App\Model\Table\OauthIntegrationsTable::sendRequest() - APP/Model/Table/OauthIntegrationsTable.php, line 134
App\Model\Table\OrdersTable::importNewOrders() - APP/Model/Table/OrdersTable.php, line 672
App\Shell\MagentoShell::main() - APP/Shell/MagentoShell.php, line 36
Cake\Console\Shell::runCommand() - CORE/src/Console/Shell.php, line 472
Cake\Console\ShellDispatcher::_dispatch() - CORE/src/Console/ShellDispatcher.php, line 227
Cake\Console\ShellDispatcher::dispatch() - CORE/src/Console/ShellDispatcher.php, line 182
Cake\Console\ShellDispatcher::run() - CORE/src/Console/ShellDispatcher.php, line 128
[main] - ROOT/bin/cake.php, line 33
Код из Http\Client\Oauth.php, в котором возникает ошибка:

Код: Выделить всё

        $pairs = [];
foreach ($args as $k => $val) {
if (is_array($val)) {
sort($val, SORT_STRING);
Log::write('debug', 'about to go through foreach($val as $nestedVal)');
foreach ($val as $nestedVal) {
Log::write('debug', $nestedVal);
$pairs[] = "$k=$nestedVal"; //  Array
(
[0] => Array
(
[field] => created_at
[value] => 2015-01-01 00:00:00
[condition_type] => gt
)

)

)

)
Подводя итог, можно ли передать многомерный массив второму параметру в запросе на получение с помощью Http-клиента Cake?

Код: Выделить всё

// Is it possible to replace ['q' => 'widget'] with a multi-dimensional array??
$response = $http->get('http://example.com/search', ['q' => 'widget']);
Если нет, то как лучше всего использовать Http-клиент Cake для отправки запроса GET по адресу: http://www.magento.dev.com/rest/V1 /orders?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=2016-07-01 00:00:00&searchCriteria[filter_groups] [0][filters][0][condition_type]=gt ?

Заранее спасибо!!!

Подробнее здесь: https://stackoverflow.com/questions/430 ... h-criteria
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Используйте Http-клиент CakePHP с критериями поиска API rest Magento2
    Anonymous » » в форуме Php
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Ошибка установки CakePhp/локализован через композитор, конфликты с CakePhp/Chronos и CakePhp/Database
    Anonymous » » в форуме Php
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Magento2 Rest API для подключения к С#
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как пройти аутентификацию для FCM Rest API с помощью Google REST API в PHP REST API?
    Anonymous » » в форуме Php
    0 Ответы
    155 Просмотры
    Последнее сообщение Anonymous
  • Репликация Excel COUNTIFS с несколькими критериями из одного набора данных, используемыми для значений в другом наборе д
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»