申请快递公司电子面单打印接口,在正式环境下,在官网申请客户id后。在快递后台即可进行如下的批量打印。

使用快递公司电子面单打印接口功能前,要把接口代码集成到自己内部系统理,在官网下载接口demo安装到本地电脑,可提供多demo版本快递公司电子面单demo下载http://www.kdniao.com/api-eorder

安装好后,跑起来挺容易,直接放入tomcat运行就可以了;

不过demo需要tomcat8.5,需要修改的话找到项目的.settings文件夹下有一个

org.eclipse.wst.common.project.facet.core.xml 将tomcat8.5修改为对应的版本就可以了。

官方demo代码:

package cc.kdniao.api;import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.sun.xml.internal.messaging.saaj.util.Base64;/*** Servlet implementation class printOrder*/
@WebServlet("/printOrder")
public class printOrder extends HttpServlet {private static final long serialVersionUID = 1L;final String EBussinessID = "";//kdniao.com EBusinessIDfinal String AppKey = ""; //kdniao.com AppKeyfinal Integer IsPreview = 0; //是否预览 0-不预览 1-预览/*** @see HttpServlet#HttpServlet()*/public printOrder() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//response.getWriter().append("Served at: ").append(request.getContextPath());PrintWriter print = response.getWriter();String jsonResult = "";try {String ip = getIpAddress(request);jsonResult = getPrintParam(ip);} catch (Exception e) {//write log}print.println(jsonResult);print.flush();print.close();}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, UnsupportedEncodingException {// TODO Auto-generated method stubresponse.setContentType("");PrintWriter print = response.getWriter();String jsonResult = "";try {String ip = getIpAddress(request);jsonResult = getPrintParam(ip);} catch (Exception e) {//wirte log}print.println(jsonResult);print.flush();print.close();}/*** get print order param to json string* @return* * @throws Exception */private String getPrintParam(String ip) throws Exception {String data = "[{\"OrderCode\":\"234351215333113311353\",\"PortName\":\"SF\"},{\"OrderCode\":\"234351215333113311354\",\"PortName\":\"打印机名称二\"}]";String result = "{\"RequestData\": \"" + URLEncoder.encode(data, "UTF-8") + "\", \"EBusinessID\":\"" + EBussinessID + "\", \"DataSign\":\"" + encrpy(ip + data, AppKey) + "\", \"IsPreview\":\""+ IsPreview + "\"}";return result;}private 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();}private String encrpy(String content, String key) throws UnsupportedEncodingException, Exception {String charset = "UTF-8";return new String(Base64.encode(md5(content + key, charset).getBytes(charset)));}/** * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址; *  * @param request * @return * @throws IOException */public final static String getIpAddress(HttpServletRequest request) throws IOException {// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址  String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} else if (ip.length() > 15) {String[] ips = ip.split(",");for (int index = 0; index < ips.length; index++) {String strIp = (String) ips[index];if (!("unknown".equalsIgnoreCase(strIp))) {ip = strIp;break;}}}return ip;}}

但是,需要注意的是,API有一个ip参数,获取这个快递PI提供的方法是如下

// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址  public final static String getIpAddress(HttpServletRequest request) throws IOException {String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} else if (ip.length() > 15) {String[] ips = ip.split(",");for (int index = 0; index < ips.length; index++) {String strIp = (String) ips[index];if (!("unknown".equalsIgnoreCase(strIp))) {ip = strIp;break;}}}return ip;}

注意这个方法是没有问题的,但是你如果直接输入快递单号OrderCode进行打印,这个时候提交总是说数据验证不通过,并不是签名问题,而是ip问题。

因为上一个方法只要是在局域网下面,即使能访问外网,也没用,获取到的ip永远都是内网ip

有一种方式可以在本地验证通过,那就是直接百度ip,只有会有自己的ip地址

在后台将ip写死,就可以进行打印预览操作了。

快递公司电子面单打印需要安装lodop打印插件,安装完成之后访问 http://www.kdniao.com/reg?from=CSDN会有相应的js控件;需要对应的打印插件,必须要有设备(热敏打印机),之后根据打印机型号,进入对应的官网下载打印驱动。之后perfect,就可以进行打印了。

官方demo给的是servlet

例如使用的是SpringMVC,代码如下:

final String EBussinessID = "12677**";//kdniao.com EBusinessIDfinal String AppKey = "8e9dcb4b-f0a1-42f6-9d80-372a67f851**"; //kdniao.com AppKeyfinal Integer IsPreview = 1; //是否预览 0-不预览 1-预览@RequestMapping("/getCloudPrintData.do")@ResponseBodypublic Map<String, Object> getCloudPrintData(HttpServletRequest request,String OrderCode,String ip) throws Exception{System.out.println("ok:"+OrderCode+"---"+ip);Map<String,Object> map = new HashMap<String, Object>();List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();Map<String,Object> dataMap = new HashMap<String, Object>();dataMap.put("OrderCode", OrderCode);dataMap.put("PortName", "Xprinter XP-DT108A LABEL");list.add(dataMap);String jsonString = JSONArray.fromObject(dataMap).toString();        map.put("RequestData", URLEncoder.encode(jsonString, "UTF-8"));if(StringUtils.isEmpty(ip)) {ip = getIpAddress(request);}map.put("DataSign",encrpy(ip + jsonString, AppKey));System.out.println("map:"+map);return map;}@RequestMapping("/getIpAddressByJava.do")@ResponseBodypublic String getIpAddressByJava(HttpServletRequest request) throws IOException {return getIpAddress(request);}private String encrpy(String content, String key) throws UnsupportedEncodingException, Exception {String charset = "UTF-8";return new String(Base64.encode(md5(content + key, charset).getBytes(charset)));}private 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();}// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址  public final static String getIpAddress(HttpServletRequest request) throws IOException {String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} else if (ip.length() > 15) {String[] ips = ip.split(",");for (int index = 0; index < ips.length; index++) {String strIp = (String) ips[index];if (!("unknown".equalsIgnoreCase(strIp))) {ip = strIp;break;}}}return ip;}

对应的html

<body>
<script type="text/javascript">function fasong(){var orderNo = $("#orderNo").val();var ipAddress = $("#ipAddress").val();$.ajax({url:'/jeeadmin/jeecms/getCloudPrintData.do',data:{OrderCode:orderNo,ip:ipAddress},success:function(data){$("#RequestData").val(data.RequestData)$("#DataSign").val(data.DataSign)}})}function getIp(){$.ajax({url:'/jeeadmin/jeecms/getIpAddressByJava.do',success:function(data){alert(data);}})}
</script>
<h1>测试打印页面</h1><div id="head"></div><div><input type="text" id="orderNo"><input type="text" id="ipAddress"><input type="button" οnclick="fasong()" value="发送" /></div><div><input type="button" οnclick="getIp()" value="获取ip地址通过java"/></div><form id="form1" action="http://www.kdniao.com/External/PrintOrder.aspx" method="post" target="_self"><div style=""><div><input type="text" id="RequestData" name="RequestData" readonly="readonly"/>请求数据</div><div><input type="text" id="DataSign" name="DataSign" readonly="readonly"/>签名</div><div><input type="text" id="EBusinessID" name="EBusinessID" value="1267739"/>商户id</div><div><input type="text" id="IsPreview" name="IsPreview" value="1"/><span style="color: red;">是否预览 0-不预览 1-预览</span></div><div><input type="submit" id="tijiao" value="打印" /></div></div></form>
</body>

基于java快递公司电子面单打印接口文档相关推荐

