GithubHelp home page GithubHelp logo

Comments (4)

Neur0toxine avatar Neur0toxine commented on July 30, 2024

В самом исключении есть подробности о том, с какими полями возникла проблема, но эту информацию можно получить при корректной обработке исключения (пример). Локально можно быстро определить в чем причина ошибки вот так:

try {
    // здесь код вашего запроса
} catch (ApiExceptionInterface | ClientExceptionInterface $exception) {
    echo $exception; // выведет подробности ошибки
}

from api-client-php.

fowork1 avatar fowork1 commented on July 30, 2024

В самом исключении есть подробности о том, с какими полями возникла проблема, но эту информацию можно получить при корректной обработке исключения (пример). Локально можно быстро определить в чем причина ошибки вот так:

try {
    // здесь код вашего запроса
} catch (ApiExceptionInterface | ClientExceptionInterface $exception) {
    echo $exception; // выведет подробности ошибки
}

Я добавил обработку классов исключений, о которых вы написали.
Эта часть кода стала выглядеть так:

try {
        $retailCrmOrderPaymentRequest = $this->preparePaymentForExport->run($payment);
        $this->crmClient->orders->paymentsCreate($retailCrmOrderPaymentRequest);
        $exchangeStatus = ExchangeStatusDict::DONE;
} catch (ApiExceptionInterface | ClientExceptionInterface $e) {
        $exchangeStatus = ExchangeStatusDict::ERROR;
        Log::error(
            '[export:PaymentExportCreateAction] Ошибка создания платежа (' . $payment->id . ') в ЦРМ через API. ' . $e->getMessage(),
            ['full exception' => $e],
        );
} catch (Throwable $e) {
        $exchangeStatus = ExchangeStatusDict::ERROR;
        Log::error(
            '[export:PaymentExportCreateAction] Общая Ошибка создания платежа (' . $payment->id . ') в ЦРМ. ' . $e->getMessage(),
            ['exception' => $e],
        );
}

При проверке, информация об ошибке в логах не изменилась...

