package cn.koolcloud.ipos.appstore.api;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import cn.koolcloud.ipos.appstore.AppStorePreference;
import cn.koolcloud.ipos.appstore.cache.FileManager;
import cn.koolcloud.ipos.appstore.common.AsyncHttpClient;
import cn.koolcloud.ipos.appstore.constant.Constants;
import cn.koolcloud.ipos.appstore.entity.ResultSet;
import cn.koolcloud.ipos.appstore.interfaces.CallBack;
import cn.koolcloud.ipos.appstore.interfaces.Task;
import cn.koolcloud.ipos.appstore.utils.Logger;
public class ApiService {
private static final String TAG = "ApiService";
// private static final String HOST = "http://192.168.101.35:8080";
// private static final String HOST = "http://192.168.101.34:8080";//UAT
// private static final String HOST = "https://192.168.101.34";//UAT
// private static final String HOST = "https://116.236.252.102:30068";//static ip
// private static final String HOST = "http://10.0.5.124:8080";//TEST
// private static final String HOST = "http://192.168.1.100:8080";
private static final String HOST = "https://aipstore.allinpay.com";//production env
private static final String VERSION_VAL = "1.0";
private static final String REGISTER_TERMINAL_ACTION = "register";
private static final String GET_CATEGORIES_ACTION = "getCategories";
private static final String GET_APPS_ACTION = "getApps";
private static final String SEARCH_APP_ACTION = "search";
private static final String GET_APP_DETAILS_ACTION = "getAppDetails";
private static final String DOWNLOAD_APP_ACTION = "downloadApp";
private static final String DOWNLOAD_PIC_ACTION = "downloadIcon";
private static final String SELF_UPDATE_ACTION = "selfUpdate";
private static final String POST_COMMENT_ACTION = "postComment";
private static final String GET_COMMENTS_ACTION = "getComments";
private static final String GET_COMMENT_SUMMARY_ACTION = "getCommentSummary";
private static final String CHECK_APP_UPDATE_ACTION = "checkUpdate";
private static final String GET_PROMOTION_ACTION = "getPromotions";
private static final String REQUEST_CONTEXT = "/asapi";
private static final String REGISTER_TERMINAL_PATH = "/appstore/terminal/register";
private static final String GET_CATEGORIES_PATH = "/appstore/app/getCategories";
private static final String SEARCH_APPS_PATH = "/appstore/app/search";
private static final String GET_APPS_PATH = "/appstore/app/getApps";
private static final String GET_APP_DETAILS_PATH = "/appstore/app/getAppDetails";
private static final String SELF_UPDATE_PATH = "/appstore/client/selfUpdate";
private static final String POST_COMMENT_PATH = "/appstore/app/postComment";
private static final String GET_COMMENTS_PATH = "/appstore/app/getComments";
private static final String GET_COMMENT_SUMMARY_PATH = "/appstore/app/getCommentSummary";
private static final String CHECK_APP_UPDATE_PATH = "/appstore/app/checkUpdate";
private static final String DOWNLOAD_APP_PATH = "/appstore/download/downloadApp";
private static final String DOWNLOAD_PICTURE_PATH = "/appstore/download/downloadPic";
private static final String CONTRACT_LINK_PATH = "/asweb/agreement";
// private static final String DOWNLOAD_APP_PATH = "/appstore/download/download";
// private static final String DOWNLOAD_PICTURE_PATH = "/appstore/download/download";
private static final String GET_PROMOTION_PATH = "/appstore/promotion/getPromotions";
/**
* @Title: getDownloadPicJson
* @Description: TODO
* @param @param picId
* @param @param ctx
* @param @return
* @return JSONObject
* @throws
*/
public static JSONObject getDownloadPicJson(String picId, Context ctx) {
JSONObject jsonObj = null;
try {
jsonObj = generateReq(DOWNLOAD_PIC_ACTION);
jsonObj.put(Constants.JSON_KEY_TERMINAL_ID, AppStorePreference.getTerminalID(ctx));
jsonObj.getJSONObject(Constants.REQUEST_DATA).put(Constants.JSON_KEY_ID, picId);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObj;
}
public static String getDownloadPictureUrl() {
return HOST + REQUEST_CONTEXT + DOWNLOAD_PICTURE_PATH;
}
public static String getDownloadAppUrl() {
return HOST + REQUEST_CONTEXT + DOWNLOAD_APP_PATH;
}
public static String getContractLink() {
return HOST + CONTRACT_LINK_PATH;
}
/**
* @Title: generateReq
* @Description: generate common JSON Object
* @param @param action
* @param @return
* @param @throws JSONException
* @return JSONObject
* @throws
*/
private static JSONObject generateReq(String action) throws JSONException {
JSONObject req = new JSONObject();
req.put(Constants.JSON_KEY_VERSION, VERSION_VAL);
req.put(Constants.JSON_KEY_ACTION, action);
JSONObject data = new JSONObject();
req.put(Constants.REQUEST_DATA, data);
return req;
}
/**
* @Title: getUpdateVersion
* @Description: TODO
* @param @param context
* @param @param terminalID
* @param @param versionName
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task getUpdateVersion(Context context, String terminalID, String versionName, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
String url = HOST + REQUEST_CONTEXT + SELF_UPDATE_PATH;
JSONObject reqestJson = null;
try {
reqestJson = generateReq(SELF_UPDATE_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(Constants.JSON_KEY_VERSION, versionName);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getAppCategories
* @Description: TODO get app categories by terminal id
* @param @param context
* @param @param terminalID
* @param @param categoryHash
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task getAppCategories(Context context, String terminalID, String categoryHash, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
String url = HOST + REQUEST_CONTEXT + GET_CATEGORIES_PATH;
try {
reqestJson = generateReq(GET_CATEGORIES_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
if (!TextUtils.isEmpty(categoryHash)) {
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(Constants.REQUEST_HASH, "0");
} else {
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(Constants.REQUEST_HASH, Constants.CATEGORY_DEFAULT_HASH);
}
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getAppsByCategory
* @Description: TODO get apps by category
* @param @param context
* @param @param terminalID
* @param @param categoryHash
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task getAppsByCategory(Context context, String terminalID, String categoryId, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
String url = HOST + REQUEST_CONTEXT + GET_APPS_PATH;
try {
reqestJson = generateReq(GET_APPS_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
JSONArray categories = new JSONArray();
categories.put(categoryId);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_CATEGORIES, categories);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
public static Task getAppDetailsByIds(Context context, String terminalID, String appId, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
String url = HOST + REQUEST_CONTEXT + GET_APP_DETAILS_PATH;
try {
reqestJson = generateReq(GET_APP_DETAILS_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
JSONArray apps = new JSONArray();
apps.put(appId);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APP_IDS, apps);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getAppsBySearchWord
* @Description: TODO
* @param @param context
* @param @param terminalID
* @param @param categoryId
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task getAppsByKeyWord(Context context, String terminalID, String keyWord, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + SEARCH_APPS_PATH;
try {
reqestJson = generateReq(SEARCH_APP_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_NAME, keyWord);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getPromotions
* @Description: get promotions
* @param context
* @param terminalID
* @param callBack
* @return
* @return: Task
*/
public static Task getPromotions(Context context, String terminalID, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + GET_PROMOTION_PATH;
try {
reqestJson = generateReq(GET_PROMOTION_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_ID, AppStorePreference.getPromotinDataID(context));
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: commitComment
* @Description: commit comments
* @param context
* @param terminalID
* @param appId
* @param comment
* @param rating
* @param callBack
* @return
* @return: Task
*/
public static Task commitComment(Context context, String terminalID, String appId, String comment, int rating, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + POST_COMMENT_PATH;
try {
reqestJson = generateReq(POST_COMMENT_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APP_ID, appId);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_COMMENT, comment);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_SCORE, rating);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getComments
* @Description: get comment by appId
* @param context
* @param terminalID
* @param appId
* @param callBack
* @return
* @return: Task
*/
public static Task getComments(Context context, String terminalID, String appId, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + GET_COMMENTS_PATH;
try {
reqestJson = generateReq(GET_COMMENTS_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APP_ID, appId);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: getCommentSummary
* @Description: get comment summary
* @param context
* @param terminalID
* @param appId
* @param callBack
* @return
* @return: Task
*/
public static Task getCommentSummary(Context context, String terminalID, String appId, CallBack callBack) {
if (TextUtils.isEmpty(terminalID)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + GET_COMMENT_SUMMARY_PATH;
try {
reqestJson = generateReq(GET_COMMENT_SUMMARY_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalID);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APP_ID, appId);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: checkSoftUpdate
* @Description: check app for update
* @param context
* @param softName
* @param version
* @param callBack
* @return
* @return: Task
*/
public static Task checkSoftUpdate(Context context, String softName, String version, CallBack callBack) {
if (TextUtils.isEmpty(softName) || TextUtils.isEmpty(version)) {
return null;
}
JSONObject reqestJson = null;
// FIXME mod url, request action and arguments
String url = HOST + REQUEST_CONTEXT + CHECK_APP_UPDATE_PATH;
try {
reqestJson = generateReq(CHECK_APP_UPDATE_ACTION);
JSONObject appObj = new JSONObject();
appObj.put(Constants.JSON_KEY_NAME, softName);
appObj.put(Constants.JSON_KEY_VERSION, version);
JSONArray appArray = new JSONArray();
appArray.put(appObj);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APPS, appArray);
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
public static JSONObject checkSoftUpdate(String terminalId, String packageName, int versionCode) {
JSONObject reponseJson = null;
HttpService httpService = new HttpService();
String url = HOST + REQUEST_CONTEXT + CHECK_APP_UPDATE_PATH;
JSONObject dataJson = null;
try {
JSONObject reqestJson = generateReq(CHECK_APP_UPDATE_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalId);
JSONObject appObj = new JSONObject();
appObj.put(Constants.JSON_KEY_PACKAGE_NAME, packageName);
appObj.put(Constants.JSON_KEY_VERSION_CODE, versionCode);
JSONArray appArray = new JSONArray();
appArray.put(appObj);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_APPS, appArray);
reponseJson = httpService.sendRequest(url, reqestJson);
Logger.d(reponseJson.toString());
// dataJson = reponseJson.getJSONObject(Constants.REQUEST_DATA);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return reponseJson;
}
/**
* @Title: register
* @Description: register client
* @param @param context
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task register(Context context, String userId, String channelId, CallBack callBack) {
JSONObject reqestJson = null;
String url = HOST + REQUEST_CONTEXT + REGISTER_TERMINAL_PATH;
try {
reqestJson = generateReq(REGISTER_TERMINAL_ACTION);
JSONObject dataJson = reqestJson.getJSONObject(Constants.REQUEST_DATA);
dataJson.put(Constants.JSON_KEY_SN, android.os.Build.SERIAL);
dataJson.put(Constants.JSON_KEY_MANUFACTURER, android.os.Build.MANUFACTURER);
JSONObject modelJson = new JSONObject();
dataJson.put(Constants.JSON_KEY_TERMINAL_MODEL, modelJson);
modelJson.put(Constants.JSON_KEY_ANDROID_VERSION, android.os.Build.VERSION.RELEASE);
modelJson.put(Constants.JSON_KEY_NAME, android.os.Build.MODEL);
modelJson.put(Constants.JSON_KEY_CPU_INFO, android.os.Build.CPU_ABI);
modelJson.put(Constants.JSON_KEY_DISPLAY, android.os.Build.DISPLAY);
modelJson.put(Constants.JSON_KEY_MEM_INFO, "");
modelJson.put(Constants.JSON_KEY_PRINTER_INFO, "");
modelJson.put(Constants.JSON_KEY_RESOLUTION_INFO, "");
modelJson.put(Constants.JSON_KEY_CARD_READER_INFO, "");
if (!TextUtils.isEmpty(userId) && !TextUtils.isEmpty(channelId)) {
JSONObject baiduPushJson = new JSONObject();
dataJson.put(Constants.JSON_KEY_BAIDU_PUSH, baiduPushJson);
baiduPushJson.put(Constants.JSON_KEY_USER_ID, userId);
baiduPushJson.put(Constants.JSON_KEY_CHANNEL_ID, channelId);
}
} catch (Exception e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_JSON_OBJECT);
}
/**
* @Title: downloadApp
* @Description: TODO
* @param @param context
* @param @param terminalId
* @param @param id
* @param @param callBack
* @param @return
* @return Task
* @throws
*/
public static Task downloadApp(Context context, String terminalId, String id, CallBack callBack) {
JSONObject reqestJson = null;
String url = HOST + REQUEST_CONTEXT + DOWNLOAD_APP_PATH;
try {
reqestJson = generateReq(DOWNLOAD_APP_ACTION);
reqestJson.put(Constants.JSON_KEY_TERMINAL_ID, terminalId);
reqestJson.getJSONObject(Constants.REQUEST_DATA).put(Constants.JSON_KEY_ID, id);
} catch (JSONException e) {
e.printStackTrace();
}
return AsyncHttpClient.request(context, url, reqestJson, callBack,
ResultSet.RESPONSETYPE.RESPONSE_TYPE_STREAM);
}
public static File downloadFile(Context context, String terminalId, String id, String fileName) {
InputStream in = null;
FileOutputStream fos = null;
String sdPath = "";
File file = null;
//don't download apk file to sd from 2014-01-28
/*if (FileManager.canWriteSD()) {
sdPath = Environment.getExternalStorageDirectory() + "/";
File tmpFile = new File(sdPath + "download");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
file = new File(sdPath + "download/" + fileName);
} else {*/
sdPath = context.getFileStreamPath(fileName).getAbsolutePath();
file = new File(sdPath);
//}
try {
JSONObject jsonObj = generateReq(DOWNLOAD_APP_ACTION);
jsonObj.put(Constants.JSON_KEY_TERMINAL_ID, terminalId);
jsonObj.getJSONObject(Constants.REQUEST_DATA).put(Constants.JSON_KEY_ID, id);
String httpUrl = HOST + REQUEST_CONTEXT + DOWNLOAD_APP_PATH;
// HttpClient client = new DefaultHttpClient();
HttpClient client = AsyncHttpClient.getDefaultHttpClient();
HttpPost request = new HttpPost(httpUrl);
request.setHeader("Content-Type", "application/json;charset=UTF8");
request.setEntity(new StringEntity(jsonObj.toString()));
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
in = new BufferedInputStream(response.getEntity().getContent());
fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
while (true) {
if (in != null) {
int numRead = in.read(buf);
if (numRead <= 0) {
break;
} else {
fos.write(buf, 0, numRead);
}
} else {
break;
}
}
} else {
Logger.d(TAG + "_" + "error: "
+ response.getStatusLine().getStatusCode());
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
public static JSONObject getDownloadFileJson(String terminalId, String id) {
JSONObject jsonObj = null;
try {
jsonObj = generateReq(DOWNLOAD_APP_ACTION);
jsonObj.put(Constants.JSON_KEY_TERMINAL_ID, terminalId);
jsonObj.getJSONObject(Constants.REQUEST_DATA).put(
Constants.JSON_KEY_ID, id);
// String httpUrl = HOST + REQUEST_CONTEXT + DOWNLOAD_PATH;
// jsonObj.put(Constants.JSON_KEY_DOWNLOAD_APK_URL, httpUrl);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObj;
}
}