  1. 快递鸟电子面单打印接口demo-可返回电子面单模板

    接口支持的消息接收方式:HTTPPOST 请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8" 请求 ...

  2. python全国快递查询接口和电子面单打印接口,一次接入全国快递公司

    快递100python快递查询接口-一次性接入顺丰.京东.申通.圆通.韵达.中通.天天.百世.邮政.EMS等主流快递公司,只需要复制源码,并将部分参数修改为您的账户参数即可. 此python接口dem ...

  3. 电商快递物流的电子面单打印接口API案例代码

    一.电子面单打印接口 通过快递公司或网点.菜鸟与淘宝提供的电子面单账号,调用打印设备打印输出.打印接口连接的设备必须是快递100云打印机或者快递100云盒.云盒可以支持不同品牌的打印机,点击查询具体支 ...

  4. 顺丰丰桥电子面单打印接口,适用于第三方系统对接

    顺丰丰桥电子面单打印接口 语言Java 作者:不停留的风 1.查询出需要打单的数据,进行循环执行打单 编辑TestCallWaybillPrinter33 Fy_OrderDao fod=new Fy ...

  5. 基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  6. 基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  7. 基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  8. 快递鸟电子面单打印功能基于java

    之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...

  9. 快递鸟基于java功能打印电子面单api接口

    之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...

  10. Show-Doc让你能在公司装一波的接口文档搭建全流程

    大家还记得之前阿粉给大家推荐的一个写接口文档的神器么?Run-API,前段时间,因为 Show-Doc 进行网站升级,忽然的一天早上 Run-API 失效了,这下整的阿粉就有崩溃了,啥情况,和阿粉对接 ...

最新文章

  1. 微软肿么了?版本更新大提速。Visual Studio 2012再次更新
  2. 找出不超过40亿个给定整数的整数
  3. 对volatile的理解
  4. Java 8 Friday Goodies:精益并发
  5. xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
  6. 面试中的智力题及编程实践(二)
  7. 2021-08-10 idea 事务的操作
  8. idea 新建ssm java ee_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
  9. 数字通信第六章——信道模型和信道容量
  10. 中e管家投资理财需了解的基础知识
  11. 2021面试题——微信小程序面试题
  12. OJ1088: 手机短号 (多实例)(C语言)
  13. Vue3定义全局变量/方法
  14. mac node如何升级版本
  15. 计算机毕业设计选题\开题\项目\论文\答辩一套玩转毕业设计
  16. 离散题目13(判断自反关系)
  17. Python之写一个函数用于字符串替换
  18. 2021机械高考caxa技能考试成绩查询,技能查成绩
  19. python画地图经纬度_【python】使用python按照一定格式批量输出,地图热力图经纬度格式生成器...
  20. 如何将电梯门禁卡复制到手机/手环上

热门文章

  1. android wifi 抓sniffer log
  2. use mysql命令_mysql命令-use
  3. pdf 分形 张济忠_分形
  4. 备考系统集成项目管理工程师,其实很简单!(干货)
  5. 加密解密之 crypto-js 知识
  6. HTML网易云音乐首页动画,仿网易云音乐广告页的转场动画
  7. Opencv配置环境变量
  8. python调用v8_Python 安装 V8 引擎 – pyv8
  9. Echarts实现双y轴(不同刻度)
  10. 【机器学习】(七)马尔可夫链、马尔可夫随机场、条件随机场