使用Python调用Fedex Web Services上传信头签名遇zeep异常求助
问题:Fedex Web Services上传信头/签名失败排查
我正在用Python开发Fedex Web Services相关功能,需要上传信头(LetterHead)和签名(Signature)至Fedex平台,用于将二者打印在商业发票上。尝试过程中遇到错误,不清楚遗漏了什么,特寻求帮助。
错误信息
File "/.local/lib/python3.8/site-packages/zeep/proxy.py", line 40, in __call__ return self._proxy._binding.send( File "/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 132, in send return self.process_reply(client, operation_obj, response) File "/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 194, in process_reply return self.process_error(doc, operation) File "/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 295, in process_error raise Fault( zeep.exceptions.Fault: Fault
相关代码
fileContent = open('/src/img/logomin.png', "rb").read() fileBase64 = base64.b64encode(fileContent) UploadImageDetail = self.factory.UploadImageDetail() UploadImageDetail.Id = "IMAGE_1" UploadImageDetail.Image = fileBase64 self.Images.append(UploadImageDetail) self.client.service.uploadImages( WebAuthenticationDetail=self.WebAuthenticationDetail, ClientDetail=self.ClientDetail, TransactionDetail=self.TransactionDetail, Version=self.VersionId, Images=self.Images, )
使用的WSDL
UploadDocumentService_v11.wsdl
排查建议
- 补充必填字段:根据WSDL定义,
UploadImageDetail需指定ImageType(可选值如LETTER_HEAD、SIGNATURE)和Usage(如COMMERCIAL_INVOICE),这两个字段是接口要求的必填项,当前代码未设置会导致请求不合法。示例补充代码:UploadImageDetail.ImageType = "LETTER_HEAD" UploadImageDetail.Usage = "COMMERCIAL_INVOICE" - 修正Base64编码格式:
base64.b64encode返回字节对象,Zeep接口需要字符串类型,需解码为UTF-8字符串:fileBase64 = base64.b64encode(fileContent).decode('utf-8') - 检查图片合规性:Fedex要求上传图片为PNG/JPG格式,信头建议尺寸≤1000x200像素,签名≤500x200像素,文件大小不能超过上限,确认你的图片符合要求。
- 验证身份权限:确认
WebAuthenticationDetail、ClientDetail中的账号、密钥、密码正确,且账号有权限使用上传图片的接口。 - 开启调试日志:添加Zeep调试日志,查看完整SOAP请求和响应,定位具体错误原因:
import logging logging.basicConfig(level=logging.INFO) logging.getLogger('zeep').setLevel(logging.DEBUG)
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

