usertoken有兩種,一種是開發者的usertoken,一種是用戶的usertoken,開發測試時可以用自己的token,寫進程序裏面,避免每次都要花時間get一次,獲取開發者的token很簡單,在https://go.developer.ebay.com/註冊開發者帳號,ps:開發者帳號與ebay帳號不一樣的。。
下面主要介紹怎麼在程序中,通過ebay api獲得用戶的token,這主要通過FetchTokenCall這個api獲取。
這個api需要的額外參數有五個,appID,certID,devID,sessionID和serverURL,前三個需要註冊開發者帳號獲得,登錄https://developer.ebay.com後,點擊My Account可以看到,有sandbox和production兩種,在測試階段選擇sandbox的id,應用發佈版選擇production類型。sesionID通過另外一個API GetSessionID獲取,這個API也需要上述三個ID。獲取token的流程就是,先獲取用戶登錄的url,然後打開瀏覽器,讓用戶輸入密碼驗證登錄,然後在用戶驗證通過後,使用FetchTokenCall獲取user token。說多了羅嗦,上代碼:
1,獲取驗證的url:
public static String getAuthenticateUrl() throws Exception {
ApiContext localContext = new ApiContext();
ApiAccount apiAccount = new ApiAccount();
apiAccount.setApplication(appID);
apiAccount.setCertificate(certID);
apiAccount.setDeveloper(devID);
localContext.getApiCredential().setApiAccount(apiAccount);
localContext.setApiServerUrl("https://api.sandbox.ebay.com/wsapi");
GetSessionIDCall apiCall = new GetSessionIDCall(localContext);
apiCall.setRuName(ruName);
GetContext.sessionID = apiCall.getSessionID();
return "https://signin.sandbox.ebay.com/ws/eBayISAPI.dll?SignIn&" + "RuName=" + ruName
+ "&SessID=" + GetContext.sessionID;
}
忘了說了,ruName在My Account>Application Settings>customize the ebay user consent form中獲取。
2,打開瀏覽器,用戶驗證登錄
可以粘貼上述地址到瀏覽器上,也可以在程序中打開系統的瀏覽器,減少用戶的麻煩,在程序中打開系統瀏覽器,方法如下:
public static boolean openBrowser(String url) {
if (url == null) return false;
String[] unixBrowser = new String[] { "google-chrome", "firefox" };
boolean success = false;
if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
try {
Runtime.getRuntime().exec(
new String[] { "rundll32.exe", "url.dll,FileProtocolHandler", url });
success = true;
} catch (Exception e) {
}
} else {
for (int i = 0; i < unixBrowser.length; ++i)
try {
Runtime.getRuntime().exec(new String[] { unixBrowser[0], url });
success = true;
break;
} catch (Exception e) {
}
}
return success;
}
3,使用FetchTokenCall獲取usertoken,使用ConfirmIdentityCall獲取userID,
public static boolean getUserToken() {
if (sessionID == null) return false;
ApiContext localContext = new ApiContext();
ApiAccount apiAccount = new ApiAccount();
apiAccount.setApplication(appID);
apiAccount.setCertificate(certID);
apiAccount.setDeveloper(devID);
localContext.getApiCredential().setApiAccount(apiAccount);
localContext.setApiServerUrl("https://api.sandbox.ebay.com/wsapi");
ConfirmIdentityCall apiCall1 = new ConfirmIdentityCall(localContext);
apiCall1.setSessionID(sessionID);
try {
apiCall1.confirmIdentity();
userID = apiCall1.getReturnedUserID();
} catch (Exception e) {
e.printStackTrace();
}
FetchTokenCall apiCall = new FetchTokenCall(localContext);
apiCall.setSessionID(sessionID);
try {
apiCall.fetchToken();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}