调用亚马逊FBA入库getShipments接口携带NextToken时报不能为空错误
亚马逊SP API getShipments接口携带NextToken请求报错400问题解决
调用亚马逊Selling Partner API的FBA入库shipment接口
getShipments()时,首次请求成功获取到NextToken;但携带该NextToken再次调用接口时,明明NextToken存在却返回400错误,错误信息为「Request is invalid - NextToken must not be empty」。相关PHP代码如下:
<?php require_once(__DIR__ . '/vendor/autoload.php'); // See README for more information on the Configuration object's options $config = new SellingPartnerApi\Configuration([ "lwaClientId" => "<LWA client ID>", "lwaClientSecret" => "<LWA client secret>", "lwaRefreshToken" => "<LWA refresh token>", "awsAccessKeyId" => "<AWS access key ID>", "awsSecretAccessKey" => "<AWS secret access key>", "endpoint" => SellingPartnerApi\Endpoint::NA // or another endpoint from lib/Endpoints.php ]); $api = new SellingPartnerApi\Api\FbaInboundV0Api($config); // Input data $mpId = $_POST['txtMarketplaceId']; // Blocked since not required $shpStatus = $_POST['txtShpStatus']; try { $shipments = $api->getShipments('SHIPMENT', [$mpId], [$shpStatus]); if(!empty($shipments['payload']['shipment_data'])) { // Check if it has next token if(isset($shipments['payload']['next_token'])){ // Get next token $nextToken = $shipments['payload']['next_token']; // HERE I AM GETTING ERROR $resNextToken = $api->getShipments('NEXT_TOKEN', ['NextToken' => $resNextToken]); print_r($resNextToken); die; } } else { echo "No shipments found"; } } catch (Exception $e) { echo "Exception when calling get shipments API '.$e->getMessage()"; } ?>
问题诊断
你的代码存在两个直接导致报错的错误:
- 变量引用错误:有效NextToken存储在
$nextToken变量中,但调用接口时误用了未定义的$resNextToken,实际传递了空值 - 参数格式错误:当以
NEXT_TOKEN模式调用getShipments时,第二个参数需要直接传入NextToken字符串,而非关联数组['NextToken' => ...]
修复方案
将出错的代码段修改为以下内容:
// Get next token $nextToken = $shipments['payload']['next_token']; // 可选:先验证NextToken有效性 var_dump($nextToken); // 修复后的接口调用 $resNextToken = $api->getShipments('NEXT_TOKEN', $nextToken); print_r($resNextToken); die;
额外验证建议
- 执行代码前用
var_dump($nextToken)确认获取到的是有效非空字符串 - 核对SP API PHP SDK方法定义:
getShipments(string $shipment_status, string|array $next_token_or_marketplace_ids = null, array $shipment_status_list = null),当第一个参数为NEXT_TOKEN时,第二个参数必须为字符串类型的NextToken
内容的提问来源于stack exchange,提问作者Muhammad Tarique
相关产品推荐
相关产品推荐

