jlevers / selling-partner-api

A PHP client library for Amazon's Selling Partner API
BSD 3-Clause "New" or "Revised" License
398 stars 185 forks source link

getOrder - Dto not working #668

Closed nikgilbe closed 5 months ago

nikgilbe commented 6 months ago

Problem description:

When calling getOrder using v6, getting an error trying to access response payload via Dto. Working OK with json, and Dto also working OK with getOrderItems, getOrderAddress

Error:

PHP Fatal error: Uncaught ArgumentCountError: SellingPartnerApi\Seller\OrdersV0\Dto\Address::__construct(): Argument #1 ($name) not passed in /v6/vendor/jlevers/selling-partner-api/src/Seller/OrdersV0/Dto/Address.php:40 Stack trace:

0 /v6/vendor/highsidelabs/saloon-sdk-generator/src/Traits/Deserializes.php(74): SellingPartnerApi\Seller\OrdersV0\Dto\Address->__construct()

1 /v6/vendor/highsidelabs/saloon-sdk-generator/src/Traits/Deserializes.php(96): Crescat\SaloonSdkGenerator\BaseDto::deserialize()

2 /v6/vendor/highsidelabs/saloon-sdk-generator/src/Traits/Deserializes.php(66): Crescat\SaloonSdkGenerator\BaseDto::deserializeValue()

3 /v6/vendor/highsidelabs/saloon-sdk-generator/src/Traits/Deserializes.php(96): Crescat\SaloonSdkGenerator\BaseDto::deserialize()

4 /v6/vendor/highsidelabs/saloon-sdk-generator/src/Traits/Deserializes.php(66): Crescat\SaloonSdkGenerator\BaseResponse::deserializeValue()

5 /v6/vendor/jlevers/selling-partner-api/src/Seller/OrdersV0/Requests/GetOrder.php(42): Crescat\SaloonSdkGenerator\BaseResponse::deserialize()

6 /v6/vendor/saloonphp/saloon/src/Http/Response.php(296): SellingPartnerApi\Seller\OrdersV0\Requests\GetOrder->createDtoFromResponse()

7 /v6/afiRequestBunkerOrder.php(49): Saloon\Http\Response->dto()

8 {main}

thrown in /v6/vendor/jlevers/selling-partner-api/src/Seller/OrdersV0/Dto/Address.php on line 40

Via json: Array ( [payload] => Array ( [BuyerInfo] => Array ( [BuyerEmail] =>...............................

Code

$sp_conn = getSecret($client, 'sp-api'); $connector = SellingPartnerApi::make( clientId: $sp_conn['client_id'], clientSecret: $sp_conn['secret'], refreshToken: $sp_conn['refresh_token'], endpoint: Endpoint::EU, )->seller();

$ordersApi= $connector->orders();

$order_id = $argv[1]; $response = $ordersApi->getOrder($order_id); $dto = $response->dto(); print_r($dto->payload);

$json = $response->json(); print_r($json);



## Seller Central SP API config page screenshot

*your screenshot here*
jlevers commented 6 months ago

Ah, probably because the name only comes back if the order is retrieved with an RDT. I'll update that, thanks for the report!

jlevers commented 6 months ago

Should be fixed in v6.0.3.

nikgilbe commented 5 months ago

Thanks Jesse - just upgraded and tested fine