通过 PHP cUrl 创建 DHL 发货标签不起作用
Posted
技术标签:
【中文标题】通过 PHP cUrl 创建 DHL 发货标签不起作用【英文标题】:DHL ship label creation through PHP cUrl is not working 【发布时间】:2018-06-21 10:48:03 【问题描述】:我想通过 DHL 创建发货标签(pdf 格式)。因此,我创建了所需的 xml 格式并通过 php cUrl 发布。
$message_ref = '';
for ($i=0; $i< 30; $i++)
$message_ref .= rand(0, 9);
$message_time = date("Y-m-d") . "T" . date("H:i:sP");
以下是 XML 的代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<req:ShipmentValidateRequest xmlns:req="http://www.dhl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dhl.com ship-val-req.xsd">
<Request>
<ServiceHeader>
<MessageTime>$message_time</MessageTime>
<MessageReference>$message_ref</MessageReference>
<SiteID>XXXXX</SiteID>
<Password>XXXXX</Password>
</ServiceHeader>
</Request>
<RequestedPickupTime>N</RequestedPickupTime>
<NewShipper>N</NewShipper>
<LanguageCode>en</LanguageCode>
<PiecesEnabled>Y</PiecesEnabled>
<Billing>
<ShipperAccountNumber>XXXXX</ShipperAccountNumber>
<ShippingPaymentType>S</ShippingPaymentType>
<BillingAccountNumber>XXXXX</BillingAccountNumber>
<DutyPaymentType>R</DutyPaymentType>
</Billing>
<Consignee>
<CompanyName>-</CompanyName>
<AddressLine>Address 1 </AddressLine>
<City>Enugu</City>
<Division>Enugu</Division>
<DivisionCode>EN</DivisionCode>
<PostalCode></PostalCode>
<CountryCode>NG</CountryCode>
<CountryName>Nigeria</CountryName>
<Contact>
<PersonName>DDDDDD</PersonName>
<PhoneNumber>+23555555555</PhoneNumber>
<PhoneExtension></PhoneExtension>
</Contact>
</Consignee>
<Dutiable>
<DeclaredValue>0.00</DeclaredValue>
<DeclaredCurrency>USD</DeclaredCurrency>
<TermsOfTrade>DAP</TermsOfTrade>
</Dutiable>
<Reference>
<ReferenceID>129624</ReferenceID>
<ReferenceType>St</ReferenceType>
</Reference>
<ShipmentDetails>
<NumberOfPieces>1</NumberOfPieces>
<Pieces><Piece>
<PieceID>1</PieceID>
<PackageType>EE</PackageType>
<Weight>1</Weight>
<DimWeight>1</DimWeight>
<Width>1</Width>
<Height>1</Height>
<Depth>1</Depth>
<PieceContents></PieceContents>
</Piece></Pieces>
<Weight>1</Weight>
<WeightUnit>L</WeightUnit>
<GlobalProductCode>P</GlobalProductCode>
<Date>2018-06-22</Date>
<Contents>SHIPMENT #129624</Contents>
<DoorTo>DD</DoorTo>
<DimensionUnit>I</DimensionUnit>
<PackageType>EE</PackageType>
<IsDutiable>N</IsDutiable>
<CurrencyCode>USD</CurrencyCode>
</ShipmentDetails>
<Shipper>
<ShipperID>XXXXXX</ShipperID>
<CompanyName>CompanyName</CompanyName>
<RegisteredAccount>848XXXX</RegisteredAccount>
<AddressLine>MyAddress </AddressLine>
<City>Houston</City>
<Division>Texas</Division>
<DivisionCode>TX</DivisionCode>
<PostalCode>77031</PostalCode>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
<Contact>
<PersonName>Urama</PersonName>
<PhoneNumber>65656565</PhoneNumber>
<PhoneExtension></PhoneExtension>
</Contact>
</Shipper>
<EProcShip>N</EProcShip>
<LabelImageFormat>PDF</LabelImageFormat>
<RequestArchiveDoc>Y</RequestArchiveDoc>
<Label>
<LabelTemplate>8X4_thermal</LabelTemplate>
<Logo>Y</Logo>
<Resolution>200</Resolution>
</Label>
</req:ShipmentValidateRequest>
以下是cUrl代码:
$url = "https://xmlpi-ea.dhl.com/XMLShippingServlet";
修改 ---
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_MUTE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, "$query");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
#print_r($output);
preg_match("/<OutputImage>(.*?)<\/OutputImage>/", $output, $matches);
$image = base64_decode($matches[1]);
<img src="data:image/gif;base64,<?=$image?>">
现在我看到图像在浏览器中显示垃圾字符。我在 $image 之前附加了“data:image/gif;base64”,但仍然显示垃圾字符。谁能帮助我如何显示图像?
【问题讨论】:
如果您将 DHL API 文档添加到您的问题中将会很有帮助。 对不起,我没有 API 链接。我正在处理现有项目并修改现有代码。 @NiladriBanerjee-Uttarpara 过程是什么?您是否通过 XML 接收信息并对其进行解析并使用 XML 中的信息生成 PDF 运输标签? @IbrahimHafiji 我想与信息一起提交 xml,并希望接收信息以生成船舶标签 PDF(base 64 图像/其他)。 您将Content-length
设置为$query
的长度,但帖子数据似乎在$xml
中。 $query
和$xml
的内容是什么?后者是否包含您在上面发布的 xml?
【参考方案1】:
最后我通过添加代码解决了它:
header("Content-type:application/pdf");
header("Content-Disposition:inline;filename=label_123demo.pdf");
echo $image;
【讨论】:
以上是关于通过 PHP cUrl 创建 DHL 发货标签不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 PHP 和 cURL 测量我的 socks5 速度不起作用?