用 XML 和 PHP 解析 eBay 交易 API

Parsing eBay Trading API with XML and PHP

我有身份验证工作,它正在提取正确的数据,但它引入了整个 HTML 文档,但只是作为代码,没有正确呈现它。

我能找到的最接近的答案是这里的答案:Ebay api GetSellerList, Parsing response XML 然而解决方案仍然无效。

为 eBay 解析 XML,我想我必须使用节点,但以前从未这样做过,这很令人困惑。尝试了很多东西,我会继续尝试,直到我能正常工作。 感谢您的努力! [小时] 这是我从这段代码得到的响应的屏幕截图:

https://imgur.com/N1yeAnp

红线显示了一系列信息,包括 API 调用时间、Failure/Success 布尔值和 API 版本 (987)。 黄线显示​​ HTML 开始和结束的位置,页面下方还有一条线。

我还知道我的文档顶部有一个文档类型和 html。即使我将它从 doctype 中取出到 "With a User Tocken ID we can import user data to our website." 的最后一个 HTML 硬编码部分仍然不起作用并给出相同的 HTML 硬编码。

Link 到 pastebin 如果那里更容易阅读:http://pastebin.com/LYJHpLnK

    <?php require_once('keys.php') ?>
    <?php require_once('eBaySession.php') ?>
    <?php session_start(); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <HTML>
    <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <TITLE>Get eBay User Items (Result)</TITLE>
    </HEAD>
    <BODY>
        <h2>Testing eBay Connection Plugin</h2>
        <h3>Receiving User Tocken</h3>
        <h4>With a User Tocken ID we can import user data to our website.</h4>

        <?php


                //SiteID must also be set in the Request's XML
                //SiteID = 0  (US) - UK = 3, Canada = 2, Australia = 15, ....
                //SiteID Indicates the eBay site to associate the call with
                $siteID = 0;
                //the call being made:
                $verb = 'FetchToken';

                ///Build the request Xml string
                $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
                $requestXmlBody .= '<FetchTokenRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
                $requestXmlBody .= '<SessionID>'.$_SESSION["eBaySession"].'</SessionID>';
                $requestXmlBody .= '</FetchTokenRequest>';


                //Create a new eBay session with all details pulled in from included keys.php
                $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);

                //send the request and get response
                $responseXml = $session->sendHttpRequest($requestXmlBody);
                if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
                    die('<P>Error sending request');

                //Xml string is parsed and creates a DOM Document object
                $responseDoc = new DomDocument();
                $responseDoc->loadXML($responseXml);


                //get any error nodes
                $errors = $responseDoc->getElementsByTagName('Errors');

                //if there are error nodes
                if($errors->length > 0)
                {
                    echo '<P><B>eBay returned the following error(s):</B>';
                    //display each error
                    //Get error code, ShortMesaage and LongMessage
                    $code = $errors->item(0)->getElementsByTagName('ErrorCode');
                    $shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
                    $longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
                    //Display code and shortmessage
                    echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", "&gt;", str_replace("<", "&lt;", $shortMsg->item(0)->nodeValue));
                    //if there is a long message (ie ErrorLevel=1), display it
                    echo '<BR/>User Session ID: '.$_COOKIE["eBaySession"].'';
                    if(count($longMsg) > 0)
                        echo '<BR>', str_replace(">", "&gt;", str_replace("<", "&lt;", $longMsg->item(0)->nodeValue));

                }

                else //no errors
                {
                    //get the nodes needed
                    $eBayAuthTokenNode = $responseDoc->getElementsByTagName('eBayAuthToken');

                    //Display the details
                    //echo '<BR/>User Session ID: '.$_SESSION["eBaySession"].'';
                    //echo '<BR/><BR/>User Token: '.$eBayAuthTokenNode->item(0)->nodeValue.'';
                    $verb = 'GetSellerList';
                    $username = $_GET["username"];
                    $CreateTimeFrom = gmdate("Y-m-d\TH:i:s",time()); //current time
                    $CreateTimeTo = date('Y-m-d', strtotime("+3 months", strtotime($CreateTimeFrom)));

                    $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
                    $requestXmlBody .= '<GetSellerListRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
                    $requestXmlBody .= '<UserID>'.$username.'</UserID>';
                    $requestXmlBody .= '<DetailLevel>ReturnAll</DetailLevel>';
                    $requestXmlBody .= '<ErrorLanguage>RFC 3066</ErrorLanguage>';
                    $requestXmlBody .= '<WarningLevel>Low</WarningLevel>';
                    $requestXmlBody .= '<Version>987</Version>';
                    $requestXmlBody .= '<RequesterCredentials><eBayAuthToken>'.$eBayAuthTokenNode->item(0)->nodeValue.'</eBayAuthToken></RequesterCredentials>';
                    $requestXmlBody .= '<StartTimeFrom>'.$CreateTimeFrom.'</StartTimeFrom>';
                    $requestXmlBody .= '<StartTimeTo>'.$CreateTimeTo.'</StartTimeTo>';
                    $requestXmlBody .= '<EndTimeFrom>'.$CreateTimeFrom.'</EndTimeFrom>';
                    $requestXmlBody .= '<EndTimeTo>'.$CreateTimeTo.'</EndTimeTo>';

                    $requestXmlBody .= '<Pagination><EntriesPerPage>200</EntriesPerPage></Pagination>';
                    $requestXmlBody .= '<OutputSelector>ItemArray.Item.Title</OutputSelector>';
                    $requestXmlBody .= '<OutputSelector>ItemArray.Item.Description</OutputSelector>';
                    $requestXmlBody .= '<OutputSelector>ItemArray.Item.BuyItNowPrice</OutputSelector>';
                    $requestXmlBody .= '<OutputSelector>ItemArray.Item.Quantity</OutputSelector>';
                    $requestXmlBody .= '</GetSellerListRequest>';







                   //Create a new eBay session with all details pulled in from included keys.php
                $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);

                //send the request and get response
                $responseXml = $session->sendHttpRequest($requestXmlBody);
                if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
                    die('<P>Error sending request');

                //Xml string is parsed and creates a DOM Document object
                $responseDoc = new DomDocument();
                $responseDoc->loadXML($responseXml);
                $html = $responseDoc->saveHTML();
                //echo $html;




               echo $responseXml;

                }


                //SiteID = 0  (US) - UK = 3, Canada = 2, Australia = 15, ....
    //SiteID Indicates the eBay site to associate the call with
    $siteID = 0;
    //the call being made:
    $verb = 'GetSellerList';
    //Time with respect to GMT
    //by default retreive orders in last 30 minutes
    $CreateTimeFrom = gmdate("Y-m-d\TH:i:s",time()-1800); //current time minus 30 minutes
    $CreateTimeTo = gmdate("Y-m-d\TH:i:s");
    //If you want to hard code From and To timings, Follow the below format in "GMT".
    //$CreateTimeFrom = YYYY-MM-DDTHH:MM:SS; //GMT
    //$CreateTimeTo = YYYY-MM-DDTHH:MM:SS; //GMT
    ///Build the request Xml string


    //by default retreive orders in last 30 minutes
    $CreateTimeFrom = gmdate("Y-m-d\TH:i:s",time()-1800); //current time minus 30 minutes
    $CreateTimeTo = gmdate("Y-m-d\TH:i:s");


     //send the request and get response
                $responseXml = $session->sendHttpRequest($requestXmlBody);
                if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
                    die('<P>Error sending request');

                //Xml string is parsed and creates a DOM Document object
                $responseDoc = new DomDocument();
                $responseDoc->loadXML($responseXml);

                $title_nodes = $responseDoc->getElementsByTagName('Title');
    $titles = array();
    foreach ($title_nodes as $node) {
        $titles[] = $node->nodeValue;
    }

        ?>

        </BODY>
        </HTML>

如果有人仍然需要答案,只需使用 PHP decode($responseXml) 并完美地打印出来。