1 对接说明
(1)、目前接口支持了:顺丰(SF)、EMS(EMS)、宅急送(ZJS)、圆通(YTO)、百世快递(HTKY)、中通(ZTO)、韵达(YD)、申通(STO)、德邦(DBL)、优速(UC)、京东(JD)、信丰(XFEX)、全峰(QFKD)、跨越速运(KYSY)、安能小包(ANE)、快捷快递(FAST)、国通(GTO)、天天快递(HHTT)、邮政快递包裹(YZPY)。

散户模式(无需电子面单客户号)支持快递公司:顺丰(SF)、EMS(EMS)(仅支持广东省内发货)、快捷快递(FAST)、宅急送(ZJS)、邮政快递包裹(YZPY)。
(2)、请求报文中不允许出现以下特殊字符: ’ " # & + < >
(3)、接口使用:申请快递鸟接口API

2 API demo
2.1 JAVA

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest; public class KdGoldAPIDemo {//电商IDprivate String EBusinessID=" ";    //电商加密私钥,注意保管,不要泄漏private String AppKey=" ";   //请求url, 正式环境地址:http://api.kdniao.cc/api/Eorderservice    测试环境地址:http://testapi.kdniao.cc:8081/api/EOrderServiceprivate String ReqURL="http://testapi.kdniao.cc:8081/api/Eorderservice";   /*** Json方式 电子面单* @throws Exception */public String orderOnlineByJson() throws Exception{String requestData= "{'OrderCode': '012657700387'," +"'ShipperCode':'SF'," +"'PayType':1," +"'ExpType':1," +"'Cost':1.0," +"'OtherCost':1.0," +"'Sender':" +"{" +"'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +"'Receiver':" +"{" +"'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +"'Commodity':" +"[{" +"'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," +"'Weight':1.0," +"'Quantity':1," +"'Volume':0.0," +"'Remark':'小心轻放'," +"'IsReturnPrintTemplate':1}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "1007");String dataSign=encrypt(requestData, AppKey, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result=sendPost(ReqURL, params);    //根据公司业务处理返回的信息......return result;}/*** MD5加密* @param str 内容       * @param charset 编码方式* @throws Exception */@SuppressWarnings("unused")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();}/*** base64编码* @param str 内容       * @param charset 编码方式* @throws UnsupportedEncodingException */private String base64(String str, String charset) throws UnsupportedEncodingException{String encoded = Base64.encode(str.getBytes(charset));return encoded;    }  @SuppressWarnings("unused")private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{String result = URLEncoder.encode(str, charset);return result;}/*** 电商Sign签名生成* @param content 内容   * @param keyValue Appkey  * @param charset 编码方式* @throws UnsupportedEncodingException ,Exception* @return DataSign签名*/@SuppressWarnings("unused")private 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);}/*** 向指定 URL 发送POST方法的请求     * @param url 发送请求的 URL    * @param params 请求的参数集合     * @return 远程资源的响应结果*/@SuppressWarnings("unused")private String sendPost(String url, Map<String, String> params) {OutputStreamWriter out = null;BufferedReader in = null;        StringBuilder result = new StringBuilder(); try {URL realUrl = new URL(url);HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// POST方法conn.setRequestMethod("POST");// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.connect();// 获取URLConnection对象对应的输出流out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");// 发送请求参数            if (params != null) {StringBuilder param = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) {if(param.length()>0){param.append("&");}                 param.append(entry.getKey());param.append("=");param.append(entry.getValue());                   System.out.println(entry.getKey()+":"+entry.getValue());}System.out.println("param:"+param.toString());out.write(param.toString());}// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}} catch (Exception e) {            e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result.toString();}
}

