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

Python Zeep调用WebService报错:输入字符串格式不正确

解决Zeep调用WebService时Voucher ID字段格式转换错误

问题分析

从报错信息可定位两个核心问题:

  • XML解析阶段提示输入字符串格式错误,说明Zeep生成的XML中FieldValue的格式不匹配服务器预期
  • 服务器明确返回Voucher ID cannot be converted to Text,说明字段类型匹配异常——要么传入值的类型不符合要求,要么Zeep自动序列化时未按服务器要求的Text类型格式生成XML

可行解决方案

1. 用Zeep工厂创建对应类型的FieldValue

Zeep会根据WSDL生成专属类型构造器,需显式创建服务器期望的Text类型实例,而非直接赋值字符串:

# 根据你的WSDL命名空间调整(常见为ns0、ns1),获取Text类型构造器
text_type = factory.get_type('ns0:Text')
# 用构造器生成符合要求的值,再赋值给FieldValue
voucher_id.FieldValue = text_type("test")

2. 完善FieldWithValue的结构声明

部分WebService的FieldWithValue类型需额外指定字段类型标识(如FieldType),确保类型与值匹配:

voucher_id.FieldId = 15
voucher_id.FieldType = "Text"  # 需与WSDL中定义的类型名称一致
voucher_id.FieldValue = "test"

3. 开启Zeep调试查看实际XML请求

启用调试日志,检查Zeep生成的XML内容,对比服务器要求的格式:

import logging
logging.basicConfig(level=logging.DEBUG)

重点关注<FieldValue>节点的结构,比如是否缺失类型声明(如xsi:type="ns0:Text"),这类缺失会导致服务器无法正确解析值的类型。

4. 核对WSDL中的字段定义

直接查看WSDL文档里FieldWithValue和Voucher ID字段的类型定义,确认:

  • FieldValue的类型是Text还是其他复杂类型
  • 是否需要嵌套结构(比如Text类型包含子节点)

修正后示例代码

# 设置字段
voucher_id.FieldId = 15   # Voucher ID
# 通过工厂创建符合要求的Text类型值
text_type = factory.get_type('ns0:Text')
voucher_id.FieldValue = text_type("test")

# 构造字段数组
field_array = factory.ArrayOfFieldWithValue()
field_array['FieldWithValue'].append(voucher_id)

# 调用服务函数添加文档信息

内容的提问来源于stack exchange,提问作者SpicyPirate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:03:18