Introduce

java-demo 是由快递100官方提供的java sdk,方便调试使用。

java-demo 集成了实时查询、订阅推送、智能判断、云打印相关、电子面单相关、短信、商家寄件等接口。


Features


提供了快递100接口请求参数实体类、返回实体类。提供测试类调试。支持maven、gradle引入


Getting started


java-demo使用和测试可参考java-demo-test。

#gitclonehttps://github.com/kuaidi100-api/java-demo.git


Add Config


使用sdk的可以先配置account.properties,账号信息可以登录快递100获取https://poll.kuaidi100.com/manager/page/myinfo/enterprise(注意不要泄露快递100的账号密码以及授权key等敏感信息,以防被他人盗用!!!)


Gradle


dependencies{implementation'com.github.kuaidi100-api:sdk:1.0.2'}


Maven


<dependency><groupId>com.github.kuaidi100-api</groupId><artifactId>sdk</artifactId><version>1.0.2</version></dependency>

Use Junit Test

publicclassBaseServiceTest{privateStringkey=PropertiesReader.get("key");privateStringcustomer=PropertiesReader.get("customer");privateStringsecret=PropertiesReader.get("secret");privateStringsiid=PropertiesReader.get("siid");privateStringuserid=PropertiesReader.get("userid");privateStringtid=PropertiesReader.get("tid");privateStringsecret_key=PropertiesReader.get("secret_key");privateStringsecret_secret=PropertiesReader.get("secret_secret");/***查询物流轨迹*/@TestpublicvoidtestQueryTrack()throwsException{QueryTrackReqqueryTrackReq=newQueryTrackReq();QueryTrackParamqueryTrackParam=newQueryTrackParam();queryTrackParam.setCom(CompanyConstant.YT);queryTrackParam.setNum("YT9383342193097");queryTrackParam.setPhone("17725390266");Stringparam=newGson().toJson(queryTrackParam);queryTrackReq.setParam(param);queryTrackReq.setCustomer(customer);queryTrackReq.setSign(SignUtils.querySign(param,key,customer));IBaseClientbaseClient=newQueryTrack();System.out.println(baseClient.execute(queryTrackReq));}/***快递信息地图轨迹*/@TestpublicvoidtestQueryMapView()throwsException{QueryTrackReqqueryTrackReq=newQueryTrackReq();QueryTrackParamqueryTrackParam=newQueryTrackParam();queryTrackParam.setCom(CompanyConstant.YD);queryTrackParam.setNum("4311159956248");queryTrackParam.setPhone("17725390266");queryTrackParam.setFrom("河北保定市");queryTrackParam.setTo("湖南岳阳市");queryTrackParam.setResultv2("2");Stringparam=newGson().toJson(queryTrackParam);queryTrackReq.setParam(param);queryTrackReq.setCustomer(customer);queryTrackReq.setSign(SignUtils.querySign(param,key,customer));IBaseClientbaseClient=newQueryTrackMap();HttpResultresult=baseClient.execute(queryTrackReq);QueryTrackMapRespqueryTrackMapResp=newGson().fromJson(result.getBody(),QueryTrackMapResp.class);System.out.println(queryTrackMapResp);}/***订阅*/@TestpublicvoidtestSubscribe()throwsException{SubscribeParameterssubscribeParameters=newSubscribeParameters();subscribeParameters.setCallbackurl("http://www.baidu.com");subscribeParameters.setPhone("17725390266");SubscribeParamsubscribeParam=newSubscribeParam();subscribeParam.setParameters(subscribeParameters);subscribeParam.setCompany(CompanyConstant.ST);subscribeParam.setNumber("773039762404825");subscribeParam.setKey(key);SubscribeReqsubscribeReq=newSubscribeReq();subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);subscribeReq.setParam(newGson().toJson(subscribeParam));IBaseClientsubscribe=newSubscribe();System.out.println(subscribe.execute(subscribeReq));}/***智能识别接口(正式用户可以使用)*/@TestpublicvoidtestAutoNum()throwsException{AutoNumReqautoNumReq=newAutoNumReq();autoNumReq.setKey(key);autoNumReq.setNum("773039762404825");IBaseClientbaseClient=newAutoNum();System.out.println(baseClient.execute(autoNumReq));}/***电子面单图片接口*/@TestpublicvoidtestPrintImg()throwsException{PrintImgParamprintImgParam=newPrintImgParam();printImgParam.setKuaidicom(CompanyConstant.ZJS);printImgParam.setSendManName("张三");printImgParam.setSendManMobile("15999566666");printImgParam.setSendManPrintAddr("广东省深圳市南山区科技南十二路");printImgParam.setRecManName("李四");printImgParam.setRecManMobile("15999566666");printImgParam.setRecManPrintAddr("北京市海淀区xxx路");printImgParam.setType("10");printImgParam.setTempid("180c7c8f646742ca871a92c976392b05");printImgParam.setCount("1");Stringparam=newGson().toJson(printImgParam);Stringt=System.currentTimeMillis()+"";Stringsign=SignUtils.printSign(param,t,key,secret);PrintReqprintReq=newPrintReq();printReq.setKey(key);printReq.setMethod(ApiInfoConstant.ELECTRONIC_ORDER_PIC_METHOD);printReq.setSign(sign);printReq.setParam(param);printReq.setT(t);IBaseClientprintImg=newPrintImg();System.out.println(printImg.execute(printReq));}/***电子面单html接口*/@TestpublicvoidtestPrintHtml()throwsException{ManInforecManInfo=newManInfo();recManInfo.setName("张三");recManInfo.setMobile("15999566666");recManInfo.setPrintAddr("广东省深圳市南山区科技南十二路");ManInfosendManInfo=newManInfo();sendManInfo.setName("李四");sendManInfo.setMobile("15999566666");sendManInfo.setPrintAddr("北京市海淀区xxx路");PrintHtmlParamprintHtmlParam=newPrintHtmlParam();printHtmlParam.setKuaidicom(CompanyConstant.ZJS);printHtmlParam.setCount(2);printHtmlParam.setNeedChild(1);//如果需要返回电子面单,需要设置printHtmlParam.setNeedTemplate("1");printHtmlParam.setSendMan(sendManInfo);printHtmlParam.setRecMan(recManInfo);Stringt=System.currentTimeMillis()+"";Stringparam=newGson().toJson(printHtmlParam);Stringsign=SignUtils.printSign(param,t,key,secret);PrintReqprintReq=newPrintReq();printReq.setKey(key);printReq.setMethod(ApiInfoConstant.ELECTRONIC_ORDER_HTML_METHOD);printReq.setT(t);printReq.setSign(sign);printReq.setParam(param);IBaseClientprintHtml=newPrintHtml();System.out.println(printHtml.execute(printReq));}/***电子面单打印*/@TestpublicvoidtestPrintCloud()throwsException{ManInforecManInfo=newManInfo();recManInfo.setName("张三");recManInfo.setMobile("15999566666");recManInfo.setPrintAddr("广东省深圳市南山区科技南十二路");ManInfosendManInfo=newManInfo();sendManInfo.setName("李四");sendManInfo.setMobile("15999566666");sendManInfo.setPrintAddr("北京市海淀区xxx路");PrintCloudParamprintCloudParam=newPrintCloudParam();printCloudParam.setKuaidicom(CompanyConstant.ZJS);printCloudParam.setCount("1");printCloudParam.setSiid(siid);printCloudParam.setTempid("180c7c8f646742ca871a92c976392b05");printCloudParam.setSendMan(sendManInfo);printCloudParam.setRecMan(recManInfo);Stringparam=newGson().toJson(printCloudParam);Stringt=System.currentTimeMillis()+"";PrintReqprintReq=newPrintReq();printReq.setT(t);printReq.setKey(key);printReq.setMethod(ApiInfoConstant.ELECTRONIC_ORDER_PRINT_METHOD);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setParam(param);IBaseClientbaseClient=newPrintCloud();System.out.println(baseClient.execute(printReq));}/***云打印自定义*/@TestpublicvoidtestCloudCustom()throwsException{CloudPrintCustomParamcloudPrintCustomParam=newCloudPrintCustomParam();cloudPrintCustomParam.setSiid(siid);cloudPrintCustomParam.setCallBackUrl("http://www.baidu.com");cloudPrintCustomParam.setTempid("180c7c8f646742ca871a92c976392b05");Stringt=System.currentTimeMillis()+"";Stringparam=newGson().toJson(cloudPrintCustomParam);PrintReqprintReq=newPrintReq();printReq.setKey(key);printReq.setMethod(ApiInfoConstant.CLOUD_PRINT_CUSTOM_METHOD);printReq.setT(t);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setParam(param);IBaseClientbaseClient=newCloudPrintCustom();System.out.println(baseClient.execute(printReq));}/***云打印附件*/@TestpublicvoidtestCloudAttachment()throwsException{CloudPrintAttachmentParamcloudPrintAttachmentParam=newCloudPrintAttachmentParam();cloudPrintAttachmentParam.setSiid(siid);cloudPrintAttachmentParam.setCallBackUrl("http://www.baidu.com");Stringt=System.currentTimeMillis()+"";Stringparam=newGson().toJson(cloudPrintAttachmentParam);CloudAttachmentReqcloudPrintAttachmentReq=newCloudAttachmentReq();cloudPrintAttachmentReq.setKey(key);cloudPrintAttachmentReq.setMethod(ApiInfoConstant.CLOUD_PRINT_ATTACHMENT_METHOD);cloudPrintAttachmentReq.setT(t);cloudPrintAttachmentReq.setSign(SignUtils.printSign(param,t,key,secret));cloudPrintAttachmentReq.setParam(param);cloudPrintAttachmentReq.setFile(newFile("C:\\Users\\Administrator.-20171106WFEKLN\\Desktop\\1.jpg"));IBaseClientbaseClient=newCloudPrintAttachment();System.out.println(baseClient.execute(cloudPrintAttachmentReq));}/***复打*/@TestpublicvoidtestCloudPrintOld()throwsException{PrintReqprintReq=newPrintReq();CloudPrintOldParamcloudPrintOldParam=newCloudPrintOldParam();cloudPrintOldParam.setTaskId("D21DB1AC74A260E6F5604FC43B4598B8");Stringt=System.currentTimeMillis()+"";Stringparam=newGson().toJson(cloudPrintOldParam);printReq.setKey(key);printReq.setMethod(ApiInfoConstant.CLOUD_PRINT_OLD_METHOD);printReq.setT(t);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setParam(param);IBaseClientcloudPrintOld=newCloudPrintOld();System.out.println(cloudPrintOld.execute(printReq));}/***发送短信*/@TestpublicvoidtestSendSms()throwsException{SendSmsReqsendSmsReq=newSendSmsReq();sendSmsReq.setCallback("http://www.baidu.com");Map<String,String>content=newHashMap<String,String>();content.put("username","测试用户");sendSmsReq.setContent(newGson().toJson(content));sendSmsReq.setPhone("15994708912");sendSmsReq.setSeller("贵司名称");sendSmsReq.setUserid(userid);sendSmsReq.setTid(tid);sendSmsReq.setSign(SignUtils.smsSign(key,userid));IBaseClientsendSms=newSendSms();System.out.println(sendSms.execute(sendSmsReq));}/***商家寄件查询运力*/@TestpublicvoidtestBorderQuery()throwsException{BOrderQueryReqbOrderQueryReq=newBOrderQueryReq();bOrderQueryReq.setSendAddr("福田区华强南");Stringt=String.valueOf(System.currentTimeMillis());Stringparam=newGson().toJson(bOrderQueryReq);PrintReqprintReq=newPrintReq();printReq.setKey(key);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setT(t);printReq.setParam(param);printReq.setMethod(ApiInfoConstant.B_ORDER_QUERY_TRANSPORT_CAPACITY_METHOD);IBaseClientbOrder=newBOrder();System.out.println(bOrder.execute(printReq));}/***商家寄件*/@TestpublicvoidtestBorder()throwsException{PrintReqprintReq=newPrintReq();BOrderReqbOrderReq=newBOrderReq();bOrderReq.setKuaidicom(CompanyConstant.ZT);bOrderReq.setSendManName("张三");bOrderReq.setSendManMobile("15966666666");bOrderReq.setSendManPrintAddr("广东深圳市福田区华强南");bOrderReq.setRecManName("李四");bOrderReq.setRecManMobile("15966666666");bOrderReq.setRecManPrintAddr("广东深圳市南山区金蝶软件园");bOrderReq.setCallBackUrl("http://www.baidu.com");bOrderReq.setCargo("文件");bOrderReq.setRemark("测试下单,待会取消");bOrderReq.setWeight("1");bOrderReq.setSalt("123456");bOrderReq.setServiceType("标准快递");Stringt=String.valueOf(System.currentTimeMillis());Stringparam=newGson().toJson(bOrderReq);printReq.setKey(key);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setT(t);printReq.setParam(param);printReq.setMethod(ApiInfoConstant.B_ORDER_SEND_METHOD);IBaseClientbOrder=newBOrder();System.out.println(bOrder.execute(printReq));}/***商家寄件获取验证码*/@TestpublicvoidtestBorderGetCode()throwsException{PrintReqprintReq=newPrintReq();BOrderGetCodeReqbOrderGetCodeReq=newBOrderGetCodeReq();bOrderGetCodeReq.setTaskId("4D07550D8E685E06B3C679632E68ACDD");bOrderGetCodeReq.setOrderId("100012022010566");Stringt=String.valueOf(System.currentTimeMillis());Stringparam=newGson().toJson(bOrderGetCodeReq);printReq.setKey(key);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setT(t);printReq.setParam(param);printReq.setMethod(ApiInfoConstant.B_ORDER_CODE_METHOD);IBaseClientbOrder=newBOrder();System.out.println(bOrder.execute(printReq));}/***商家寄件取消*/@TestpublicvoidtestBorderCancel()throwsException{PrintReqprintReq=newPrintReq();BOrderCancelReqbOrderCancelReq=newBOrderCancelReq();bOrderCancelReq.setTaskId("4D07550D8E685E06B3C679632E68ACDD");bOrderCancelReq.setOrderId("100012022010566");bOrderCancelReq.setCancelMsg("测试单取消");Stringt=String.valueOf(System.currentTimeMillis());Stringparam=newGson().toJson(bOrderCancelReq);printReq.setKey(key);printReq.setSign(SignUtils.printSign(param,t,key,secret));printReq.setT(t);printReq.setParam(param);printReq.setMethod(ApiInfoConstant.B_ORDER_CANCEL_METHOD);IBaseClientbOrder=newBOrder();System.out.println(bOrder.execute(printReq));}/***C端查询运力*/@TestpublicvoidtestCOrderQuery()throwsException{COrderQueryReqcOrderQueryReq=newCOrderQueryReq();cOrderQueryReq.setAddress("广东省深圳市南山区华强南");cOrderQueryReq.setSecret_key(secret_key);cOrderQueryReq.setSecret_code(CloudApiCodeConstant.ORDER_QUERY_EXPRESS);cOrderQueryReq.setSecret_sign(SignUtils.cloudSign(secret_key,secret_secret));IBaseClientcloudBase=newCloudBase();System.out.println(cloudBase.execute(cOrderQueryReq));}/***c端寄件*/@TestpublicvoidtestCOrder()throwsException{COrderReqcOrderReq=newCOrderReq();cOrderReq.setCom(CompanyConstant.JD);cOrderReq.setSendManName("张三");cOrderReq.setSendManMobile("15966666666");cOrderReq.setSendManPrintAddr("广东深圳市南山区金蝶软件园");cOrderReq.setRecManName("李四");cOrderReq.setRecManMobile("15966666666");cOrderReq.setRecManPrintAddr("广东深圳市福田区华强南");cOrderReq.setCallBackUrl("http://www.baidu.com");cOrderReq.setCargo("文件");cOrderReq.setRemark("测试下单,待会取消");cOrderReq.setWeight("1");cOrderReq.setSalt("123456");cOrderReq.setSecret_key(secret_key);cOrderReq.setSecret_code(CloudApiCodeConstant.ORDER);cOrderReq.setSecret_sign(SignUtils.cloudSign(secret_key,secret_secret));IBaseClientcloudBase=newCloudBase();System.out.println(cloudBase.execute(cOrderReq));}/***c端取消寄件*/@TestpublicvoidtestCOrderCancel()throwsException{COrderCancelReqcOrderCancelReq=newCOrderCancelReq();cOrderCancelReq.setTaskId("B19BB4C6F33BE9E735A63D4142557751");cOrderCancelReq.setOrderId("11115207");cOrderCancelReq.setCancelMsg("测试单");cOrderCancelReq.setSecret_key(secret_key);cOrderCancelReq.setSecret_code(CloudApiCodeConstant.ORDER_CANCEL);cOrderCancelReq.setSecret_sign(SignUtils.cloudSign(secret_key,secret_secret));IBaseClientcloudBase=newCloudBase();System.out.println(cloudBase.execute(cOrderCancelReq));}}

FAQ

问题1.快递100api接口里sign该如何处理?

快递100加密方式统一为MD5后转大写,可以参考签名


实例

org.apache.commons.codec.digest.DigestUtils.md5Hex(msg).toUpperCase();


问题2.使用了快递100订阅接口后,该如何处理回调接口?

可以参考推送订阅回调

publicSubscribeRespcallBackUrl(HttpServletRequestrequest){Stringparam=request.getParameter("param");Stringsign=request.getParameter("sign");//建议记录一下这个回调的内容,方便出问题后双方排查问题log.debug("快递100订阅推送回调结果|{}|{}",param,sign);//订阅时传的salt,没有可以忽略Stringsalt="";StringourSign=SignUtils.sign(param+salt);SubscribeRespsubscribeResp=newSubscribeResp();subscribeResp.setResult(Boolean.TRUE);subscribeResp.setReturnCode("200");subscribeResp.setMessage("成功");//加密如果相等,属于快递100推送;否则可以忽略掉当前请求if(ourSign.equals(sign)){//TODO业务处理returnsubscribeResp;}returnnull;}


问题3.使用电子面单图片接口,该如何处理返回的base64图片?


返回的是一个字符串json数组,多个子单时会有多个。

添加前缀“data:image/png;base64,”,把“\\\\n”替换成“”;可以参考处理返回的base64字符串

publicList<String>getBase64Img(StringimgBase64){List<String>stringList=newGson().fromJson(imgBase64,newTypeToken<List<String>>(){}.getType());List<String>base64Img=newArrayList<String>();if(stringList!=null&&stringList.size()>0){for(Strings:stringList){s="data:image/png;base64,"+s.replace("\\\\n","");base64Img.add(s);}}returnbase64Img;}


问题4.云平台其他接口该如何对接?


第一步:根据对应接口新增对应的请求参数类,继承CloudBaseReq,类似快递寄件接口取消寄件请求参数类

publicclassCOrderCancelReqextendsCloudBaseReq{/***任务ID*/privateStringtaskId;/***订单ID*/privateStringorderId;/***取消原因,例:暂时不寄件了*/privateStringcancelMsg;}

第二步:调用时只需要更换成第一步新建的实体

publicvoidtestCOrderCancel()throwsException{COrderCancelReqcOrderCancelReq=newCOrderCancelReq();cOrderCancelReq.setTaskId("B19BB4C6F33BE9E735A63D4142557751");cOrderCancelReq.setOrderId("11115207");cOrderCancelReq.setCancelMsg("测试单");cOrderCancelReq.setSecret_key(secret_key);cOrderCancelReq.setSecret_code(CloudApiCodeConstant.ORDER_CANCEL);cOrderCancelReq.setSecret_sign(SignUtils.cloudSign(secret_key,secret_secret));IBaseClientcloudBase=newCloudBase();System.out.println(cloudBase.execute(cOrderCancelReq));}

tips:key、secret、code等账号信息获取,云平台->买家中心-我的接口

v2-d8f59f4c1869366c03fa1978d5300f66_r.jpg



更多相关文章

  1. 一键批量查询快递物流信息的软件有哪种
  2. 【PHP 面向对象】面向对象(OOP)编程知识点归纳总结(二)
  3. PHP:oop->抽象类/接口/后期静态绑定/单例模式连接数据库 Db类中
  4. php之单例模式连接数据库
  5. SpringBoot 项目配置 Swagger 接口api 搭建 REST
  6. 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
  7. 给你一个理由学习Linux,树莓派4免费送
  8. 以接口为主导的设计中, 我在使用的框架模式
  9. UI 自动化测试在有赞的实践

随机推荐

  1. 已开启GTID的情况下的binlog复制切换到GT
  2. 在代码点火器中从mysql迁移到postgresql
  3. MySql 修改列的注释信息的方法
  4. MySQL客户端输出窗口显示中文乱码问题解
  5. 通过php mysql更新表
  6. MySQL(Navicat)运行.sql文件时报错:[Err]
  7. 数据库中的结果分页如何工作?
  8. 两个MYSQL表关联查询
  9. mysql 先排序后分组再排序查询数据
  10. MySql查询随机几条数据