package com.yeshi.makemoney.video.app.utils.api;
|
|
import android.content.Context;
|
import android.content.SharedPreferences;
|
import android.util.Log;
|
import android.widget.Toast;
|
|
import com.yeshi.makemoney.video.app.utils.Constant;
|
import com.demo.lib.common.util.ManifestDataUtil;
|
import com.demo.lib.common.util.common.PackageUtils2;
|
import com.demo.lib.common.util.common.StringUtils;
|
import com.demo.lib.common.util.device.DeviceInfoUtil;
|
import com.demo.lib.common.util.device.MobileUtil;
|
import com.demo.lib.common.util.security.MD5Utils;
|
import com.yeshi.makemoney.video.app.utils.UserUtil;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.TimeUnit;
|
|
import okhttp3.FormBody;
|
import okhttp3.MediaType;
|
import okhttp3.MultipartBody;
|
import okhttp3.OkHttpClient;
|
import okhttp3.Request;
|
import okhttp3.RequestBody;
|
|
import static android.content.Context.MODE_PRIVATE;
|
|
|
public class HttpApiUtil {
|
public static final boolean isDebug = false;
|
|
private static final String TAG = "HttpApiUtil";
|
|
public static String BASE_URL = Constant.HOST + "/api/v1/";
|
|
public static OkHttpClient mOkHttpClient;//okHttpClient 实例
|
|
public static OkHttpClient mOkHttpClientSoon;//okHttpClient 实例
|
|
static {
|
mOkHttpClient = new OkHttpClient.Builder()
|
.connectTimeout(10 * 1000, TimeUnit.MILLISECONDS)
|
.readTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
|
.writeTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
|
.build();
|
|
//超时时间
|
mOkHttpClientSoon = new OkHttpClient.Builder()
|
.connectTimeout(3 * 1000, TimeUnit.MILLISECONDS)
|
.readTimeout(3 * 1000, TimeUnit.MILLISECONDS)
|
.writeTimeout(3 * 1000, TimeUnit.MILLISECONDS)
|
.build();
|
}
|
|
|
public static void getConfig(Context context, BasicTextHttpResponseHandler handler) {
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
commonPostWithFailture(context, BASE_URL + "xxx/xxx", params, handler);
|
}
|
|
|
public static void uploadPushRegId(Context context, String regId, BasicTextHttpResponseHandler handler) {
|
Log.i(TAG,"uploadPushRegId:"+regId);
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
String uid = UserUtil.getUid(context);
|
if (!StringUtils.isEmpty(uid))
|
params.put("uid", uid);
|
params.put("regId", regId);
|
commonPostWithFailture(context, BASE_URL + "user/uploadPushRegId", params, handler);
|
}
|
|
/**
|
* 获取任务信息
|
*
|
* @param context
|
* @param type
|
* @param handler
|
*/
|
public static void getTaskInfo(Context context, String type, BasicTextHttpResponseHandler handler) {
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
String uid = UserUtil.getUid(context);
|
if (!StringUtils.isEmpty(uid))
|
params.put("uid", uid);
|
params.put("type", type);
|
commonPostWithFailture(context, BASE_URL + "goldcorn/getTaskInfo", params, handler);
|
}
|
|
/**
|
* 观看短视频
|
*
|
* @param context
|
* @param second
|
* @param handler
|
*/
|
public static void watchDrawVideo(Context context, int second, boolean isDouble, BasicTextHttpResponseHandler handler) {
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
params.put("timeSeconds", second + "");
|
String uid = UserUtil.getUid(context);
|
params.put("uid", uid);
|
params.put("type", "watchVideo");
|
params.put("doubles", isDouble + "");
|
commonPostWithFailture(context, BASE_URL + "goldcorn/doTask", params, handler);
|
}
|
|
/**
|
* 读小说
|
*
|
* @param context
|
* @param second
|
* @param handler
|
*/
|
public static void readNovel(Context context, int second, BasicTextHttpResponseHandler handler) {
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
params.put("timeSeconds", second + "");
|
String uid = UserUtil.getUid(context);
|
params.put("uid", uid);
|
params.put("type", "readNovel");
|
commonPostWithFailture(context, BASE_URL + "goldcorn/doTask", params, handler);
|
}
|
|
/**
|
* 浏览资讯
|
*
|
* @param context
|
* @param num
|
* @param handler
|
*/
|
public static void scanNews(Context context, int num, BasicTextHttpResponseHandler handler) {
|
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
|
params.put("num", num + "");
|
String uid = UserUtil.getUid(context);
|
params.put("uid", uid);
|
params.put("type", "scanNews");
|
commonPostWithFailture(context, BASE_URL + "goldcorn/doTask", params, handler);
|
}
|
|
|
private static void commonPost(Context context, String url,
|
LinkedHashMap<String, String> params,
|
BasicTextHttpResponseHandler handler) {
|
if (Constant.isDisableProxy) {
|
commonPost(context, url, params, null, handler);
|
} else {
|
Toast.makeText(context, "服务器拒绝访问,请查看是否禁用了代理服务器",
|
Toast.LENGTH_SHORT).show();
|
return;
|
}
|
}
|
|
|
private static void commonPost(Context context, String url,
|
LinkedHashMap<String, String> params, HashMap<String, File[]> files,
|
BasicTextHttpResponseHandler handler) {
|
commonPost(context, url, params, files, handler, true);
|
}
|
|
private static void commonPostWithFailture(final Context context, String url,
|
LinkedHashMap<String, String> params,
|
final BasicTextHttpResponseHandler handler) {
|
commonPost(context, url, params, handler);
|
}
|
|
|
private static void commonPost(Context context, String url,
|
LinkedHashMap<String, String> params, HashMap<String, File[]> files,
|
BasicTextHttpResponseHandler handler, boolean asyn) {
|
Request request = null;
|
SharedPreferences sp = context.getSharedPreferences("Session", MODE_PRIVATE);
|
String seseionId = sp.getString("sessionid", "");
|
String[] tags = url.split("/");
|
String tag = tags[tags.length - 2] + "/" + tags[tags.length - 1];
|
if (files == null || files.size() == 0) {
|
request = new Request.Builder().url(url).post(validateParams(params,
|
context, handler).build()).tag(tag).addHeader("cookie", seseionId).build();
|
} else if (files != null && files.size() > 0) {
|
MultipartBody body = validateParams(params, files, context, handler);
|
request = new Request.Builder()
|
.url(url)
|
.post(body)
|
.tag(tag)
|
.addHeader("cookie", seseionId)
|
.build();
|
}
|
|
if (handler == null) {
|
mOkHttpClient.newCall(request).enqueue(new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
|
}
|
});
|
} else {
|
mOkHttpClient.newCall(request).enqueue(handler);
|
}
|
}
|
|
|
private static void commonPostSoon(Context context, String url,
|
LinkedHashMap<String, String> params, HashMap<String, File[]> files,
|
BasicTextHttpResponseHandler handler) {
|
Request request = null;
|
SharedPreferences sp = context.getSharedPreferences("Session", MODE_PRIVATE);
|
String seseionId = sp.getString("sessionid", "");
|
String[] tags = url.split("/");
|
String tag = tags[tags.length - 2] + "/" + tags[tags.length - 1];
|
if (files == null || files.size() == 0) {
|
request = new Request.Builder().url(url).post(validateParams(params,
|
context, handler).build()).tag(tag).addHeader("cookie", seseionId).build();
|
} else if (files != null && files.size() > 0) {
|
MultipartBody body = validateParams(params, files, context, handler);
|
request = new Request.Builder()
|
.url(url)
|
.post(body)
|
.tag(tag)
|
.addHeader("cookie", seseionId)
|
.build();
|
}
|
|
if (handler == null) {
|
mOkHttpClientSoon.newCall(request).enqueue(new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
|
}
|
});
|
} else {
|
mOkHttpClientSoon.newCall(request).enqueue(handler);
|
}
|
}
|
|
|
/**
|
* 只传递表单数据
|
*
|
* @param params
|
* @param context
|
* @param callback
|
* @return
|
*/
|
public static FormBody.Builder validateParams(
|
LinkedHashMap<String, String> params, Context context, BasicTextHttpResponseHandler callback) {
|
params = getRequestParams(context, params);
|
FormBody.Builder builder = new FormBody.Builder();
|
for (LinkedHashMap.Entry<String, String> entry : params.entrySet()) {
|
if ((!StringUtils.isEmpty(entry.getKey()))) {
|
builder.add(entry.getKey(), entry.getValue());
|
}
|
}
|
if (callback != null)
|
callback.onStart();
|
return builder;
|
}
|
|
/**
|
* 文件和表单数据
|
*
|
* @param params
|
* @param context
|
* @param callback
|
* @return
|
*/
|
public static MultipartBody validateParams(
|
LinkedHashMap<String, String> params, HashMap<String, File[]> files, Context context, BasicTextHttpResponseHandler callback) {
|
params = getRequestParams(context, params);
|
|
MultipartBody.Builder builder = new MultipartBody.Builder();
|
builder.setType(MultipartBody.FORM);
|
for (LinkedHashMap.Entry<String, String> entry : params.entrySet()) {
|
builder.addFormDataPart(entry.getKey(), entry.getValue());
|
}
|
for (LinkedHashMap.Entry<String, File[]> entry : files.entrySet()) {
|
for (int i = 0; i < entry.getValue().length; i++) {
|
builder.addFormDataPart(entry.getKey(), entry.getValue()[i].getName(), RequestBody.create(MediaType.parse("file/*"), entry.getValue()[i]));//添加文件
|
}
|
}
|
|
callback.onStart();
|
return builder.build();
|
}
|
|
|
public static LinkedHashMap<String, String> getRequestParams(Context context, LinkedHashMap<String, String> params) {
|
if (params == null) {
|
params = new LinkedHashMap<>();
|
}
|
//获取基础参数
|
params.putAll(getBaseParams(context));
|
//获取签名
|
params.put("sign", getSign(params));
|
return params;
|
}
|
|
|
/**
|
* 获取签名信息
|
*
|
* @param params
|
* @return
|
*/
|
private static String getSign(Map<String, String> params) {
|
Iterator<String> its = params.keySet().iterator();
|
List<String> list = new ArrayList<>();
|
while (its.hasNext()) {
|
String key = its.next();
|
Object value = params.get(key);
|
list.add(key + "=" + value);
|
}
|
Collections.sort(list);
|
String sign = "";
|
for (String str : list) {
|
sign += str + "&";
|
}
|
return MD5Utils.getMD532(sign + "BuWan*@_%MakeMoney!!");
|
}
|
|
|
/**
|
* 获取基础参数
|
*
|
* @param context
|
* @return
|
*/
|
private static Map<String, String> getBaseParams(Context context) {
|
Map<String, String> params = new HashMap<>();
|
int version = PackageUtils2.getVersionCode(context);
|
long time = System.currentTimeMillis();
|
String deviceType = DeviceInfoUtil.getSystemModel(context);
|
params.put("packages", context.getPackageName());
|
params.put("version", version + "");
|
params.put("platform", "android");
|
params.put("channel", ManifestDataUtil.getAppMetaData(context, "UMENG_CHANNEL"));
|
params.put("osVersion", MobileUtil.getSystemVersion());
|
params.put("deviceType", StringUtils.isEmpty(deviceType) ? "" : deviceType);
|
params.put("timestamp", time + "");
|
params.put("device", DeviceInfoUtil.getDeviceId(context));
|
params.put("utdId", DeviceInfoUtil.getUtdid(context));
|
return params;
|
}
|
}
|