2.2 C#对接

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;namespace Test
{public class KdApiEOrderDemo{//电商IDprivate string EBusinessID = "请申请http://kdniao.com/reg";//电商加密私钥,注意保管,不要泄漏private string AppKey = "请申请";//请求url//正式环境地址// private string ReqURL = "http://api.kdniao.cc/api/Eorderservice";//测试环境地址private string ReqURL = "http://testapi.kdniao.cc:8081/api/EOrderService";/// <summary>/// Json方式  电子面单/// </summary>/// <returns></returns>public string orderTracesSubByJson(){string requestData = "{'OrderCode': '012657700222'," +"'ShipperCode':'SF'," +"'PayType':1," +"'ExpType':1," +"'Cost':1.0," +"'OtherCost':1.0," +"'Sender':" +"{" +"'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +"'Receiver':" +"{" +"'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +"'Commodity':" +"[{" +"'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," +"'Weight':1.0," +"'Quantity':1," +"'Volume':0.0," +"'Remark':'小心轻放'," +"'IsReturnPrintTemplate':1}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "1007");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, param);//根据公司业务处理返回的信息......return result;}/// <summary>/// Post方式提交数据,返回网页的源代码/// </summary>/// <param name="url">发送请求的 URL</param>/// <param name="param">请求的参数集合</param>/// <returns>远程资源的响应结果</returns>private string sendPost(string url, Dictionary<string, string> param){string result = "";StringBuilder postData = new StringBuilder();if (param != null && param.Count > 0){foreach (var p in param){if (postData.Length > 0){postData.Append("&");}postData.Append(p.Key);postData.Append("=");postData.Append(p.Value);}}byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.ContentType = "application/x-www-form-urlencoded";request.Referer = url;request.Accept = "*/*";request.Timeout = 30 * 1000;request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";request.Method = "POST";request.ContentLength = byteData.Length;Stream stream = request.GetRequestStream();stream.Write(byteData, 0, byteData.Length);stream.Flush();stream.Close();HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream backStream = response.GetResponseStream();StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));result = sr.ReadToEnd();sr.Close();backStream.Close();response.Close();request.Abort();}catch (Exception ex){result = ex.Message;}return result;}private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors){throw new NotImplementedException();}///<summary>///电商Sign签名///</summary>///<param name="content">内容</param>///<param name="keyValue">Appkey</param>///<param name="charset">URL编码 </param>///<returns>DataSign签名</returns>private string encrypt(String content, String keyValue, String charset){if (keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}///<summary>/// 字符串MD5加密///</summary>///<param name="str">要加密的字符串</param>///<param name="charset">编码方式</param>///<returns>密文</returns>private string MD5(string str, string charset){byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);try{System.Security.Cryptography.MD5CryptoServiceProvider check;check = new System.Security.Cryptography.MD5CryptoServiceProvider();byte[] somme = check.ComputeHash(buffer);string ret = "";foreach (byte a in somme){if (a < 16)ret += "0" + a.ToString("X");elseret += a.ToString("X");}return ret.ToLower();}catch{throw;}}/// <summary>/// base64编码/// </summary>/// <param name="str">内容</param>/// <param name="charset">编码方式</param>/// <returns></returns>private string base64(String str, String charset){return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}}
}

2.3 JAVA批量打印

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;}}

