SP API Shipping模块getRates接口返回InvalidInput错误排查
修复方案
错误根因
该报错和传入的参数内容本身无关,是传参方式不符合python-sp-api库的封装规则:Shipping.get_rates()方法不会解析传入的body字典内的顶层字段,库内部做请求序列化时,要求将请求体的各字段直接作为关键字参数传入。将所有请求参数包裹在body键中传递时,最终构造的HTTP请求体里没有这几个必填字段,SP API服务端收到的对应参数值全为null,因此触发校验错误。
修正代码
移除外层的body包裹,将所有请求字段直接作为关键字参数传入get_rates()方法即可:
from sp_api.api import Shipping from sp_api.base import Marketplaces credentials = dict( refresh_token='*******', lwa_app_id='********', lwa_client_secret='******', aws_secret_key='*****', aws_access_key='****', role_arn='arn:aws:iam::882****:role/FTSPAPIRole' ) ship_obj = Shipping(credentials=credentials, marketplace=Marketplaces.CA) rates = ship_obj.get_rates( shipTo={ "name": "Ellen Adams", "addressLine1": "8 Industrial Rd", "addressLine2": "", "addressLine3": "", "stateOrRegion": "MA", "city": "Milford", "countryCode": "US", "postalCode": "01757", "email": "testmainmail@gmail.com", "copyEmails": ["testmail@gmail.com"], "phoneNumber": "917066033" }, shipFrom={ "name": "Jack Williams", "addressLine1": "38 Wellington St", "addressLine2": "", "addressLine3": "", "stateOrRegion": "Ontario", "city": "St Thomas", "countryCode": "CA", "postalCode": "N5R 2P4", "email": "testmail2@gmail.com", "copyEmails": ["testmail3@gmail.com"], "phoneNumber": "5196144583" }, serviceTypes=["Amazon Shipping Ground"], shipDate="2019-08-24T14:15:22Z", containerSpecifications=[ { "dimensions": { "length": 23.62, "width": 20.83, "height": 2.29, "unit": "CM" }, "weight": { "unit": "g", "value": 204 } } ] )
补充排查点
如果调整传参方式后仍有报错,依次检查以下两项:
- 若使用的python-sp-api版本低于0.18.0,Shipping模块部分接口存在参数映射bug,升级到最新稳定版即可
- 确认所选服务类型
Amazon Shipping Ground支持美加跨境配送,该服务在部分站点仅提供境内配送能力
内容的提问来源于stack exchange,提问作者Doğukan Özdemir
相关产品推荐
相关产品推荐

