准備工作:
1. 運行Eclipse (或其他Java IDE)
2.創建一個ConsoleAddItem工程(項目)
選JDK 1.5、1.6、1.8等版本,已測試1.6、1.8版本。
3、下載JAVA版本的eBay Trading SDK
地址:https://go.developer.ebay.com/javasdk
4、創建一個eBay用戶令牌(eBay user token) 備用。
5、將下列庫添加到項目構建路徑(屬性->Java Build Path->Libraries):
1) SDK libraries: {JavaSDK}lib目錄下ebaysdkcore.jar, ebaycalls.jar, helper.jar
2) JAXWS-RI和其他libraries: {JavaSDK}libexternalLib目錄下除了optional文件夾的所有jar
3) JRE System Library
說明:
① eBay SDK library是SDK的主要組成部分。它封裝了eBay API調用並為您隱藏了底層的通信細節。
② JAXWS-RI和其他庫是第三方庫。應用程序在編譯和運行時會依賴這些庫。
6、在src新建一個名為ApplicationAddItem.java的主程序類,包自己設置。
7、在文件夾src/com/resources下新建一個名為log4j.properties的配置文件(見清單一)。有了這個文件,SDK就會使用log4j作為基礎日志框架,它會在控制台輸出所有在log4j.properties中定義的日志項。一旦出現錯誤,日志對於排錯會特別有用。
請確定src/main/resources文件夾在eclipse項目的編譯路徑中。
eBay SDK使用Java Simple Logging Facade(SLF4J),它是一個可以使用多種不同基礎日志框架(比如log4j, java.util.logging)的簡單門面。默認情況下eBay SDK使用log4j作為基礎日志框架,如果您願意的話,您可以選擇其他的日志框架,例如java.util.logging。詳情請參考您SDK安裝根目錄的doc/readme.htm文件中[關於日志的注意事項]部分。
清單一 日志配置
# ***** Set root logger level to debug and its appender to stdout. log4j.rootLogger=DEBUG, stdout # ***** stdout is set to be a ConsoleAppender. log4j.appender.stdout=org.apache.log4j.ConsoleAppender # ***** stdout uses PatternLayout. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # ***** Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d%n%m%n%n
8、為了調用eBay API,首先你需要初始化ApiContext對象。ApiContext對象包含了所有調用eBay API所需的配置信息。
在主程序類中,新建一個名為getApiContext的方法(見清單二)。在這個方法中,我們通過獲取用戶在控制台中輸入的用戶令牌和服務器地址來初始化ApiContext對象。
清單二 初始化ApiContext對象
/** * 輸入eBay SDK ApiContext 用戶數據 * * @return ApiContext 對象 * @throws IOException */ private static ApiContext getApiContext() throws IOException { String input; ApiContext apiContext = new ApiContext(); // 設置API Token 訪問 eBay API服務器 ApiCredential cred = apiContext.getApiCredential(); input = ConsoleUtil.readString("輸入您的eBay身份驗證Token: "); cred.seteBayToken(input); // 設置API服務器URL input = ConsoleUtil.readString("輸入 eBay SOAP 服務器URL (e.g., https://api.ebay.com/wsapi): "); apiContext.setApiServerUrl(input);
// 設置EPS圖片服務器URL
apiContext.setEpsServerUrl("https://api.sandbox.ebay.com/ws/api.dll"); return apiContext; }
9、為了在eBay站點上登錄一個商品,首先您需要新建ItemType類的一個實例。
在主程序類中,新建一個buildItem的方法(見清單三)。在這個方法中,我們通過具體商品的標題、描述、類別、支付方法和貨運細節等信息來構建一個item。關於如何構造item的詳細信息,請參考eBay Trading API documentati.
清單三 構建ItemType類
/** * 構建ItemType類 * @return ItemType 對象 * @throws IOException */ private static ItemType builItem() throws IOException { String input; ItemType item = new ItemType(); // 項目標題 item.setTitle(ConsoleUtil.readString("標題: "));
// 畫廊圖片
String[] paths = {"http://www.dilianidc.com/templets/twang/images/tw_11.jpg","http://www.dilianidc.com/templets/twang/images/tw_20.jpg"};
PictureDetailsType pic = new PictureDetailsType();
pic.setPictureURL(paths);
//指定畫廊圖片
pic.setGalleryType(GalleryTypeCodeType.GALLERY);
item.setPictureDetails(pic);
// 項目SKU
item.setSKU(ConsoleUtil.readString("SKU: ")); // 項目描述 item.setDescription(ConsoleUtil.readString("描述:")); // 類型 item.setListingType(ListingTypeCodeType.CHINESE); // 貨幣 item.setCurrency(CurrencyCodeType.USD); input = ConsoleUtil.readString("價格: "); AmountType amount = new AmountType(); amount.setValue(Double.valueOf(input)); item.setStartPrice(amount); //上市時間 item.setListingDuration(ListingDurationCodeType.DAYS_3.value()); // 項目地點和國家 item.setLocation(ConsoleUtil.readString("地點位置")); item.setCountry(CountryCodeType.US); // 分類 CategoryType cat = new CategoryType(); cat.setCategoryID(ConsoleUtil.readString("eBay類別 (e.g., 30022): ")); item.setPrimaryCategory(cat); // 庫存數量 item.setQuantity(new Integer(1)); // 付款方式 item.setPaymentMethods(new BuyerPaymentMethodCodeType[]{BuyerPaymentMethodCodeType.PAY_PAL}); //設置 setPayPal 付款方式 item.setPayPalEmailAddress("888@yirose.com"); // item 狀態, 全新(1000) item.setConditionID(1000); // 需要處理時間 item. setDispatchTimeMax(Integer.valueOf(1)); // 運輸細節 item.setShippingDetails(buildShippingDetails()); // 退貨政策 ReturnPolicyType returnPolicy = new ReturnPolicyType(); returnPolicy.setReturnsAcceptedOption("ReturnsAccepted"); item.setReturnPolicy(returnPolicy); return item; }
10、在主程序類中,創建一個名為buildShippingDetails的工具方法(見清單四)。該方法用於構造貨運細節,buildItem方法會調用這個方法。
清單四 構建buildShippingDetails類
/** * 構建產品運輸細節 * @return ShippingDetailsType 對象 */ private static ShippingDetailsType buildShippingDetails() { // 運輸細節 ShippingDetailsType sd =new ShippingDetailsType(); sd.setApplyShippingDiscount(new Boolean(true)); AmountType amount =new AmountType(); amount.setValue(2.8); sd.setPaymentInstructions("eBay Java SDK 測試指令."); // 選擇航運類型和航運服務 sd.setShippingType(ShippingTypeCodeType.FLAT); ShippingServiceOptionsType shippingOptions = new ShippingServiceOptionsType(); shippingOptions.setShippingService(ShippingServiceCodeType.SHIPPING_METHOD_STANDARD.value()); //amount = new AmountType(); amount.setValue(2.0); shippingOptions.setShippingServiceAdditionalCost(amount); //amount = new AmountType(); amount.setValue(10); shippingOptions.setShippingServiceCost(amount); shippingOptions.setShippingServicePriority(new Integer(1)); //amount = new AmountType(); amount.setValue(1); shippingOptions.setShippingInsuranceCost(amount); sd.setShippingServiceOptions(new ShippingServiceOptionsType[]{shippingOptions}); return sd; }
11、現在萬事俱備,我們將各個部分在main方法中組合起來吧(見清單五)
清單五 main方法組合
public static void main(String[] args) { try { System.out.println(" "); System.out.println("+++++++++++++++++++++++++++++++++++++++ "); System.out.println("+ 歡迎使用eBay API JAVA實例 + "); System.out.println("+ - ConsoleAddItem + "); System.out.println("+++++++++++++++++++++++++++++++++++++++ "); System.out.println(" "); // [Step 1] eBay ApiContext 對象初始化 System.out.println("==== [1] 帳戶信息 ===="); ApiContext apiContext = getApiContext(); // [Step 2] 創建新的 item 對象 System.out.println("==== [2] Item信息 ===="); ItemType item = builItem(); // [Step 3] 創建調用對象並執行調用 System.out.println("==== [3] 執行API調用 ===="); System.out.println("開始調用eBay API,請稍候… "); AddItemCall api = new AddItemCall(apiContext); api.setItem(item); FeesType fees = api.addItem(); System.out.println("調用eBay API結束,顯示調用結果…"); System.out.println(); // [Step 4] 顯示結果 System.out.println("Listing已成功發布!"); double listingFee = eBayUtil.findFeeByName(fees.getFee(), "ListingFee").getFee().getValue(); System.out.println("Listing 費用是:" + new Double(listingFee).toString()); System.out.println("Listed Item ID:" + item.getItemID()); } catch (Exception e) { System.out.println("錯誤!沒有發布Listing"); e.printStackTrace(); } }
ReviseItem 代碼 修改Step 3
// [Step 3] 創建調用對象並執行調用 System.out.println("==== [3] 執行API調用 ===="); System.out.println("開始調用eBay API,請稍候… "); ReviseItemCall api = new ReviseItemCall(apiContext); api.setItemToBeRevised(item); FeesType fees = api.reviseItem(); System.out.println("調用eBay API結束,顯示調用結果…"); System.out.println();
12、ItemType實例創建之后,我們調用AddItem API並將新建的ItemType實例作為一個參數傳遞給這個API。如果調用成功,會返回一個FeesType實例。這個實例包含了登錄商品所涉及的費用。最后,我們將商品登錄費用和商品ID輸出到控制台(在您的應用中, 您可以根據實際需求處理返回結果)。主函數也展示了基本的異常處理,一旦出錯,您的應用程序有責任捕獲並處理這些異常。
為了多次測試,可以把 eBayToken 和ServerUrl寫死在代碼中,免得每次都要去找Token。
測試結束,發布成功