準備工做:java
1. 運行Eclipse (或其餘Java IDE)
apache
2.建立一個ConsoleAddItem工程(項目)api
選JDK 1.五、1.六、1.8等版本,已測試1.六、1.8版本。
服務器
三、下載JAVA版本的eBay Trading SDKapp
地址:https://go.developer.ebay.com/javasdk
框架
四、建立一個eBay用戶令牌(eBay user token) 備用。
eclipse
五、將下列庫添加到項目構建路徑(屬性->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和其餘庫是第三方庫。應用程序在編譯和運行時會依賴這些庫。
六、在src新建一個名爲ApplicationAddItem.java的主程序類,包本身設置。
七、在文件夾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
八、爲了調用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; }
九、爲了在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; }
十、在主程序類中,建立一個名爲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; }
十一、如今萬事俱備,咱們將各個部分在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();
十二、ItemType實例建立以後,咱們調用AddItem API並將新建的ItemType實例做爲一個參數傳遞給這個API。若是調用成功,會返回一個FeesType實例。這個實例包含了登陸商品所涉及的費用。最後,咱們將商品登陸費用和商品ID輸出到控制檯(在您的應用中, 您能夠根據實際需求處理返回結果)。主函數也展現了基本的異常處理,一旦出錯,您的應用程序有責任捕獲並處理這些異常。
爲了屢次測試,能夠把 eBayToken 和ServerUrl寫死在代碼中,省得每次都要去找Token。
測試結束,發佈成功