2.4 .NET批量打印

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace KdniaoWebsite.WebUI.External
{public partial class PrintExample : System.Web.UI.Page{//电商IDprivate string ID = "ID";//电商加密私钥,注意保管,不要泄漏private string AppKey = "需登录账号查询";protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){//OrderCode:客户需要打印的订单号,和调用快递鸟电子面单的订单号一致,PortName:本地打印机名称var requestData = "[{\"OrderCode\":\"234351215333113311353\",\"PortName\":\"SF\"},{\"OrderCode\":\"234351215333113311354\",\"PortName\":\"打印机名称二\"}]";RequestData.Value = HttpUtility.UrlEncode(requestData, Encoding.UTF8);EBusinessID.Value = ID;DataSign.Value = Encrypt(GetIp() + requestData, AppKey, "UTF-8");//是否预览,0-不预览 1-预览IsPreview.Value = "0";}}private string Encrypt(String content, String keyValue, String charset){if (keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}///<summary>/// 字符串MD5加密///</summary>///<param name="str">要加密的字符串</param>///<param name="charset">编码方式</param>///<returns>密文</returns>private string MD5(string str, string charset){byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);try{System.Security.Cryptography.MD5CryptoServiceProvider check;check = new System.Security.Cryptography.MD5CryptoServiceProvider();byte[] somme = check.ComputeHash(buffer);string ret = "";foreach (byte a in somme){if (a < 16)ret += "0" + a.ToString("X");elseret += a.ToString("X");}return ret.ToLower();}catch{throw;}}/// <summary>/// base64编码/// </summary>/// <param name="str">内容</param>/// <param name="charset">编码方式</param>/// <returns></returns>private string base64(String str, String charset){return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}private static string GetIp(){if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ',' })[0];elsereturn System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];}}
}

接口备注:
(1)、只支持Json格式。接口指令1007。
(2)、订单编号(OrderCode)不可重复提交,重复提交系统会返回具体错误代码。
(3)、测试地址:http://testapi.kdniao.cc:8081/api/eorderservice/
(4)、正式地址:http://api.kdniao.cc/api/EOrderService

电子面单批量打印接口demo相关推荐

  1. 快递电子面单批量打印接口对接demo-JAVA

    目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打印电子面 ...

  2. 快递鸟电子面单批量打印接口用java怎么对接对接

    目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打印电子面 ...

  3. 如何用C#实现电子面单批量打印功能

    电子面单的使用,改变了传统物流操作模式,订单填写更加规范,有效降低贴单错误率.同时便捷打单,不仅提升了客户体验,而且实现网点工作效率提高. 公司普及应用电子面单,可以有效降低成本.提升分拣效率等,更大 ...

  4. 拼多多电子面单云打印接口对接 (跨境erp应用,电子面单应用)[拼多多获取电子面单,拼多多面单打印]

    一.简介 使用拼多多开放平台提供的拼多多电子面单功能. 拼多多开放平台提供的这两个应用的区别: 1.在于业务权限方面,跨境erp权限很多具体可以在开放平台看到,其中就包括了获取电子面单,而电子面单应用 ...

  5. 快递鸟电⼦⾯单批量打印流程与注意事项

    快递鸟作为全球最⼤的第三⽅物流接⼝服务商,电⼦⾯单可⼀次性对接40家主流快递快运公司接⼝,免费试用,调⽤接⼝时快递鸟会向物流公司请求单号,并实时返回,可直接打印电⼦⾯单发货. 一.支持快递快运公司编码 ...

  6. 电子面单云打印方案(PHP示例)

    物流快递.电商.ERP.仓储等都涉及发货业务都需要用到电子面单打印,市面上有各种各样的电子面单打印机,电子面单打印软件,电子面单打印工具满足了打印需求,但未能很好的满足移动端打印.这里介绍一个手机端电 ...

  7. php批量打印快递单,excel怎么利用vba实现批量套打快递单批量打印单据?

    excel vba 批量套打快递单,批量打印单据,可以自定义修改设置新的格式. 快递套打模板2015:点击下载 1.设置快递单的自定义纸张.选择对应打印机-点击打印服务器属性-勾选创建新表单-输入表单 ...

  8. zto中通电子面单cpcl打印指令实例

    zto中通电子面单cpcl打印指令实例 打印效果 cpcl指令 打印效果 cpcl指令 ! 0 200 200 130 1 IN-MILLIMETERS PW 76 L 0 13 76 13 0.3 ...

  9. 快递面单批量打印教程

    快递面单批量打印,有什么妙招?这对某些公司,或者是公司的某些部门来说,至关重要. 比如说二三级电商平台,或者是小微电商,没有一级电商平台的快递网络,只能自己整理订单寄件,那就非常需要进行快递面单批量打 ...

最新文章

  1. “看墙之外” ——遮挡下的人体姿态估计
  2. 一入爬虫深似海,反爬技术你知多少?
  3. 数据库的语言——SQL
  4. [译]BitTorrent协议规范
  5. git常见命令 的区分
  6. JavaScript面向对象编程指南(五) 原型
  7. 近业务=困死在一条船上?
  8. linux 信号signal和sigaction理解
  9. 数据库基础 数据库设计三大范式
  10. Pytorch:variable中grad属性和backward函数grad_variables参数的含义
  11. 奇安信代码安全实验室研究员入选“2021微软 MSRC 最具价值安全研究者”榜单
  12. spring定时任务执行两次的原因与解决方法
  13. 免费python课程排行榜-Python基础练习(一)中国大学定向排名爬取
  14. AutoDesk EAGLE 9.6.2 Free版 在win10下闪退的解决方法
  15. 【Pix4d精品教程】Pix4d模型成果导出OSGB并加载OSGB到EPS进行三维测图完美案例教程
  16. oracle财务系统名称,Oracle财务系统总账模块操作手册
  17. html 中各种鼠标手势
  18. 中国神话故事中的仙佛怪关系整理
  19. 纹理基础知识和过滤模式详解
  20. python输入一个字符串、计算其中小写字符的个数_利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量,并输出(c/c++实现)...

热门文章

  1. 海底捞张勇:海底捞的核心竞争力是什么?人力资源体系
  2. Miracast开发4——-应用层rtsp协议
  3. 主板有电无法启动_主板通电但启动不了是什么原因
  4. FutureCompletableFuture
  5. 【物理应用】内联全息图外推算法matlab代码
  6. 要点提炼|《数字中国建设整体布局规划》,看这一篇就够了!
  7. 好豆app直播功能需求分析报告
  8. 转铁蛋白修饰硬脂酸/棕榈酸 TF-PEG-C18 Stearic Acid/C16, palmitic acid
  9. 全球及中国反丁烯二酸行业销售动态及投资前景预测报告2022~2027年
  10. CAP帽子理论与BASE理论