德邦快递接⼝开发-java(⼯具类)
德邦快递的接⼊,关键也是组合数据,提交并处理响应数据,流程和顺丰差不多,⼯具类⽐较简单,官⽅⽂档都有,在做之前,先把官⽅⽂档都读⼀遍,⼤概知道要的内容在什么位置,以及了解流程。
对接规范和流程
◆传输协议
暂时只⽀持HTTP协议进⾏通信。
◆数据传输格式
所有接⼝暂只⽀持json消息格式。
◆编码格式:UTF-8
交互编码格式统⼀⽤UTF-8,避免传递中⽂数据出现乱码。
◆安全验证
在数据传输过程中,为避免数据被篡改,需要对数据进⾏加密。⼊参由四个参数组成:
params(请求参数),digest(密⽂摘要), timestamp(时间戳),companyCode(第三⽅接⼊商的公司编码,双⽅约定)
参数传递采⽤http post请求,请求消息头设置(“Content-Type”,“application/x-www-form-urlencoded;charset=utf-8”)在传输的参数中,既要传递原始的json字符串params,⼜要传输加密后的摘要digest。
设置有效的请求时间戳,当接收端收到请求端的时间差不在有效的时间戳范围内,则认为该订单⽆效。
德邦开放平台可以根据不同的公司设置不同的时间戳有效时长。调⽤⽅在重发消息时时间戳应重新⽣成,请求报⽂的摘要也需要重新⽣成。
timestamp:
13位Unix时间戳 timestamp = System.currentTimeMillis();
digest:
摘要的⽣成规则是 String plainText = params + appkey + timestamp,注意传递的timestamp要和加密的timestamp值相同。
加密源码如下:
private static String getDigest(String plainText) {
deBase64String(DigestUtils.md5Hex(plainText).getBytes());
}
Base64引⽤ : dec.binary.Base64
DigestUtils引⽤ : dec.digest.DigestUtils
然后可以测试⼀个流程是否可⾏,⽐如【新】下单服务接⼝:
static String params = "{\n" +
" \"companyCode\":\"EWB111\",\n" +
" \"custOrderNo\":\"123456\",\n" +
" \"customerCode\":\"12345678\",\n" +
" \"logisticID\":\"LPEXP33343111111113445\",\n" +
" \"needTraceInfo\":1,\n" +
" \"orderType\":\"1\",\n" +
" \"packageInfo\":{\n" +
" \"cargoName\":\"货物名\",\n" +
" \"deliveryType\":\"9\",\n" +
" \"totalNumber\":2,\n" +
" \"totalVolume\":0.01,\n" +
" \"totalWeight\":1,\n" +
" \"packageService\":\"纸\"\n" +
" },\n" +
" \"receiver\":{\n" +
" \"address\":\"详细地址\",\n" +
" \"city\":\"上海市\",\n" +
" \"companyName\":\"德邦\",\n" +
" \"county\":\"青浦区\",\n" +
" \"mobile\":\"180****2531\",\n" +
" \"name\":\"AAA\",\n" +
" \"province\":\"上海\",\n" +
" \"town\":\"徐泾镇\"\n" +
" },\n" +
"\n" +
" \"sender\":{\n" +
" \"address\":\"详细地址\",\n" +
" \"city\":\"上海市\",\n" +
" \"companyName\":\"德邦\",\n" +
" \"county\":\"青浦区\",\n" +
" \"mobile\":\"180****3451\",\n" +
" \"name\":\"AAA\",\n" +
" \"province\":\"上海\",\n" +
" \"town\":\"徐泾镇\"\n" +
" },\n" +
" \"transportType\":\"PACKAGE\",\n" +
" \"gmtCommit\":\"@time\",\n" +
" \"payType\":\"1\",\n" +
" \"isOut\":\"N\"\n" +
"}";
public static void main(String[] args) throws JSONException, Exception {
long timestamp = System.currentTimeMillis();
Calendar cal = Instance();
cal.setTimeInMillis(timestamp);
String _params = placeAll("@time", DateUtils.dateToString(cal, "yyyy-MM-dd HH:mm:ss")); String digest = getDigest(_params + 你的appkey + timestamp);
String companyCode = "你的company code";
Map map = new LinkedHashMap();
map.put("params", _params);
map.put("digest", digest);
map.put("timestamp", String.valueOf(timestamp));
map.put("companyCode", companyCode);replaceall()
String response = HttpClientUtils.post(NEW_ORDER_URL, map);
System.out.println(response);
}
如⽆意外,应该会收到成功的响应数据,然后你就可以⼀次性地把你需要的接⼝都测试⼀遍,只需要修改⼀下传⼊的参数,看到⼀⽚绿还是挺爽的。测试完,再慢慢逐个完善业务逻辑吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论