7.调用demo
openapi 调用demo
- 以获取书籍章节播放地址调用为例;
- 将下面代码放入java的IDE中调试;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 调用示例
*
* @author chenZhiyong
* @2018-3-14
*/
public class ApiDemo {
// 合作方账号
private static Long partnerId = 200323001810L;
// 合作方加密秘钥
private static String key = "M(z-hhV#e:KANS&k&wnU!NKJ";
private static final String PARTNERID = "partnerId";
private static final String APPID = "appId";
private static final String TOKEN = "token";
public static void main(String[] args) {
// Demo 1 获取章节地址
String url = "http://open.lrts.me/open/resource/entityPath";
Map<String, String> params = new HashMap<>();
params.put("bookId", 598 + "");
params.put("resId", 708261 + "");
String response = httpGet(url, params);
System.out.println(response);
// Demo 2 下单(需要配置白名单)
String orderurl = "http://moon-openapi.lrts.me/order/createOrder";
Map<String, String> orderparams = new HashMap<>();
orderparams.put("os", 2 + "");
orderparams.put("phoneNum", "18825147553");
orderparams.put("goodsType", 3 + "");
orderparams.put("goodsNum", 6 + "");
orderparams.put("totalFee", 5200 + "");
orderparams.put("outOrderNum", "TSPLRT12345678");
String response1 = httpPost(orderurl, orderparams);
System.out.println(response1);
}
/**
* 以get方式请求
*
* @param url URL地址
* @param params 请求参数
* @return java.lang.String
*/
public static String httpGet(String url, Map<String, String> params) {
if (params == null) {
params = new HashMap<>();
}
String path = path(url);
String token = getToken(params, path, key);
params.put("token", token);
params.put("partnerId", partnerId + "");
String paramString = getParamString(params);
String link = url + "?" + paramString;
// 可使用其他http请求工具类
return doHttpGet(link);
}
/**
* 以post方式请求
*
* @param url URL地址
* @param params 请求参数
* @return java.lang.String
*/
public static String httpPost(String url, Map<String, String> params) {
if (params == null) {
params = new HashMap<>();
}
String path = path(url);
String token = getToken(params, path, key);
params.put("token", token);
params.put("partnerId", partnerId + "");
String paramString = getParamString(params);
// 可使用其他http请求工具类
return doHttpPost(url, paramString);
}
/**
* 获取路径
*
* @param url url
* @return java.lang.String
*/
private static String path(String url) {
URL u;
try {
u = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
return u.getPath();
}
/**
* 获取token值
*
* @param paramMap 参数值
* @param path 请求路径
* @param signKey 签名key
* @return java.lang.String
*/
private static String getToken(Map<String, String> paramMap, String path, String signKey) {
Set<String> paramNames = paramMap.keySet();
List<String> availableParamNames = new ArrayList<>();
for (String key : paramNames) {
if (PARTNERID.equals(key) || TOKEN.equals(key) || APPID.equals(key)) {
continue;
}
availableParamNames.add(key);
}
Collections.sort(availableParamNames);
StringBuilder paramsStr = new StringBuilder(path);
for (int i = 0; i < availableParamNames.size(); i++) {
if (i == 0) {
paramsStr.append("?");
}
String key = availableParamNames.get(i);
paramsStr.append(key).append("=").append(paramMap.get(key));
if (i != availableParamNames.size() - 1) {
paramsStr.append("&");
}
}
String signStr = paramsStr + signKey;
return DigestUtils.md5Hex(signStr.getBytes(StandardCharsets.UTF_8));
}
/**
* 获取参数字符串
*
* @param params 参数map
* @return java.lang.String
*/
private static String getParamString(Map<String, String> params) {
StringBuilder content = new StringBuilder();
List<String> keys = new ArrayList<>(params.keySet());
Collections.sort(keys);
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (value != null) {
content.append(i == 0 ? "" : "&").append(key).append("=").append(value);
} else {
content.append(i == 0 ? "" : "&").append(key).append("=");
}
}
return content.toString();
}
private static String doHttpGet(String reqUrl) {
try {
URL url = new URL(reqUrl);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("GET");
InputStream in;
if (urlConn.getResponseCode() != 200) {
in = urlConn.getErrorStream();
} else {
in = urlConn.getInputStream();
}
BufferedInputStream bufferedInputStream = new BufferedInputStream(in);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int i; (i = bufferedInputStream.read(buf)) > 0;) {
out.write(buf, 0, i);
}
out.flush();
return new String(out.toByteArray(), StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
private static String doHttpPost(String reqUrl, String content) {
HttpURLConnection urlConn;
try {
URL url = new URL(reqUrl);
urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("POST");
urlConn.setConnectTimeout(50000);
urlConn.setReadTimeout(50000);
urlConn.setDoOutput(true);
byte[] b = content.getBytes();
urlConn.getOutputStream().write(b);
urlConn.getOutputStream().flush();
urlConn.getOutputStream().close();
InputStream in;
if (urlConn.getResponseCode() != 200) {
in = urlConn.getErrorStream();
} else {
in = urlConn.getInputStream();
}
BufferedReader rd = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
String tempLine = rd.readLine();
StringBuilder tempStr = new StringBuilder();
String crlf = System.getProperty("line.separator");
while (tempLine != null) {
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
rd.close();
in.close();
return tempStr.toString();
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}