基于java快递公司电子面单打印接口文档
申请快递公司电子面单打印接口,在正式环境下,在官网申请客户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快递公司电子面单打印接口文档相关推荐
- 快递鸟电子面单打印接口demo-可返回电子面单模板
接口支持的消息接收方式:HTTPPOST 请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8" 请求 ...
- python全国快递查询接口和电子面单打印接口,一次接入全国快递公司
快递100python快递查询接口-一次性接入顺丰.京东.申通.圆通.韵达.中通.天天.百世.邮政.EMS等主流快递公司,只需要复制源码,并将部分参数修改为您的账户参数即可. 此python接口dem ...
- 电商快递物流的电子面单打印接口API案例代码
一.电子面单打印接口 通过快递公司或网点.菜鸟与淘宝提供的电子面单账号,调用打印设备打印输出.打印接口连接的设备必须是快递100云打印机或者快递100云盒.云盒可以支持不同品牌的打印机,点击查询具体支 ...
- 顺丰丰桥电子面单打印接口,适用于第三方系统对接
顺丰丰桥电子面单打印接口 语言Java 作者:不停留的风 1.查询出需要打单的数据,进行循环执行打单 编辑TestCallWaybillPrinter33 Fy_OrderDao fod=new Fy ...
- 基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA合同管理计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...
- 基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计知识库系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- 基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA疗养院管理计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...
- 快递鸟电子面单打印功能基于java
之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...
- 快递鸟基于java功能打印电子面单api接口
之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...
- Show-Doc让你能在公司装一波的接口文档搭建全流程
大家还记得之前阿粉给大家推荐的一个写接口文档的神器么?Run-API,前段时间,因为 Show-Doc 进行网站升级,忽然的一天早上 Run-API 失效了,这下整的阿粉就有崩溃了,啥情况,和阿粉对接 ...
最新文章
- 微软肿么了?版本更新大提速。Visual Studio 2012再次更新
- 找出不超过40亿个给定整数的整数
- 对volatile的理解
- Java 8 Friday Goodies:精益并发
- xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
- 面试中的智力题及编程实践(二)
- 2021-08-10 idea 事务的操作
- idea 新建ssm java ee_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
- 数字通信第六章——信道模型和信道容量
- 中e管家投资理财需了解的基础知识
- 2021面试题——微信小程序面试题
- OJ1088: 手机短号 (多实例)(C语言)
- Vue3定义全局变量/方法
- mac node如何升级版本
- 计算机毕业设计选题\开题\项目\论文\答辩一套玩转毕业设计
- 离散题目13(判断自反关系)
- Python之写一个函数用于字符串替换
- 2021机械高考caxa技能考试成绩查询,技能查成绩
- python画地图经纬度_【python】使用python按照一定格式批量输出,地图热力图经纬度格式生成器...
- 如何将电梯门禁卡复制到手机/手环上