小店 OpenApi 文档(old):http://openapidoc.jinritemai.com/
抖点开放平台(new):https://op.jinritemai.com/
工具类
/* 使用MD5进行加密得到sign */
public static String stringToMD5(String secret, TreeMap<String, String> params) {
String plainText = secret;
for (String key : params.keySet()) {
plainText += key + params.get(key);
}
plainText += secret;
// org.springframework.util.DigestUtils;
// plainText = DigestUtils.md5DigestAsHex(plainText.getBytes());// 或直接使用这个即可
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有这个md5算法!");
}
StringBuilder md5code = new StringBuilder(new BigInteger(1, secretBytes).toString(16));
while (md5code.length() < 32) {
md5code.insert(0, "0");
}
return md5code.toString();
}
/* 拼接请求参数 */
public static String splicing(String baseUrl, final Map<?, ?> values) {
StringBuilder stringBUilder = new StringBuilder();
stringBUilder.append(baseUrl);
if (!values.isEmpty()) {
for (Entry<?, ?> entry : values.entrySet()) {
String name = entry.getKey().toString();
String value = entry.getValue().toString();
stringBUilder.append(name).append("=").append(value).append("&");
}
}
return stringBUilder.deleteCharAt(stringBUilder.length() - 1).toString();
}
1.API接口>物流发货API> /order/logisticsCompanyList
String app_key = "app_key";
String app_secret = "app_secret";
String access_token = "access_token";
String method = "order.logisticsCompanyList";
String param_json = "{}";
TreeMap<String, String> params = new TreeMap();
params.put("method", method);
params.put("param_json", param_json);
/***********************************************************/
/* 下面这些参数是公共的 */
String baseUrl = "https://openapi-fxg.jinritemai.com/" + params.get("method").toString().replace(".", "/") + "?";
params.put("app_key", app_key);
params.put("timestamp", "2011-06-16 13:23:30");
// params.put("v", "1");没有access_token使用
params.put("v", "2");// 有access_token使用
String sign = stringToMD5(app_secret, params);
params.put("sign", sign);
params.put("access_token", access_token);// 有access_token使用
String url = splicing(baseUrl, params);
System.out.println(url);
2.API接口>订单管理API> /order/list
String app_key = "app_key";
String app_secret = "app_secret";
String access_token = "access_token";
String method = "order.list";
TreeMap<String, String> paramJson = new TreeMap();
paramJson.put("end_time", "2019/05/27 23:59:59");
paramJson.put("is_desc", "1");
paramJson.put("order_by", "create_time");
paramJson.put("page", "0");
paramJson.put("size", "100");
paramJson.put("start_time", "2019/05/26 10:00:01");
TreeMap<String, String> params = new TreeMap();
params.put("method", method);
params.put("param_json", JSON.toJSONString(paramJson));
贝贝集团开放平台:http://open.beibei.com/
官方提供的签名算法
public static String getSign(TreeMap<String, String> params) {
String sign = secret;
for (String key : params.keySet()) {
sign += key + params.get(key);
}
sign += secret;
return getMD5(sign);
}
public static String getMD5(String message) {
String md5str = "";
try {
// 1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 2 将消息变成byte数组
byte[] input = message.getBytes();
// 3 计算后获得字节数组,这就是那128位了
byte[] buff = md.digest(input);
// 4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
md5str = bytesToHex(buff);
} catch (Exception e) {
e.printStackTrace();
}
return md5str;
}
/**
* 二进制转十六进制
*
* @param bytes
* @return
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
// 把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if (digital < 0) {
digital += 256;
}
if (digital < 16) {
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
使用下面的签名方式
/* 使用MD5进行加密得到大写的sign */
public static String getSign(String secret, TreeMap<String, String> params) {
String sign = secret;
for (String key : params.keySet()) {
sign += key + params.get(key);
}
sign += secret;
// org.springframework.util.DigestUtils;
sign = DigestUtils.md5DigestAsHex(sign.getBytes()).toUpperCase();
return sign;
}
1.API > 开发文档 > API说明文档 > 物流API > 支持物流公司信息 beibei.outer.logistics.company.get
String app_id = "";
String secret = "";
String session = "";
String method = "beibei.outer.logistics.company.get";
TreeMap<String, String> params = new TreeMap();
params.put("method", method);
/***********************************************************/
String url = "http://api.open.beibei.com/outer_api/out_gateway/route.html";
params.put("app_id", app_id);
params.put("session", session);
params.put("format", "json");
params.put("timestamp", String.valueOf(System.currentTimeMillis()).toString().substring(0, 10));
String sign = getSign(secret, params);
params.put("sign", sign);
String type = "POST";
String strJson = new com.github.kevinsawicki.http.HttpRequest(url, type).form(params).body();
System.out.println(strJson);
2.API > 开发文档 > API说明文档 > 订单API > 商家订单列表 beibei.outer.trade.order.get
String app_id = "";
String secret = "";
String session = "";
String method = "beibei.outer.trade.order.get";
TreeMap<String, String> params = new TreeMap();
params.put("method", method);
params.put("start_time", "2022-09-25 01:11:31");
params.put("end_time", "2022-09-26 01:11:31");
params.put("page_no", "1");
params.put("page_size", "100");
说明:放心购可以改为以下方式,放心购在上面是GET方式请求,不知道为什么用下面的方式只能用POST方式。
/***********************************************************/
/* 下面这些参数是公共的 */
String baseUrl = "https://openapi-fxg.jinritemai.com/" + params.get("method").toString().replace(".", "/");
params.put("app_key", app_key);
params.put("timestamp", "2011-06-16 13:23:30");
// params.put("v", "1");没有access_token使用
params.put("v", "2");// 有access_token使用
String sign = stringToMD5(app_secret, params);
params.put("sign", sign);
params.put("access_token", access_token);// 有access_token使用,不参与签名
// String url = splicing(baseUrl, params);
String type = "POST";
String strJson = new com.github.kevinsawicki.http.HttpRequest(baseUrl, type).form(params).body();
System.out.println(strJson);