如何通过UPS API获取交付证明(POD)PDF文件?
解决UPS Track API获取交付证明(POD)PDF的问题
问题根源
你当前使用的Request Option 15仅用于获取签名追踪信息,并不包含交付证明(POD)的文档数据。要获取POD PDF,需要更换为支持返回文档的请求选项。
解决方案步骤
修改请求选项
UPS Track API中,使用Request Option "1"(返回完整追踪详情,包含所有可用文档)或者Request Option "7"(专门请求交付证明相关内容),都可以让响应中返回Document对象。将代码中的请求选项替换为对应值:String[] requestOption = { "1" }; // 或者用 "7" request.RequestOption = requestOption;解析并保存POD PDF
当请求成功后,trackResponse.Shipment[0].Document会包含POD的Base64编码内容,你可以将其解码并保存为PDF文件:if (trackResponse.Shipment[0].Document != null && trackResponse.Shipment[0].Document.Length > 0) { // 获取Base64编码的PDF内容 string podBase64 = trackResponse.Shipment[0].Document[0].Content; // 解码Base64为字节数组 byte[] podBytes = Convert.FromBase64String(podBase64); // 保存为PDF文件 File.WriteAllBytes(@"C:\Path\To\Save\POD.pdf", podBytes); Console.WriteLine("交付证明PDF已保存"); } else { Console.WriteLine("未找到交付证明文档,请确认运单已完成交付"); }
完整修改后的代码示例
TrackService track = new TrackService(); TrackRequest tr = new TrackRequest(); UPSSecurity upss = new UPSSecurity(); UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); upssSvcAccessToken.AccessLicenseNumber = "Your access license number"; upss.ServiceAccessToken = upssSvcAccessToken; UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); upssUsrNameToken.Username = "Your username"; upssUsrNameToken.Password = "Your password"; upss.UsernameToken = upssUsrNameToken; track.UPSSecurityValue = upss; RequestType request = new RequestType(); String[] requestOption = { "1" }; // 替换为支持POD的请求选项 request.RequestOption = requestOption; tr.Request = request; tr.InquiryNumber = "Your track inquiry number"; System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11; TrackResponse trackResponse = track.ProcessTrack(tr); Console.WriteLine("交易状态: " + trackResponse.Response.ResponseStatus.Description); Console.WriteLine("运输服务: " + trackResponse.Shipment[0].Service.Description); // 处理交付证明PDF if (trackResponse.Shipment[0].Document != null && trackResponse.Shipment[0].Document.Length > 0) { string podBase64 = trackResponse.Shipment[0].Document[0].Content; byte[] podBytes = Convert.FromBase64String(podBase64); File.WriteAllBytes(@"POD_Document.pdf", podBytes); Console.WriteLine("交付证明PDF已成功保存"); } else { Console.WriteLine("当前运单无可用交付证明,请确认运单已完成交付"); } Console.ReadKey();
注意事项
- 确保运单已经完成交付,未完成的运单不会返回交付证明文档。
- 部分UPS服务可能不支持交付证明功能,需确认你的运单对应的服务类型包含该权益。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

