最近公司要求要对接抖音小店获取店铺订单数据,所以按照抖店开放平台API上获取拉取订单
官方参考文档:抖店开放平台
下面是我本地的Demo代码:
JSONObject对象里面存放的业务参数
param_json | String | 是 | {"cid":"12","page":"1"} | 标准json类型,里面是业务参数按照参数名的字符串大 小排序具体参数值,参考每个接口的参数表 |
我这出现过JSON转换成String会出现顺序变乱的情况,导致签名一直不一致,查阅资料发现只需要
new JSONObject( ) 在加上一个true即可。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simpleDateFormat.format(new Date());
//参数加密
JSONObject param_json = new JSONObject(true);
//当前时间
Date now = DateUtils.getNowDate();
//day天之前
Calendar calendar = DateUtils.toCalendar(now);
calendar.add(Calendar.DATE, -day);
long endTime = now.getTime();
long beginTime = calendar.getTimeInMillis();
//下单结束时间
param_json.put("create_time_end", String.valueOf(endTime / 1000));
//下单开始时间
param_json.put("create_time_start", String.valueOf(beginTime / 1000));
//分页
param_json.put("page", page.toString());
param_json.put("size", pageSize.toString());
//获取签名
String sign = fetchSign(method, param_json.toString(), time);
下面官方的方法:
//获取参数签名结果
public String fetchSign(String methodName, String paramJson, String timeStamp) {
String requestStr = APP_SECRET + "app_key" + APP_KEY + "method" + methodName + "param_json" + paramJson + "timestamp"
+ timeStamp + "v2" + APP_SECRET;
System.out.println("参数字符串requestStr = " + requestStr);
return stringToMD5(requestStr);
}
//生成签名
public static String stringToMD5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException | UnsupportedEncodingException 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();
}