production.ERROR: [export:PaymentExportCreateAction] Ошибка создания платежа (1956) в ЦРМ через API. Errors in the entity format {"full exception":"[object] (RetailCrm\\Api\\Exception\\Api\\ValidationException(code: 400): Errors in the entity format at /var/www/html/vendor/retailcrm/api-client-php/src/Factory/ApiExceptionFactory.php:62)
[stacktrace]
#0 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/Response/ErrorResponseHandler.php(36): RetailCrm\\Api\\Factory\\ApiExceptionFactory->createException()
#1 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/Response/AbstractResponseHandler.php(69): RetailCrm\\Api\\Handler\\Response\\ErrorResponseHandler->handleResponse()
#2 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/AbstractHandler.php(35): RetailCrm\\Api\\Handler\\Response\\AbstractResponseHandler->handle()
#3 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/Response/AbstractResponseHandler.php(85): RetailCrm\\Api\\Handler\\AbstractHandler->handle()
#4 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/Response/AccountNotFoundHandler.php(56): RetailCrm\\Api\\Handler\\Response\\AbstractResponseHandler->next()
#5 /var/www/html/vendor/retailcrm/api-client-php/src/Handler/Response/AbstractResponseHandler.php(69): RetailCrm\\Api\\Handler\\Response\\AccountNotFoundHandler->handleResponse()
#6 /var/www/html/vendor/retailcrm/api-client-php/src/Component/Transformer/ResponseTransformer.php(63): RetailCrm\\Api\\Handler\\Response\\AbstractResponseHandler->handle()
#7 /var/www/html/vendor/retailcrm/api-client-php/src/ResourceGroup/AbstractApiResourceGroup.php(133): RetailCrm\\Api\\Component\\Transformer\\ResponseTransformer->createResponse()
#8 /var/www/html/vendor/retailcrm/api-client-php/src/ResourceGroup/Orders.php(675): RetailCrm\\Api\\ResourceGroup\\AbstractApiResourceGroup->sendRequest()
#9 /var/www/html/app/Containers/CrmIntegrationSection/RetailCrm/Actions/PaymentExportCreateAction.php(30): RetailCrm\\Api\\ResourceGroup\\Orders->paymentsCreate()
#10 /var/www/html/app/Containers/CrmIntegrationSection/RetailCrm/Jobs/CreatePaymentInRetailCrmJob.php(18): App\\Containers\\CrmIntegrationSection\\RetailCrm\\Actions\\PaymentExportCreateAction->run()
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\\Containers\\CrmIntegrationSection\\RetailCrm\\Jobs\\CreatePaymentInRetailCrmJob->handle()
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(661): Illuminate\\Container\\BoundMethod::call()
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\\Container\\Container->call()
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Bus\\Dispatcher->Illuminate\\Bus\\{closure}()
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\\Pipeline\\Pipeline->then()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(124): Illuminate\\Bus\\Dispatcher->dispatchNow()
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Queue\\CallQueuedHandler->Illuminate\\Queue\\{closure}()
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(126): Illuminate\\Pipeline\\Pipeline->then()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\Queue\\CallQueuedHandler->dispatchThroughMiddleware()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\\Queue\\CallQueuedHandler->call()
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(425): Illuminate\\Queue\\Jobs\\Job->fire()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(375): Illuminate\\Queue\\Worker->process()
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(173): Illuminate\\Queue\\Worker->runJob()
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\Queue\\Worker->daemon()
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\Queue\\Console\\WorkCommand->runWorker()
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Queue\\Console\\WorkCommand->handle()
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(661): Illuminate\\Container\\BoundMethod::call()
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\\Container\\Container->call()
#37 /var/www/html/vendor/symfony/console/Command/Command.php(326): Illuminate\\Console\\Command->execute()
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(153): Symfony\\Component\\Console\\Command\\Command->run()
#39 /var/www/html/vendor/symfony/console/Application.php(1063): Illuminate\\Console\\Command->run()
#40 /var/www/html/vendor/symfony/console/Application.php(320): Symfony\\Component\\Console\\Application->doRunCommand()
#41 /var/www/html/vendor/symfony/console/Application.php(174): Symfony\\Component\\Console\\Application->doRun()
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run()
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(155): Illuminate\\Console\\Application->run()
#44 /var/www/html/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#45 {main}
"} ```

from api-client-php.

Neur0toxine avatar Neur0toxine commented on July 30, 2024

В данном вами коде обработки нет вывода информации о полях, которые не проходят валидацию на стороне API. Получить эту информацию можно обработав ошибку как указано в документации (ссылку я указывал ранее):

try {
   ...
} catch (ValidationException $exception) {
    echo 'Errors in fields:' . PHP_EOL;
    
    foreach ($exception->getErrorResponse()->errors as $field => $error) {
        printf(" - %s: %s\n", $field, $error);
    }
    
    exit(-1);
}

Этот блок catch должен быть первым. $exception->getErrorResponse()->errors в нем вы можете передавать в ваш логгер так же, как вы передаете ключ full exception.

Также вы можете временно инициализировать API-клиент следующим образом:

use RetailCrm\Api\Builder\ClientBuilder;
use RetailCrm\Api\Builder\FormEncoderBuilder;
use RetailCrm\Api\Handler\Request\HeaderAuthenticatorHandler;
use Psr\Log\AbstractLogger;

$client = (new ClientBuilder())
    ->setApiUrl('здесь URL системы')
    ->setAuthenticatorHandler(new HeaderAuthenticatorHandler('здесь API-ключ'))
    ->setFormEncoder((new FormEncoderBuilder())->build())
    ->setDebugLogger(new class extends AbstractLogger {
        public function log($level, $message, array $context = [])
        {
            printf('[%s] %s %s' . PHP_EOL, $level, $message, json_encode($context));
        }
    })
    ->build();

Инициализированный таким образом клиент выведет в stdout данные запроса и ответа. Эти данные помогут разобраться в чем проблема.

from api-client-php.

fowork1 avatar fowork1 commented on July 30, 2024

Да, так получилось добыть информацию об ошибке.
Спасибо большое за ваш ответ )

from api-client-php.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.