首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于跟踪PHP发货的USPS API

用于跟踪PHP发货的USPS API
EN

Stack Overflow用户
提问于 2015-06-05 16:25:27
回答 3查看 2.9K关注 0票数 3

我有个问题。我注册了USPS网站,从那里我带用户并通过访问他们的API。但是,当我试图访问跟踪时,我得到了一个没有格式化XML的带有所有结果的单一文本字符串。

我使用的脚本如下:

代码语言:javascript
运行
复制
    $trackingNumber = $numtrack;
    $url = "http://production.shippingapis.com/shippingAPI.dll";
    $service = "TrackV2";
    $xml = rawurlencode("<TrackRequest USERID='MYIDACCOUNT'><TrackID ID='".$trackingNumber."'></TrackID></TrackRequest>");  
    $request = $url . "?API=" . $service . "&XML=" . $xml;
    // send the POST values to USPS
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$request);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // parameters to post

    $result = curl_exec($ch);
    curl_close($ch);

    $response = new SimpleXMLElement($result);
    print_r($result);
    $deliveryStatus = $response->TrackResponse->TrackSummary->Status;
    echo $deliveryStatus;

我得到的结果是

您的产品已于2015年6月5日上午10:51在意大利交付。清关工作已完成,2015年6月4日下午5:29,ITALYCustoms清关,2015年6月4日,上午11:20,ITALYProcessed通过排序设施,2015年6月4日,上午11:19,ITALYDeparted,6月3日,2015年6月2日,7:43,米兰,ITALYDeparted,2015年6月2日,下午3:34,迈阿密,联合STATESArrived,6月2日,2015年6月2日,上午10:05,迈阿密,通过排序设施,2015年6月1日,晚上8:07,2015年6月1日晚上8时07分,ISC迈阿密FL ( USPS )离开USPS设施,2015年6月1日凌晨2:40离开USPS设施,2015年5月31日,上午11:22,迈阿密,FL 331121212,迈阿密,2015年5月30日,下午4:07,BOCA RATON,FL 33431Accepance,2015年5月30日下午12:27,BOCA RATON,33431Pre,装运信息发送给USPS,2015年5月29日,下午4:07

我如何获得一个XML,然后推断出我需要的单个信息?我不能跳出来。

EN

回答 3

Stack Overflow用户

发布于 2015-06-05 16:44:59

您必须构建xml响应:

就像这样:

代码语言:javascript
运行
复制
<?php
/*
SimpleXMLElement Object ( [TrackInfo] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => CV034836340US ) [TrackSummary] => Your item was delivered in ITALY at 10:51 am on June 5, 2015. [TrackDetail] => Array ( [0] => Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY [1] => Customs Clearance, June 4, 2015, 11:20 am, ITALY [2] => Processed Through Sort Facility, June 4, 2015, 11:19 am, ITALY... ) ) )
*/
//SIMULATION FROM YOUR OBJECT
$response = (object)array(
'TrackInfo'=>array('ID'=>12342432),
'TrackSummary'=>'Your item was delivered in ITALY at 10:51 am on June 5, 2015.',
'TrackDetail' => array('Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY','Customs Clearance, June 4, 2015, 11:20 am, ITALY','Processed Through Sort Facility, June 4, 2015, 11:19..., ITALY... ')
);


$string = '<?xml version="1.0" encoding="utf-8"?>
<TrackResponse>
    <TrackInfo>'.(string)$response->TrackInfo['ID'].'</TrackInfo>
    <TrackSummary>'.(string)$response->TrackSummary.'</TrackSummary>
    <TrackDetail>';
    foreach($response->TrackDetail as $detail){
        $string .= '<detail>'.(string)$detail.'</detail>';
    }
$string .='</TrackDetail>
</TrackResponse>';

header('Content-Type: application/xml; charset=utf-8');
echo $string
?> 
票数 1
EN

Stack Overflow用户

发布于 2015-06-05 16:59:47

您的浏览器将XML标记解释为HTML标记。如果您想要将XML回显给用户,可以用<这样的特殊字符转义htmlspecialchars

代码语言:javascript
运行
复制
echo htmlspecialchars($deliveryStatus);
票数 1
EN

Stack Overflow用户

发布于 2016-12-23 14:44:32

如果对某人有帮助的话:

代码语言:javascript
运行
复制
$deliveryStatus = $response->TrackInfo->TrackSummary;
echo $deliveryStatus;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30671375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档