【问题标题】:API FedEX "INVALID.INPUT.EXCEPTION","message":"Invalid field value in the input"API FedEX "INVALID.INPUT.EXCEPTION","message":"输入中的无效字段值"
【发布时间】:2022-07-23 03:28:54
【问题描述】:

我正在尝试使用 Python 3.8 验证 FedEX API 中的地址,它返回无效字段值的错误

首先我连接到 Auth API

payload={"grant_type": "client_credentials",'client_id':Client_id,'client_secret':Client_secret}
url = "https://apis-sandbox.fedex.com/oauth/token"
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response=requests.post(url, data=(payload), headers=headers)

它会正确返回带有 Auth 令牌的消息

{"access_token":"eyJhbGciOiJSUzI1NiIsInRM5U0F2eUs1ZVFBVTFzS5k","token_type":"bearer","expires_in":3599,"scope":"CXS SECURE"}

然后我只需获取令牌以在接下来的交易中使用它

token = json.loads(response.text)['access_token']

然后我为地址验证 API 准备下一个负载

payload_valid_address = {
    "addressesToValidate": [
        {
    "address":
            {
            "streetLines": ["7372 PARKRIDGE BLVD"],
            "city": "Irving",
            "stateOrProvinceCode": "TX",
            "postalCode": "75063-8659",
            "countryCode": "US"
            }
        }
    ]
}

并使用给定的令牌将请求发送到新端点

url = "https://apis-sandbox.fedex.com/address/v1/addresses/resolve"
headers = {
    'Content-Type': "application/json",
    'X-locale': "en_US",
    'Authorization': 'Bearer '+ token
    }

response = requests.post(url, data=payload_valid_address, headers=headers)

print(response.text)

并得到错误

<Response [422]>
{"transactionId":"50eae03e-0fec-4ec7-b068-d5c456b64fe5","errors":[{"code":"INVALID.INPUT.EXCEPTION","message":"Invalid field value in the input"}]}

我进行了无数次测试,但没有得到无效字段。 有谁知道发生了什么并可以提供帮助?

【问题讨论】:

  • FedEX 使用 OAuth 2.0 令牌身份验证方法来授权应用程序并验证 API 请求。
  • 尝试使用来自jsonstring对象:import json payload_valid_address = '''{ "addressesToValidate": [ { "address": { "streetLines": ["7372 PARKRIDGE BLVD"], "city": "Irving", "stateOrProvinceCode": "TX", "postalCode": "75063-8659", "countryCode": "US" } } ] }''' PAYLOAD_VALID_ADDRESS = json.load(PAYLOAD_VALID_ADDRESS)
  • 同样的问题。我尝试将其他端点 API 与其他有效负载一起使用,但遇到了同样的问题。另一点是错误 422 未在 FedEX 文档及其 Json Schema 中列出。我认为问题不在于有效负载,而在于我访问 API 或验证令牌的方式。

标签: python json fedex


【解决方案1】:

payload = json.dumps({input payload}) 这可以防止响应错误 422

【讨论】:

    【解决方案2】:

    我已经解决了

    由于任何原因,将字符串payload_valid_address转换为Json 2个步骤不起作用

    payload_valid_address = {....}
    payload = json.dumps(payload_valid_address)
    

    但如果仅一步完成,它就会通过 API 请求

    payload_valid_address = json.dumps({....})
    

    【讨论】:

      【解决方案3】:

      当 json 数据包含 false、true 或 null 等关键字时,我也遇到了这个错误,并且还必须使用 json.loads(json_string)

      import json
      
      json_string = r'''{
        "accountNumber": {
          "value": "802255209"
        },
        "requestedShipment": {
          "shipper": {
            "address": {
              "postalCode": 75063,
              "countryCode": "US"
            }
          },
          "recipient": {
            "address": {
              "postalCode": "m1m1m1",
              "countryCode": "CA"
            }
          },
          "shipDateStamp": "2020-07-03",
          "pickupType": "DROPOFF_AT_FEDEX_LOCATION",
          "serviceType": "INTERNATIONAL_PRIORITY",
          "rateRequestType": [
            "LIST",
            "ACCOUNT"
          ],
          "customsClearanceDetail": {
            "dutiesPayment": {
              "paymentType": "SENDER",
              "payor": {
                "responsibleParty": null
              }
            },
            "commodities": [
              {
                "description": "Camera",
                "quantity": 1,
                "quantityUnits": "PCS",
                "weight": {
                  "units": "KG",
                  "value": 20
                },
                "customsValue": {
                  "amount": 100,
                  "currency": "USD"
                }
              }
            ]
          },
          "requestedPackageLineItems": [
            {
              "weight": {
                "units": "KG",
                "value": 20
              }
            }
          ]
        }
      }'''
      
      data = json.loads(json_string)
      data
      
      response = requests.request("POST", url, data=json.dumps(data), headers=headers)
      

      【讨论】:

        猜你喜欢
        • 2019-05-20
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 2023-03-24
        • 1970-01-01
        • 2021-09-09
        • 2017-07-01
        相关资源
        最近更新 更多