/*** 快递鸟* 物流跟踪:* 1. 除天天快递、申通快递外,其他主流的快递公司都支持;* 2. 顺丰速运:仅支持通过快递鸟预约取件接口/电子面单接口发货的顺丰单号查询。* 3. 承诺达:仅支持通过快递鸟预约取件接口/电子面单接口发货的承诺达单号查询。* @Author: liangkesai* @CreateDate: 2018/12/26 15:45*/
public class ExpressUtils {public static String stateForStr(int state){StringBuffer sb = new StringBuffer();switch (state){case 0:sb.append("无轨迹");break;case 1:sb.append("已揽收");break;case 2:sb.append("在途中");break;case 3:sb.append("签收");break;case 4:sb.append("问题件");break;}return sb.toString();}/*** Json方式  物流跟踪信息订阅** @throws Exception*/public static JSONObject orderTracesSubByJson(String ShipperCode, String LogisticCode) {String str = "{'LogisticCode':'" + LogisticCode + "','ShipperCode':'" + ShipperCode + "'}";JSONObject json = null;try {Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(str, "UTF-8"));params.put("EBusinessID", Express.EBUSINESSID);params.put("RequestType", "1008");String dataSign = encrypt(str, Express.APP_KEY, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result = UrlUtils.sendPost(Express.EXTERFACE_INVOKE, params);json = JSON.parseObject(result);if (json == null) {throw new RRException("请求返回为空");}if (!(boolean) json.get("Success")) {throw new RRException("物流信息订阅异常: " + json.get("Reason"));}} catch (Exception e) {e.printStackTrace();}return json;}/*** Json方式 即时查询快递** @throws Exception*/public static JSONObject getOrderTracesByJson(String ShipperCode, String LogisticCode) {String requestData = "{'OrderCode':'','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "'}";JSONObject json = null;try {Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", Express.EBUSINESSID);params.put("RequestType", "1002");String dataSign = encrypt(requestData, Express.APP_KEY, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result = UrlUtils.sendPost(Express.QUERY, params);json = JSON.parseObject(result);if (json == null) {throw new RRException("请求返回为空");}if (!(boolean) json.get("Success")) {throw new RRException("快递查询异常: " + json.get("Reason"));}} catch (Exception e) {e.printStackTrace();}return json;}/*** 预约取件(在线下单)* bean 转 json 会出现转义问题 依据官方demo 采用字符串拼接json** @throws Exception*/public static JSONObject orderOnlineByJson(RequestData requestData) {String str = "{'ShipperCode':'" + requestData.getShipperCode() + "','OrderCode':'" + requestData.getOrderCode() + "','PayType':'" + requestData.getPayType() + "','ExpType':'" + requestData.getExpType() + "'," +"'Receiver':{'Name':'" + requestData.getReceiver().getName() + "','Mobile':'" + requestData.getReceiver().getMobile() + "','ProvinceName':'" + requestData.getReceiver().getProvinceName() + "','CityName':'" + requestData.getReceiver().getCityName() + "','Address':'" + requestData.getReceiver().getAddress() + "'}," +"'Sender':{'Name':'" + requestData.getSender().getName() + "','Mobile':'" + requestData.getSender().getMobile() + "','ProvinceName':'" + requestData.getSender().getProvinceName() + "','CityName':'" + requestData.getSender().getCityName() + "','Address':'" + requestData.getSender().getAddress() + "'}," +"'StartDate:'" + requestData.getStartDate() + "',EndDate:'" + requestData.getEndDate() + "'," +"'Commodity':[{'GoodsName':'" + requestData.getCommodity().getGoodsName() + "'}]}";JSONObject json = null;try {Map<String, Object> params = new HashMap<String, Object>();params.put("RequestData", urlEncoder(str, "UTF-8"));params.put("EBusinessID", Express.EBUSINESSID);params.put("RequestType", "1001");String dataSign = encrypt(str, Express.APP_KEY, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");SySUtils.check(3);String result = UrlUtils.sendPost(Express.OORDERSERVICE, params);json = JSON.parseObject(result);if (json == null) {throw new RRException("请求返回为空");}if (!(boolean) json.get("Success")) {throw new RRException("预约取件异常 : " + json.get("Reason"));}} catch (Exception e) {e.printStackTrace();}return json;}/*** MD5加密** @param str     内容* @param charset 编码方式* @throws Exception*/private static String MD5(String str, String charset) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes(charset));byte[] result = md.digest();StringBuffer sb = new StringBuffer(32);for (int i = 0; i < result.length; i++) {int val = result[i] & 0xff;if (val <= 0xf) {sb.append("0");}sb.append(Integer.toHexString(val));}return sb.toString().toLowerCase();}/*** base64编码** @param str     内容* @param charset 编码方式* @throws UnsupportedEncodingException*/public static String base64(String str, String charset) throws UnsupportedEncodingException {String encoded = Base64.encode(str.getBytes(charset));return encoded;}public static String urlEncoder(String str, String charset) throws UnsupportedEncodingException {String result = URLEncoder.encode(str, charset);return result;}/*** 判断是否从快递鸟进入的推送数据** @param RequestData* @param DataSign* @return*/public static boolean isFromKdniao(String RequestData, String DataSign) {try {return encrypt(RequestData, Express.APP_KEY, "utf-8").equals(DataSign);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return false;}/*** 电商Sign签名生成** @param content  内容* @param keyValue Appkey* @param charset  编码方式* @return DataSign签名* @throws UnsupportedEncodingException ,Exception*/private static String encrypt(String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception {if (keyValue != null) {return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}public static void main(String[] args) throws Exception {System.out.println(getOrderTracesByJson("YZPY","9894396360151"));System.out.println(getOrderTracesByJson("YZPY","9894394393456"));}}

快递鸟 物流跟踪订阅 即时查询快递 预约取件(在线下单)相关推荐

  1. 快递鸟物流跟踪api

    应用场景 (1)电商网站用户打开"我的订单"时调用此API显示物流信息详情. (2)电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题. (3)适用于日查询量& ...

  2. 免费试用快递鸟预约取件API接口文档

    1.下单类接口 1.1 预约取件接口 功能说明 1. 预约取件为用户解决在线发货需求,在线通知快递员上门取件,适用于在线下单.APP端下单.售后退货等,此接口用于通知快递公司快递员上门揽件. 2. 支 ...

  3. 快递鸟物流查询轨迹地图API接口案例代码java

    一.接口描述/说明 1.即时查询(轨迹地图版)接口 (1)查询接口支持按照运单号查询(单个/批量查询). (2)接口需要指定快递单号的快递公司编码,格式不对或则编码错误都会返失败的信息. 如:EMS物 ...

  4. 免费对接快递鸟物流查询接口文档

    轨迹查询类接口 1.在途监控 快递鸟汇集国内外1600多家快递公司的物流轨迹数据,以接口形式开放给用户使用,支持即时查询+订阅两种调用方式,为用户提供全流程的物流状态查询服务(包括已揽收.在途中.到达 ...

  5. 快递鸟物流查询接口java案例

    说明 对接快递鸟物流API案例的全部代码都贴出来了,复制粘贴即可上手,需要注意配置文件数据一定要准确,1个配置文件,2个实体类,1个接口,1个接口实现类,总共5个文件. 1.配置文件 properti ...

  6. python免费对接快递鸟api单号识别查询接口

    技术文档请参考快递鸟官网api:免费查询快递接口_100%安全保障_物流即时查询API-快递鸟 快递公司编码链接:https://www.kdniao.com/file/2019快递鸟接口支持快递公司 ...

  7. python摄像头识别快递单号查询_python如何免费对接快递鸟api单号识别查询接口

    (一)接入流程: 1.登录快递鸟官网注册页面注册快递鸟账号 2.登录快递鸟用户管理后台 注:登录快递鸟用户管理后台后获得用户ID和APIKey,此用于保证应用来源的可靠性,避免应用伪造,被不法使用. ...

  8. python摄像头识别快递单号查询_免费对接快递鸟api单号识别查询接口(python)

    由于自己网站需要对接一些物流查询快递,然后在网上搜了一圈发现快递鸟比较适合我 之前写快递api的时候,官网上只有php和.net的示例,而我使用python封装的相关功能踩了许多坑,才搞出来,分享一下 ...

  9. 快递鸟物流接口的调用

    1.快递鸟物流接口相当简单 2.先按照官方要求注册一个人认证账号,申请所需要的技术服务 3.找到对应的api技术文档,拉倒最下面有个demo下载,下载对应的文件 4.复制里面的php代码,将其改成自己 ...

最新文章

  1. 开源项目贡献者_如何吸引新的贡献者加入您的开源项目
  2. CRM WEB UI 04明细界面添加按钮
  3. 永信至诚CTO张凯:CloudStack+Docker构建云端信息安全实验场
  4. 查找两个字符串a,b中的最长公共子串
  5. 【2018icpc宁夏邀请赛现场赛】【Gym - 102222A】Maximum Element In A Stack(动态的栈中查找最大元素)
  6. 科目三中模拟灯光使用考试常见的错误 广州学车网光大国际驾校学车
  7. AppDelegate 方法介绍
  8. 仿百度文库解决方案(一)——总体思路
  9. 中国天气预报网接口及城市代码
  10. 【解决方案】施工现场如何实现全方位视频监控?EasyGBS视频智能告警分析平台搭建智慧工地
  11. Win10 LSTC与Ubuntu18.04LTS双系统安装详细流程
  12. 软件工程4-软件概要设计
  13. argb和rgb风扇的区别是什么
  14. 客房管理系统C语言——课程设计实习
  15. ISE在win10中闪退解决方法以及ISE14.7安装包
  16. OpenFOAM-v2112安装——很详细
  17. uniapp尺寸适配的一些记录
  18. util是什么意思计算机英语,util是什么意思_util怎么读_util翻译_用法_发音_词组_同反义词_跑龙套-新东方在线英语词典...
  19. 清华大学OpenBMB正式开源部署至OpenI启智社区:让大模型飞入千家万户
  20. 项目经理如何做好项目数据分析?

热门文章

  1. 图片二维码,如何将图片制作成二维码
  2. c语言求最小公倍数和最大公约数三种算法
  3. 哪种计算机支持刻录功能,哪种软件更适合刻录CD |用flac刻录CD的方法
  4. C++多线程std::async、std::future、std::packaged_task、std::promise
  5. IDEA使用教程(二) 快捷键
  6. DataTables warning:table id = TableDate: Cannot reinitialise DataTable的解决办法
  7. codeforces1149B. Three Religions
  8. 两线怎么接三线插座图_三线插座怎么接两线
  9. python爬虫之糗事百科
  10. 目标检测tricks(基于detectron2)