接口调用DEMO
JAVA
JDK版本需要在1.8及以上
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class OpenApiTestClient {
private static final String APP_ID_PARAM_NAME="appid";
private static final String TIMESTAMP_PARAM_NAME="ts";
private static final String SIGN_PARAM_NAME="sign";
private static final String OPEN_ALI_HOST = "https://glm-test.glodon.com/glm/api/open";
private static final String PRODUCT_OPEN_ALI_HOST = "https://glm.glodon.com/glm/api/open";
private static final String DISPATCH_HOST = "https://glm-test.glodon.com/iot";
private static final String PRODUCT_APPID = "";
private static final String PRODUCT_SECRET = "";
private static final String ALL_WORKER_BASE_INFO = "/worker/allWorkerBaseInfo";
private String host = PRODUCT_OPEN_ALI_HOST;
private String appId = PRODUCT_APPID;
private String appSecret = PRODUCT_SECRET;
public static void main(String[] args) {
OpenApiTestClient openApiTestClient = new OpenApiTestClient();
Map<String, Object> params = new HashMap<>();
params.put("projectId", "");
params.put("start", "2019-08-15 00:00:00");
params.put("end", "2019-08-16 00:00:00");
params.put("pageNo", "1");
params.put("pageSize", "50");
openApiTestClient.sendGETRequest(ALL_WORKER_BASE_INFO, params);
}
public String sendGETRequest(String path, Map<String,Object> requestParams){
String host = this.host;
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(host + path)).newBuilder();
requestParams.put(APP_ID_PARAM_NAME,appId);
String sign = getSign(requestParams);
requestParams.put(SIGN_PARAM_NAME,sign);
requestParams.forEach((s, o) -> {
urlBuilder.addQueryParameter(s, (String) o);
});
log.info("开始请求接入服务系统接口,地址为:{}",urlBuilder.build());
Request request = new Request.Builder()
.url(urlBuilder.build())
.build();
return getResult(request);
}
private String getSign(Map<String,Object> paramsMap){
List<String> paramsList = new ArrayList<>();
paramsMap.forEach((s, o) -> {
String stringBuilder = s + o;
paramsList.add(stringBuilder);
});
StringBuilder beforeMd5 = new StringBuilder();
beforeMd5.append(appSecret);
paramsList.stream()
.sorted(String::compareTo)
.collect(Collectors.toList())
.forEach(beforeMd5::append);
beforeMd5.append(appSecret);
return DigestUtils.md5Hex(beforeMd5.toString()).toUpperCase();
}
public String sendPOSTRequest(String path, Object bodyParam){
String host = this.host;
String jsonString = JSON.toJSONString(bodyParam);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=UTF-8"),jsonString);
StringBuilder signBuilder = new StringBuilder();
String time = System.currentTimeMillis() + "";
signBuilder.append(appSecret)
.append(APP_ID_PARAM_NAME)
.append(appId)
.append(TIMESTAMP_PARAM_NAME)
.append(time)
.append(appSecret);
log.info("开始请求开放平台服务系统接口,地址为:{}",host+path);
Request request = new Request.Builder()
.addHeader(APP_ID_PARAM_NAME,appId)
.addHeader(TIMESTAMP_PARAM_NAME,time)
.addHeader(SIGN_PARAM_NAME, DigestUtils.md5Hex(signBuilder.toString()).toUpperCase())
.url(host+path)
.post(requestBody)
.build();
return getResult(request);
}
private String getResult(Request request) {
OkHttpClient client = new OkHttpClient();
Response response;
try {
response = client.newCall(request).execute();
if (response.body() != null) {
return response.body().string();
} else {
throw new RuntimeException();
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}