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

Python调用DHL SOAP API创建运单获取面单的实现求助

DHL API 调用修复方案

端点配置说明

你本地存储的WSDL文件默认内置了DHL生产环境的请求端点,若要使用沙箱环境测试,需要手动覆盖请求地址,无需修改WSDL文件内容。

现有问题修复

错误1:SOAP认证头命名空间不匹配

你当前构造认证头使用的是测试命名空间http://test.python-zeep.org,不符合DHL接口要求,需要替换为官方cis命名空间http://dhl.de/webservice/cisbase。

错误2:请求体参数缺失

Missing Element Version报错是由于调用createShipmentOrder方法时未传入任何请求参数,接口要求的必填字段全部为空,按照你提供的测试XML结构构造字典参数传入即可。

修复后完整代码

from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client, xsd
from zeep.transports import Transport

# 认证信息
gateway_user = "my_user_name"
gateway_password = "my_password"
api_user = "2222222222_01" # 官方文档提供的测试用户
api_signature = "pass" # 官方文档提供的测试签名
test_account_number = "22222222220101" # 替换为你自己的V62WP产品对应测试账号

# 本地WSDL路径
wsdl = "./geschaeftskundenversand-api-3.1.8.wsdl"
# DHL沙箱端点
dhl_sandbox_endpoint = "https://cig.dhl.de/services/sandbox/soap"

session = Session()
# 网关基础认证
session.auth = HTTPBasicAuth(gateway_user, gateway_password)
client = Client(wsdl, transport=Transport(session=session))
# 配置沙箱端点
client.set_options(address=dhl_sandbox_endpoint)

# 构造正确命名空间的认证头
header = xsd.Element(
    '{http://dhl.de/webservice/cisbase}Authentification',
    xsd.ComplexType([
        xsd.Element('{http://dhl.de/webservice/cisbase}user', xsd.String()),
        xsd.Element('{http://dhl.de/webservice/cisbase}signature', xsd.String()),
    ])
)
header_value = header(user=api_user, signature=api_signature)

# 构造请求体参数,完全对应你提供的测试XML结构
request_data = {
    "Version": {
        "majorRelease": 3,
        "minorRelease": 1
    },
    "ShipmentOrder": [
        {
            "sequenceNumber": "",
            "Shipment": {
                "ShipmentDetails": {
                    "product": "V62WP",
                    "accountNumber": test_account_number,
                    "customerReference": "123456",
                    "shipmentDate": "2021-09-03",
                    "costCentre": "",
                    "ShipmentItem": {
                        "weightInKG": 1,
                        "lengthInCM": 25,
                        "widthInCM": 15,
                        "heightInCM": 1
                    },
                    "Service": {},
                    "Notification": {
                        "recipientEmailAddress": "empfaenger@test.de"
                    }
                },
                "Shipper": {
                    "Name": {
                        "name1": "Absender Zeile 1",
                        "name2": "Absender Zeile 2",
                        "name3": "Absender Zeile 3"
                    },
                    "Address": {
                        "streetName": "Vegesacker Heerstr.",
                        "streetNumber": "111",
                        "zip": "28757",
                        "city": "Bremen",
                        "Origin": {
                            "country": "",
                            "countryISOCode": "DE"
                        }
                    },
                    "Communication": {
                        "phone": "+49421987654321",
                        "email": "absender@test.de",
                        "contactPerson": "Kontaktperson Absender"
                    }
                },
                "Receiver": {
                    "name1": "Name",
                    "Address": {
                        "name2": "Empfänger Zeile 2",
                        "name3": "Empfänger Zeile 3",
                        "streetName": "Street",
                        "streetNumber": "Number",
                        "zip": "zipCode",
                        "city": "City",
                        "Origin": {
                            "country": "",
                            "countryISOCode": "DE"
                        }
                    },
                    "Communication": {
                        "phone": "+49421123456789",
                        "email": "empfaenger@test.de",
                        "contactPerson": "Kontaktperson Empfänger"
                    }
                }
            },
            "PrintOnlyIfCodeable": {"active": 1}
        }
    ],
    "labelResponseType": "URL",
    "groupProfileName": "",
    "labelFormat": "",
    "labelFormatRetoure": "",
    "combinedPrinting": 0
}

# 发起请求
response = client.service.createShipmentOrder(
    **request_data,
    _soapheaders=[header_value]
)

# 打印返回结果
print(response)
# 可以从response中提取状态、运单号、面单URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:30:03