-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Проблема формата выгрузки платежа #179
Comments
В самом исключении есть подробности о том, с какими полями возникла проблема, но эту информацию можно получить при корректной обработке исключения (пример). Локально можно быстро определить в чем причина ошибки вот так: 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],
);
} При проверке, информация об ошибке в логах не изменилась...
|
В данном вами коде обработки нет вывода информации о полях, которые не проходят валидацию на стороне 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);
} Этот блок Также вы можете временно инициализировать 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 данные запроса и ответа. Эти данные помогут разобраться в чем проблема. |
Да, так получилось добыть информацию об ошибке. |
Здравствуйте.
Столкнулись с проблемой на сервере разработки, что перестала выгружаться информация о платежах в ЦРМ.
Используем клиент версии 6.13.1 (но так же пробовали понизить до 6.12.5, результат такой же)
В логах ошибка выглядит так:
Сам объект, который должен выгрузиться выглядит так:
Для выгрузки используем класс
RetailCrm\Api\Model\Request\Orders\OrdersPaymentsCreateRequest
и метод
RetailCrm\Api\ResourceGroup\Orders::paymentsCreate
Пробовал убирать данные, оставляя только externalId и order.externalId. Результат не изменился и выглядит так же.
При этом всё то же самое (код, версия клиента, ключи и данные для выгрузки в ЦРМ) локально с моей машины работает корректно.
К сожалению, сообщение в ошибке не очень информативно.
Скажите пожалуйста, в чём проблема и как её исправить?
The text was updated successfully, but these errors were encountered: