2013-03-07 50 views
2

花費無數的小時數挖掘eBay API文檔,找不到任何東西。eBay API。過濾器「等待郵資」​​或「未發貨」的訂單與交貨詳細信息

在賣家帳戶上,我需要獲得狀態爲「等待郵資」​​或「未發貨」的所有訂單清單。因此,我可以獲得所有目前「未發貨」訂單的XML報告,其中包含有關客戶的全部詳細信息(包括髮貨地址,郵資方式等)

GetOrders未提供對未發貨訂單的過濾器。
GetSellingManagerSoldListings具有此類功能,但不提供有關客戶送貨細節的任何詳細信息。

有沒有人有這樣的問題?

在此先感謝。

+0

也許你可以迭代所有的訂單,並檢查它們是否標記爲已發貨:http://stackoverflow.com/questions/14844391/ – McIntosh 2013-03-07 07:50:55

+0

但在這種情況下,我需要指定FromDate ToDate或NumberOfDays。但我並不真正瞭解這些價值。假設我們的易趣帳戶在3天內售出了X件物品。我可以在技術上使用NumberOfDays 3並遍歷每個訂單,但是如果由於某種原因我上週沒有發貨訂單,該怎麼辦?在這種情況下,我將不得不在最後10-15天內處理大量處理時間的數據。 當我訪問eBay上的等待郵資頁面時,它在URL中具有status = WaitShipment屬性。我不相信API沒有這樣的功能.. – Skylight 2013-03-07 11:52:32

+2

如果'GetSellingManagerSoldListings'提供了這些信息,那麼您可以從那裏收集orderIds併爲每個orderId調用'GetOrder'來檢索運送信息。我的另一種方法是每天多次輪詢「GetOrders」,以查看自上次投票後更改的所有訂單,並將收集的運送信息和orderId存儲在本地數據庫中。這樣你就可以向數據庫詢問未發貨的訂單。 – McIntosh 2013-03-07 14:29:31

回答

-1

此代碼爲我工作,希望你覺得它有用

date_default_timezone_set('Europe/London'); 
$page = 0; 
$order_count = 0; 
$shipped_count = 0; 
do 
{ 
    $page++; 


    $feed = <<< EOD 
<?xml version="1.0" encoding="utf-8"?> 
<GetOrdersRequest xmlns="urn:ebay:apis:eBLBaseComponents"> 
<RequesterCredentials> 
<eBayAuthToken>$auth_token</eBayAuthToken> 
</RequesterCredentials> 
<OrderRole>Seller</OrderRole> 
<OrderStatus>Completed</OrderStatus> 
<Pagination> 
<EntriesPerPage>100</EntriesPerPage> 
<PageNumber>$page</PageNumber> 
</Pagination> 
<NumberOfDays>7</NumberOfDays> 
<ErrorLanguage>en_GB</ErrorLanguage> 
<Version>823</Version> 
<WarningLevel>High</WarningLevel> 
</GetOrdersRequest>? 
EOD; 

$feed = trim($feed); 
    $site_id = 3;//3 For UK 
    $call_name = 'GetOrders'; 
    $headers = array 
     (
     'X-EBAY-API-COMPATIBILITY-LEVEL: ' . $compat_level, 
     'X-EBAY-API-DEV-NAME: ' . $dev_id, 
     'X-EBAY-API-APP-NAME: ' . $app_id, 
     'X-EBAY-API-CERT-NAME: ' . $cert_id, 
     'X-EBAY-API-CALL-NAME: ' . $call_name, 
     'X-EBAY-API-SITEID: ' . $site_id, 
    ); 

    // Send request to eBay and load response in $response 
    $connection = curl_init(); 
    curl_setopt($connection, CURLOPT_URL, $api_endpoint); 
    curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($connection, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($connection, CURLOPT_POST, 1); 
    curl_setopt($connection, CURLOPT_POSTFIELDS, $feed); 
    curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($connection); 
    curl_close($connection); 

    $order_count += substr_count($response, "<Order>"); 
    $shipped_count += substr_count($response, "<ShippedTime>"); 
} 
while(stristr($response, "<HasMoreOrders>true</HasMoreOrders>") != FALSE OR stristr($response, "<HasMoreOrders>true</HasMoreOrders>") != 0); 
$unshipped_orders = $order_count - $shipped_count; 
3

GetOrders對未發貨不提供過濾orders..but如果出現的[ShippedTime]對象在GetOrders請求平均響應該訂單是發貨的未發貨物品,你wouldn,噸得到的對象[發貨時間] ...在這個基地,你可以查詢未發貨的訂單

+0

不幸的是,賣家可以設置'ShippedTime':http://developer.ebay.com/DevZone/XML/docs/Reference/ebay/GetOrders.html#Response.OrderArray.Order.ShippedTime 所以我認爲這不是很好實踐 – 2016-12-14 14:10:24

1

我一直在尋找解決這個問題的一些分配時間,也。這是一個非常古老的問題,但我希望它有一個更直接的答案。會節省我幾個小時。 @Moazam有正確的想法,但是真的缺乏特異性,所以在這裏。以下答案是用python編寫的,基於/使用eBay's Api。 (你會認爲這將是顯著更簡單地找到/做)

from ebaysdk.trading import Connection as Trading 
from ebaysdk.exception import ConnectionError 
import bs4 as bs # beautifulsoup import for parsing xml 

try: 
    api = Trading(config_file="ebay.yaml") #put ur eBay dev API credentials in yaml file 
    response = api.execute('GetSellerTransactions', {}) # dictionary response 
    dommy = response.content 

except ConnectionError as e: # spit error if can't connect (ie: wrong api credz) 
    print(e) 
    print(e.response.dict()) 

soup = bs.BeautifulSoup(dommy, 'lxml') # parse the API response as xml 
tArray = soup.transactionarray 

with open('fullSoldLogXML.xml', 'w+') as xml: # Log file, not required. 
    xml.write(str(soup)) # write entire ebay response to log file. 

with open('singleTransactions.xml', 'w+') as tranXml: # Another log. Personal reference. 
    tranXml.write(str(tArray)) # parse all transactions from transactionarray in xml 

for each in tArray: # tArray is every transaction, in transactionarray) 
    print each.shippedtime # print shipped time, if None then hasn't been shipped. 

輸出應該是這樣的:

<shippedtime>2016-12-18T15:12:22.000Z</shippedtime> 
<shippedtime>2016-12-20T00:35:43.000Z</shippedtime> 
<shippedtime>2016-12-20T01:50:37.000Z</shippedtime> 
None 

有了這些信息,你可以做一個try/except循環每個交易。 If shippedtime == None,那麼你可以剖析訂單,並獲得有用的信息,如print each.shippingaddress, each.orderlineitemid, each.paidtime等...

0

嗯,我得到的訂單將通過下面的參數使用php。

$xmlReq = '<?xml version="1.0" encoding="utf-8"?>'; 
$xmlReq .= '<GetSellingManagerSoldListingsRequest xmlns="urn:ebay:apis:eBLBaseComponents">'; 
$xmlReq .= '<UserID>'.$YOUR_EBAY_APP_ID.'</UserID>'; 
$xmlReq .= '<Filter>PaidNotShipped</Filter>'; 
$xmlReq .= '<Pagination><EntriesPerPage>200</EntriesPerPage><PageNumber>1</PageNumber></Pagination>'; 
$xmlReq .= '<ErrorLanguage>en_US</ErrorLanguage>'; 
$xmlReq .= "<Version>$version</Version>"; 
$xmlReq .= '<WarningLevel>Low</WarningLevel>'; 
$xmlReq .= "<RequesterCredentials><eBayAuthToken>$YOUR_AUTH_TOKEN</eBayAuthToken></RequesterCredentials>\n";  
$xmlReq .= '</GetSellingManagerSoldListingsRequest>'; 

我希望你有過濾器參數「PaidNoTShipped」。 您將在此回覆中獲得一個order_line_item_id,並使用此命令與該訂單項ID id GetOrderTransactions進行另一次呼叫,您將獲得其餘信息。在GetOrderTransactions中使用<DetailLevel>ReturnAll</DetailLevel>以獲得擴展結果。 讓我知道你是否想知道更多關於API調用的信息。

相關問題