You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用亚马逊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()"; 
    }

?>

问题诊断

你的代码存在两个直接导致报错的错误:

  1. 变量引用错误:有效NextToken存储在$nextToken变量中,但调用接口时误用了未定义的$resNextToken,实际传递了空值
  2. 参数格式错误:当以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:54:54