diff --git a/composer.json b/composer.json index 9122dc2..3300392 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "psr/log": "^1.0", "sanmai/json-serializer": "^0.2.2", "sanmai/pipeline": "^5", - "sanmai/sdk-common": "^0.2.7", + "sanmai/sdk-common": "^0.2.8", "sanmai/version-info": "^0.2.0", "symfony/http-foundation": "^4.4.7 || ^5.0.7" }, diff --git a/examples/110_CreateAndSubmitOrder.php b/examples/110_CreateAndSubmitOrder.php index ce988a4..1b6506b 100644 --- a/examples/110_CreateAndSubmitOrder.php +++ b/examples/110_CreateAndSubmitOrder.php @@ -33,14 +33,16 @@ include_once 'vendor/autoload.php'; +$logger = new DebuggingLogger(); + $builder = new \YDeliverySDK\ClientBuilder(); $builder->setToken($_SERVER['YANDEX_DELIVERY_TOKEN'] ?? ''); -$builder->setLogger(new DebuggingLogger()); +$builder->setLogger($logger); /** @var \YDeliverySDK\Client $client */ $client = $builder->build(); /** - * Получим данные по адресу. + * Получим данные по адресу получателя. */ $response = $client->makeLocationRequest('Новосибирская область, Новосибирск'); @@ -75,6 +77,7 @@ $request->senderId = $_SERVER['YANDEX_SHOP_ID']; +$request->from->geoId = $_SERVER['YANDEX_SENDER_GEOID']; $request->to->location = 'Новосибирск, ул. Державина, 5'; $request->dimensions->length = $length = 10; @@ -88,12 +91,15 @@ $request->shipment->date = new DateTime('next Monday'); $request->shipment->type = $request->shipment::TYPE_WITHDRAW; -$request->cost->assessedValue = 500; +$request->cost->assessedValue = 1000; $request->cost->itemsSum = 1000; $request->cost->fullyPrepaid = true; // $request->tariffId = 333333333; +$logger->addFile('delivery-options-request.json'); +$logger->addFile('delivery-options-response.json'); + $response = $client->sendDeliveryOptionsRequest($request); if (!\count($response)) { @@ -164,6 +170,9 @@ $contact->firstName = 'Василий'; $contact->lastName = 'Юрочкин'; +$logger->addFile('create-order-request.json'); +$logger->addFile('create-order-response.json'); + $response = $client->sendCreateOrderRequest($request); if ($response->hasErrors()) { @@ -181,6 +190,9 @@ $request = new SubmitOrderRequest(); $request->orderIds = [$response->id]; +$logger->addFile('submit-order-request.json'); +$logger->addFile('submit-order-response.json'); + $response = $client->sendSubmitOrderRequest($request); if ($response->hasErrors()) { diff --git a/tests/Integration/DebuggingLogger.php b/tests/Integration/DebuggingLogger.php index 0d0c216..54e59bb 100644 --- a/tests/Integration/DebuggingLogger.php +++ b/tests/Integration/DebuggingLogger.php @@ -35,13 +35,8 @@ final class DebuggingLogger implements LoggerInterface { use LoggerTrait; - /** - * Если нужна запись в файл, то нужно скопировать этот файл себе в проект, заменив namespace, и поменять константу ниже на true. - * Лог будет записан в delivery-requests.log в корне проекта. - * - * @var bool - */ - private const WRITE_LOG_TO_FILE = false; + /** @var string[] */ + private $filename = []; /** * @param mixed $level @@ -56,7 +51,7 @@ public function log($level, $message, array $context = []) $message = \strtr($message, \iterator_to_array(self::context2replacements($context), true)); } - if (!self::WRITE_LOG_TO_FILE && \strpos($message, 'WITHDRAW') !== false) { + if (\strpos($message, 'WITHDRAW') !== false) { // Заявка на Забор (WITHDRAW) тарифицируется сразу же как была подтверждена службой доставки. \trigger_error('Forbidden request', E_USER_ERROR); } @@ -64,30 +59,20 @@ public function log($level, $message, array $context = []) // В целях отладки приведём JSON в читаемый вид if (\strpos($message, '{') === 0 || \strpos($message, '[') === 0) { $message = \json_encode(\json_decode($message), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + + if ($this->filename !== []) { + $saveTo = \array_shift($this->filename); + \file_put_contents($saveTo, $message); + \fwrite(\STDERR, "\n\n(Saved below message to $saveTo)"); + } } - \fwrite(self::WRITE_LOG_TO_FILE ? $this->getLogFileHandle() : \STDERR, "\n{$message}\n\n"); + \fwrite(\STDERR, "\n{$message}\n\n"); } - private const LOG_FILE = 'delivery-requests.log'; - - /** - * Возвращает указатель на открытый файл delivery-requests.log в корне проекта. - * - * @return resource - */ - private static function getLogFileHandle() + public function addFile(string $filename): void { - static $fh; - - if (!$fh) { - $reflection = new \ReflectionClass(\Composer\Autoload\ClassLoader::class); - $fh = \fopen(\dirname((string) $reflection->getFileName(), 3).DIRECTORY_SEPARATOR.self::LOG_FILE, 'a'); - } - - \assert(\is_resource($fh)); - - return $fh; + $this->filename[] = $filename; } /**