使用单个物品API从易趣获取多个物品显示错误


Getting multiple items from eBay with Single item API shows ERROR

我使用易趣单个物品API获取所选物品的详细信息。我知道易趣也有多个项目API,但它不会给出我想要的所有细节。


我有一个Var $gpd,其中有项目编号。然后用explode制作阵列$items

然后使用foreach为阵列中的所有物品运行易趣单个物品API。

然后加上20%的利润并将价格四舍五入。

然后制作静态PayPal按钮。


我下面的代码大多数时候都很完美。但有时它只显示数组中的2个第一项,然后显示ERROR:

$xml=simplexml_load_string($response) or die("Error: Could not get item");

如果我再次重新加载页面,它会显示Array中的所有项目,一切都很完美。

这是我的代码:

<?php
$gpd = '281616878215, 221694130228, 191506118709, 271806308878, 231451119156' ;
$items = explode(', ', $gpd);
$profit = "1.2";
function round_up ($value, $places=0) {
  if ($places < 0) { $places = 0; }
  $mult = pow(10, $places);
  return ceil($value * $mult) / $mult;
}
foreach($items as $item) {
$appID = 'HERE-NEED-TO-PUT-EBAY-APPID';
$exexex = $item;
$request = '<?xml version="1.0" encoding="utf-8"?>
            <GetSingleItemRequest xmlns="urn:ebay:apis:eBLBaseComponents" >
            <ItemID>'.$exexex.'</ItemID>
            <IncludeSelector>Details,ShippingCosts,ItemSpecifics,Variations</IncludeSelector>
            </GetSingleItemRequest>';
$callName = 'GetSingleItem';
$compatibilityLevel = 647;
$endpoint = "http://open.api.ebay.com/shopping";
$headers[] = "X-EBAY-API-CALL-NAME: $callName";
$headers[] = "X-EBAY-API-APP-ID: $appID";
$headers[] = "X-EBAY-API-VERSION: $compatibilityLevel";
$headers[] = "X-EBAY-API-REQUEST-ENCODING: XML";
$headers[] = "X-EBAY-API-RESPONSE-ENCODING: XML";
$headers[] = "X-EBAY-API-SITE-ID: 0";
$headers[] = "Content-Type: text/xml";
$curl = curl_init($endpoint);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($curl);
$data = simplexml_load_string($response) ;
$AckResponse = $data->Ack ;
$xml=simplexml_load_string($response) or die("Error: Could not get item");
$itemvalueprice = (float)$data->Item->ConvertedCurrentPrice;
$itemprice = $itemvalueprice * $profit;
$price = round_up ($itemprice, 1);
$paybutton = '<form name="_xclick" action="https://www.paypal.com/us/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="my@paypal.com">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="item_name" value="' . htmlentities($data->Item->Title, ENT_QUOTES) . '">
<input type="hidden" name="amount" value="' . $price . '"><input type="hidden" name="on0" value="IMEI"><input type="text" name="os0" >
<br />
<input type="image" src="ordernow.jpg" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
</form>' ;
$endt = str_replace(".000Z", "", $data->Item->EndTime);
$endtime = explode(T,$endt);
$startt = str_replace(".000Z", "", $data->Item->StartTime);
$starttime = explode(T,$startt);
$oldtrans = array('P','D','T','H','M','S');
$newtrans = array('<span class="red"> in </span>','d, ','','h ','m ','s');
$timeleft = str_replace($oldtrans,$newtrans,$data->Item->TimeLeft);

echo '<h2>' . htmlentities($data->Item->Title, ENT_QUOTES) . '</h2>
<span>Price <strong>' . $price . '</strong>$ </span>
<span>Sold <strong>' . $data->Item->QuantitySold . '</strong> </span>
<span>Score <strong>' . $data->Item->Seller-> PositiveFeedbackPercent . '</strong>% </span>
<span><strong>' . $data->Item->ListingStatus . '</strong></span>
<span><img src="' . $data->Item->GalleryURL . '" alt="' . htmlentities($data->Item->Title, ENT_QUOTES) . '" /></span>
<span>' . $paybutton . '</span><span>Expires ' . $endtime[0] . '' . $timeleft . '</span>
<br /><br />' ;
}
?>

我的问题是为什么它显示ERROR?如果有ERROR,为什么它大部分时间都显示所有项目?即使使用ERROR,它也将始终显示数组中的前两个项目。

知道怎么解决这个问题吗?

谢谢你的帮助。

GetSingle(Multiple)Items api调用之间没有区别。

GetMultipleItems api调用一次可以处理20个项目。

试试这个:

$appid = YOUR_APPID;
$items = implode( ',', ITEM_ARRAY);
// much simpler than using curl
$xml = simplexml_load_file( "http://open.api.ebay.com/shopping?callname=GetMultipleItems&responseencoding=XML&appid=YOUR&siteid=0&version=897&ItemID=$items&IncludeSelector=Details");

您可以通过指定IncludeSelector参数来获取额外的数据。

http://developer.ebay.com/Devzone/shopping/docs/CallRef/GetMultipleItems.html#Request.IncludeSelector

获取每个项目的QuantitySold

$ack = strtolower( ( string ) $xml->Ack );
if( $ack == 'success' ) {
    foreach( $xml->Item as $item ) {
        echo "ItemID - " . $item->ItemID . '<br />';
        echo "QuantitySold - " . $item->QuantitySold . '<br />';
        echo '<br /><br />';
    }
}

希望这能有所帮助。