gam6itko / ozon-seller Goto Github PK
View Code? Open in Web Editor NEWPHP client for Ozon Seller API
License: MIT License
PHP client for Ozon Seller API
License: MIT License
05.09.2022 при использовании метода \Gam6itko\OzonSeller\Service\V2\ProductService::infoStocks()
API Ozon выдал ошибку Obsolete method cannot be used
. У них уже реализован этот метод версии V3, а в библиотеке его нет.
C 15 апреля начнут использовать новый метод получения накладных https://docs.ozon.ru/api/seller/#operation/PostingAPI_PostingFBSGetDigitalAct
В импорте товара /v2/product/import обрезается параметр name. В результате в Озон товар попадает без названия.
Конфиг валидатора product_validator_v2.php просится, чтобы его дополнили.
/v1/product/pictures/import - Загрузка\Обновление изображений
/v1/product/pictures/info - статус загрузки изображений
How do I get the attributes to combine products in one card for each category? The help website has too little information and does not cover all situations. And so do the API response message. Please help me.
Привет! Как мне в созданый товар добавить images360
Please add a new method /v2/category/attribute/values in CategoryService.php
Package gam6itko/ozon-seller at version has a PHP requirement incompatible with your PHP version (7.0.33)
api:
https://api-seller.ozon.ru/v1/product/import-by-sku
param:
{
"offer_id": "82605303223525",
"old_price": "6158",
"price": "3658",
"premium_price": "3600",
"currency_code": "CNY",
"sku": 826053031,
"vat": "0"
}
result:
{
"result": {
"items": [
{
"offer_id": "82605303223525",
"product_id": 0,
"status": "failed",
"errors": [
{
"code": "bad_request_error",
"field": "",
"attribute_id": 0,
"state": "new",
"level": "error",
"description": "Техническая ошибка",
"optional_description_elements": [],
"attribute_name": "",
"message": "Неверно указана валюта"
}
]
}
],
"total": 1
}
}
36 строка:
ErrorException
assert(): assert(null !== $requestFactory) failed
при этом версия файла https://github.com/gam6itko/ozon-seller/blob/0.4-x/src/Service/AbstractService.php работает стабильно
ozon-seller/src/Service/AbstractService.php
Lines 132 to 137 in fde98c6
Метод getResponse
не является частью интерфейса RequestExceptionInterface
. В частности, он отсутствует в классе \Http\Client\Exception\NetworkException
, в результате при сетевых ошибках получаем
Call to undefined method Http\Client\Exception\NetworkException::getResponse()
Озон отвечает 502 кодом и
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx</center>
</body>
</html>
В итоге ошибка
PHP Fatal error: Uncaught RuntimeException: Invalid json error response: in /vendor/gam6itko/ozon-seller/src/Service/AbstractService.php:127
Для получения отчета по товарам используется запрос со словом products, а не product.
У озона появились новые параметры у при запросе на создание акта /act/create. Всё есть в новой доке.
Здравствуйте.
Поставил Вашу библиотеку всё настроил. В итоге получаю Invalid JSON payload
Конфиг такой:
array(3) {
["clientId"]=>
string(3) "836"
["apiKey"]=>
string(36) "0296d4f2-70a1-4c09-b507-904fd05567b9"
["host"]=>
string(24) "http://cb-api.ozonru.me/"
}
Т.е. пытаюсь по тестовому апи получить данные о списке заказов по V3
$this->client_config = [
'clientId' => $this->config['test'] ? self::TEST_CLIENT_ID : $this->config['client_id'],
'apiKey' => $this->config['test'] ? self::TEST_API_KEY : $this->config['api_key'],
'host' => 'http://'.$host.'/'
];
$this->client = new GuzzleAdapter(new GuzzleClient());
$this->requestFactory = new RequestFactory();
$this->streamFactory = new StreamFactory();
$this->service = new FbsService($this->client_config, $this->client, $this->requestFactory, $this->streamFactory);
$data = $this->service->list();
Я вывел данные по ошибке:
protected function throwOzonException(string $responseBodyContents): void
{
var_dump('$responseBodyContents', $responseBodyContents);
$errorData = json_decode($responseBodyContents, true);
if (JSON_ERROR_NONE !== json_last_error()) {
throw new OzonSellerException($responseBodyContents);
}
if (!class_exists($className = $this->getExceptionClassByName($errorData['error']['code']))) {
throw new OzonSellerException($responseBodyContents);
}
$errorData = array_merge([
'message' => '',
'data' => [],
], $errorData['error']);
$refClass = new \ReflectionClass($className);
/** @var \Throwable $instance */
$instance = $refClass->newInstance($errorData['message'], $errorData['data']);
throw $instance;
}
Получаю:
string(21) "$responseBodyContents"
string(203) "{"error":{"code":"BAD_REQUEST","message":"Invalid JSON payload","data":[{"name":"cause","code":"","value":"json: cannot unmarshal array into Go value of type map[string]json.RawMessage","message":""}]}} "
Подскажите в чём может быть дело?
Если при вызове unfulfilledList не передать значение with, то озон не может распарсить такой json
{"with":[],"status":["awaiting_packaging"],"sort_by":"updated_at","dir":"asc","offset":0,"limit":50}
Ошибка:
Data: [{"name":"cause","code":"","value":"json: cannot unmarshal array into Go value of type map[string]json.RawMessage","message":""}]
если передать, то запрос будет таким
{"with":{"barcodes":true},"status":["awaiting_packaging"],"sort_by":"updated_at","dir":"asc","offset":0,"limit":50}
и всё норм
От Озона:
Мы запустили вторую версию API, где обновили методы получения списков заказов и их обработки. Она работает стабильнее и лучше оптимизирована. Документация по новой версии: для схемы «Отгрузка со склада продавца», для схемы «Отгрузка со склада Ozon». И важно: перейти на новую версию нужно до Нового года, так как после 9 января старая версия работать уже не будет.
Поле filter является обязательным для запроса /v4/product/info/prices, но если передавать в метод пустой массив, он будет закодирован в json как массив ([]), а api ОЗОНа ожидает объект ({}).
pr идет следом
https://docs.ozon.ru/api/seller#/certificate/types-get
Забирается через GET
Здравствуйте,
Правильно ли я понял, что данный метод в топике у Вас еще не реализован?
ps. Пробую использовать Вашу библиотеку и получаю ошибку по таску, что импортируемый товар подлежит сертификации со ссылкой на данный метод, а быстрым поиском не нашёл в библиотеке.
Есть необходимость считать реальную прибыль, для этого надо получать комиссию Озона.
В документации нет описания методов для получения комиссии.
Задавал вопрос, ответили, что метод есть. Может быть его включить в библиотеку:
POST /v1/product/list/price
{
"filter": {
"offer_id": [],
"product_id": [],
"visibility": "ALL"
},
"page": 1,
"page_size": 100
}
Ответ:
{
"result": {
"items": [
{
"buybox_price": "string",
"commission": {
"percent": 0,
"value": 0
},
"id": 0,
"offer_id": "string",
"old_price": "string",
"premium_price": "string",
"price": "string",
"recommended_price": "string"
}
],
"total": 0
}
}
Добрый день, подскажите, будет ли реализован в ближайшее время в вашей библиотеки ProductService V3?
С 30 августа 2022 года Ozon отключает часть методов, и в списке по ссылке Отключение методов есть следующие строки:
Информация о количестве остатков -> /v3/product/info/stocks
Получить описание характеристик товара -> /v3/products/info/attributes
Методы предыдущих версий будут не доступны.
Products/ImportBySku receive 410 code,
and Response.Message = "obsolete method cannot be used"
Здравствуйте. Частенько получаем следующую ошибку:
Undefined index: error at /var/www/vendor/gam6itko/ozon-seller/src/Service/AbstractService.php:146)
Запрос:
{
"method": "POST",
"uri": "/v1/product/list",
"body": {
"page": 1,
"page_size": 1000,
"filter": {
"visibility": "VISIBLE"
}
}
}
Ответ:
{"code":7,"message":"Invalid Api-Key, please contact support","details":[]}
В методе packageLabel FbsService.php#L129 обработка идет так же как и для других методов - предполагая что в ответе JSON, но в ответе pdf файл https://cb-api.ozonru.me/apiref/ru/#t-fbs_package_label (тоже самое и для метода /v2/posting/fbs/act/get-pdf - https://cb-api.ozonru.me/apiref/ru/#t-section_postings_fbs_act_title).
Добрый день. Неплохо было бы добавить функцию tree - получения списка категорий от Озон
И она могла бы выглядеть так:
/**
* Receive the tree of categories for a specified category or full categories tree.
*
* @param array $categoryId [attribute_type, language]
*
* @return mixed|\Psr\Http\Message\ResponseInterface
*/
public function tree(int $categoryId = 0, array $query = []): array
{
$query = ArrayHelper::pick($query, ['category_id', 'language']);
$query = TypeCaster::castArr($query, [
'category_id' => 'int',
'language' => 'str',
]);
if($categoryId > 0) {
$query = array_merge([
'category_id' => $categoryId,
], $query);
}
$query = array_merge([
'language' => 'RU',
], $query);
return $this->request('POST', "{$this->path}/tree", $query);
}
при 0 d category_id выгружается все дерево
Chat list(/v1/chat/list ) has too much data and is pulled too slowly. Can you provide change time parameters. It takes one hour to pull a store, and many stores can't be pulled at all,can you help me
Перестал работать /v2/category/attribute — 404 page not found
Поддержка озона рекомендует перейти на /v3/category/attribute
«Метод устарел, убрали его из документации. Используйте /v3/category/attribute»
https://docs.ozon.ru/api/seller/#operation/CategoryAPI_GetCategoryAttributesV3
Уже больше месяца, в лог иногда сыпется вот такая ошибка
Argument 1 passed to Gam6itko\OzonSeller\Service\AbstractService::getExceptionClassByName() must be of the type string, null given, called in /vendor/gam6itko/ozon-seller/src/Service/AbstractService.php
Насколько я понимаю, сервер озона не отвечает и вместо ответа null, хотя в функции ожидается строка.
https://docs.ozon.ru/api/seller/#section/9-fevralya-2024
Озон с 9 февраля выдает ошибку по методам /v3/posting/fbs/ship
и /v3/posting/fbs/ship/package
for example:
https://api-seller.ozon.ru/v2/category/attribute
{
"attribute_type": "ALL",
"category_id": 0,
"language": "EN"
}
After passing the request, I got Russian, not English
Поддержка Озона про /import сообщает:
Добавили в запрос параметр primary_image — ссылка на главное изображение товара. Если у вас одно изображение, то его не нужно будет указывать в параметре images, а только в primary_image
Но правила валидации product_validator_v2.php не позволяют опустить параметр images.
Не смотря на то, что в документации озона предлагается указывать главное изображение первым в списке images, мы столкнулись с ошибкам обработки фотографий на стороне Озона. Поэтому нужно явно задавать главное в primary_image
Здравствуйте!
https://api-seller.ozon.ru/v1/finance/realization - такой отчет есть в планах?
Версия библиотеки v0.8.7
Вызов \Gam6itko\OzonSeller\Service\V3\Posting\FbsService::unfulfilledList
без параметров формирует следующий запрос (заголовки опущены для краткости):
POST /v3/posting/fbs/unfulfilled/list HTTP/1.1
{"with":{"analytics_data":false,"barcodes":false,"financial_data":false},"filter":[],"dir":"asc","offset":0,"limit":10}
Ответ:
HTTP/1.1 400 Bad Request
{"code":3,"message":"proto: syntax error (line 1:83): unexpected token [","details":[]}
Полагаю, проблема в том, что при преобразовании в JSON пустой массив преобразуется в []
вместо {}
.
Похожая проблема была в #40, там это решили добавлением дефолтных значений для некоторых полей фильтра (чтобы он никогда не был пустым).
Со вчера начали сыпаться эксепшены
Client error: POST `http://api-seller.ozon.ru/v3/posting/fbs/list` resulted in a `405 Method Not Allowed` response
В AbstractService идет проверка только содержимого контента, но в данном случае нужно проверять статус, тк боди пустое.
Соответственно на выходе получаем пустой эксепшен
Gam6itko\OzonSeller\Exception\OzonSellerException Object
(
[details:protected] => Array
(
)
[message:protected] =>
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /var/www/vhosts/***/local/php_interface/vendor/gam6itko/ozon-seller/src/Service/AbstractService.php
[line:protected] => 146
[trace:Exception:private] => Array
(
)
use V2\Posting\FbsService
$config = ['clientId' => $client_id, 'apiKey' => $api_key, 'host' => $api_url];
$svc = new FbsService($config, new GuzzleAdapter(new GuzzleClient()), new RequestFactory(), new StreamFactory());
$svc->ship($packages, $number_posting);
the exception like this:
proto: syntax error (line 1:13): unexpected token {
can you help me?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.