API文档/云打印/打印电子面单
1.用API打印发货单、取件码、标签、小票单等
2.用API打印快递单
要初步测试,告知下我们客服要开始测试,
调用API成功打印后,会把您提交打印的效果拍照给您看。
初步测试一定会用到的一些参数(供测试对接看效果用):
用户ID
app_id=”108344”;
应用密钥
api_key=”86c7ea9521d3b525be539b0bda4c8f6f2e07cf3c“;
目标云打印机的访问密钥
agent_id=”48399299757042546”;
该供测试的目标云打印机,默认绑定配置了圆通菜鸟电子面单,已经可以拉出我们提供的圆通电子面单单号源。
测试时,建议请求参数waybill_code,routing_info留空即可,
【因为是圆通测试单号】请设置请求参数cp_code=”yt”;
请求参数template_id=”666691”; 或template_id=”666696”; 或template_id=”666718”; 或参数template_id留空.【所有不是必填项的请求参数都可以留空,因为云打印机绑定圆通单号源了,所有routing_info也请留空即可】
应用场景
- 向云打印机发送电子面单打印任务,在云打印机上打印电子面单
2. 支持利用云打印机上配置的单号源、打印模板,自动获取电子面单号、三段码、设置打印模板,直接打印,无需预先获取单号,提高开发效率
3. 支持仅获取电子面单号,不打印。将print_type参数置为1,将waybill_code参数留空即可。该功能可替代获取电子面单号接口
4. 支持仅生成电子面单底单文件(jpg或pdf格式),不打印,print_type传1或7即可
5. 支持电子面单自定义区域使用自己编辑的模板,模板需要预先在”标签打王“微信小程序中编辑
回调重试机制:回调请求失败或者对方没有返回正确的格式,将会重试,最多重试三次。如果存在大量回调返回为非约定内容(成功返回:success,失败返回:failure), 将停止帐号的打印状态回调通知接口名称
cloud.print.waybill公共参数
请求地址
| 环境名称 | HTTPS请求地址 | | —- | —- | | 正式地址 | https://kop.kuaidihelp.com/api |
公共请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
method | string | 是 | API接口名称cloud.print.waybill |
app_id | string | 是 | 用户ID,如108344(给初步测试用的ID) |
api_key | string | 应用密钥,如86c7ea9521d3b525be539b0bda4c8f6f2e07cf3c (给测试用的api_key) |
|
sign | string | 是 | 按照规则(md5(app_id + method + ts + api_key))生成的合法性验证签名(32位字符串,字母小写)如:10000cloud.print.do1524209949bdf3b5f50865ac813cbdfd6c9b572b79加密后5030cae3388ecdc2e686379753a0564c |
ts | string | 是 | 当前请求的时间戳(10位或13位) |
data | string | 是 | JSON格式请求参数 |
公共响应参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
code | int | 是 | 响应状态码。0-成功,非0-失败下载并查看详情 |
msg | string | 是 | 返回结果说明 |
uid | string | 是 | 本次请求唯一业务流水号 |
data | string | 是 | JSON格式响应数据 |
请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
agent_id | string | 是 | 目标云打印机的访问密钥,如6949690060994106(给初步测试的云打印机密钥)。使用目标云打印机,需要其管理员允许。 |
print_type | int | 否 | 打印类型,1:仅生成底单,jpg格式; 2:仅打印; 3:打印并生成jpg格式底单; 7:仅生成底单,pdf格式;默认为3 |
private | int | 否 | 是否隐藏收发件人联系电话 1 面单上隐藏 2 底单图片上隐藏 3 面单和底单图片都隐藏;若都不隐藏,不传值即可; |
template_id | string | 否 | 打印模板ID(点此查看系统支持的所有模板);如果为空,则以云打印机上设置的模板为准,可到“微快递小邮筒”公众号的“管理”->“云打印机设置”中设置默认的模板 |
custom_tpl_id | string | 否 | 自定义区域模板id,该id从微信小程序【标签打王】获取。当template_id指定的模板支持自定义区域时才有效 |
user_name | string | 否 | 打印人名称 |
请求参数cp_code值列表:
快递公司 标识符
韵达快递 yd
申通快递 sto
圆通快递 yt
中通快递 zt
极兔快递 jt
百世快递 ht
邮政小包 postx
EMS包裹 ems
邮政包裹 post
天天快递 tt
百世快运 best
优速快递 ys
德邦 dp
宅急送 zjs
京东 jd
中通快运 ztky
顺丰速运 sf
国通快递 gt
顺丰快运 sfky
响应参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
<第一条任务的tid> | object | 是 | 第一条任务的打印结果 |
<第二条任务的tid> | object | 否 | 第二条任务的打印结果,结构同上;若本次请求有更多任务,后面依次列出 |
响应参数tid的详情:
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
status | string | 是 | 处理状态,success为成功,其他为失败 |
---|---|---|---|
task_id | string | 是 | 本次打印任务编号,在查询打印任务状态时需要 |
task_info | array | 否 | 此次打印任务详情,只有通过云打印机上配置的单号源获取单号成功后,才返回此字段 |
tid | string | 是 | 任务ID,为打印任务中输入的值 |
waybill_code | string | 是 | 申请到的运单号 |
template_id | string | 是 | 本次所用的打印模板ID |
routing_info | object | 是 | 本单号的路由、分拣信息(品牌为非顺丰) |
consolidation | object | 是 | 本单号的集包地信息 |
name | string | 是 | 集包地名称 |
code | string | 否 | 集包地代码 |
route_code | string | 是 | 本单号的二三段码 |
sortation | object | 是 | 本单号的大字与一段码 |
name | string | 是 | 大字与一段码 |
routing_info | object | 否 | 本单号的路由、分拣信息(品牌为顺丰) |
abFlag | string | 否 | AB标 |
cargoTypeCode | string | 否 | 快件内容: 如:C816、SP601 |
codingMapping | string | 否 | 入港映射码 eg:S10 |
codingMappingOut | string | 否 | 出港映射码 |
deliveryMode | int | 否 | 派送方式: 1. 派送 2.自提 (不传默认为1) |
destCityCode | string | 否 | 目的地城市代码,eg:755 |
destDeptCode | string | 否 | 目的地网点代码,eg:755AQ |
destDeptCodeMapping | string | 否 | 目的地网点代码映射码 |
destRouteLabel | string | 否 | 打单时的路由标签信息 |
destTeamCode | string | 否 | 目的地单元区域,eg:001 |
destTeamCodeMapping | string | 否 | 目的地单元区域映射码 |
destTransferCode | string | 否 | 目的地中转场 |
errMsg | string | 否 | 查询出现异常时返回信息。 返回代码: 0 系统异常 1 未找到运单 |
expressTypeCode | string | 否 | 产品类型,如:B1 |
fopIcon | string | 否 | 快运标签:目前有两位,第一位备用。第二位:送装标识(0:不打印;1:送装分离icon;2:送装一体icon) |
goodsNumber | string | 否 | 件数 |
limitTypeCode | string | 否 | 时效代码, 如:T4 |
printFlag | string | 否 | 打印标志 返回值总共有 9 位,每一位只有 0和 1 两种, 0 表示按顺丰运单默认的规则,1 表示显示 |
printIcon | string | 否 | 打印图标 根据托寄物判断需要打印的图标 (重货,蟹类,生鲜,易碎,Z 标)返回值有 8 位,每一位只有 0 和 1两种,0 表示按运单默认的规则,1 表示显示。后面两位默认 0 备用。 顺序如下:重货,蟹类,生鲜,易碎, 医药类,Z 标,0,0 如:00000000 表示不需要打印重货,蟹类,生鲜,易碎,医药,Z 标,备用,备用 |
proName | string | 否 | 产品名称 对应RLS:pro_name |
routeArray | string | 否 | 路由数组,示例:”755G:D3,769BG:A2,020BF:C2,021BG:AF,010FG:D2” |
sourceCityCode | string | 否 | 原寄地城市代码 |
sourceDeptCode | string | 否 | 原寄地网点代码 |
sourceTeamCode | string | 否 | 原寄地单元区域 |
sourceTransferCode | string | 否 | 原寄地中转场 |
twoDimensionCode | string | 是 | 二维码 |
preview_image | string | 否 | 底单文件URL,仅当有底单文件(jpg或pdf格式)生成时才返回 |
回调参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
id | string | 是 | 请求参数中的tid,后续信息为本条tid所对应的信息 |
task_id | string | 是 | 响应参数中的task_id,系统分配的任务编号 |
status | string | 是 | 打印任务状态,为打印成功、打印失败、底单成功、底单失败等 |
message | string | 是 | 打印任务状态描述 |
preview_image | string | 否 | 底单文件URL,仅在有底单文件生成时推送 |
print_at | int | 否 | 打印成功,会返回10位的时间戳;打印失败,返回null |
type | string | 是 | 回调通知类型,本接口固定为cloud_print |
请求示例
请求示例[Java,C#,Python,PHP,Node.js,Curl]
Java示例
import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.HashMap;
import java.util.Date;
public class Request {
public static void main(String[] args) {
String host = “http://kop.kuaidihelp.com“;
String path = “/api”;
String requestMethod = “POST”;
Map
//根据API的要求,定义相对应的Content-Type
headers.put(“Content-Type”, “application/x-www-form-urlencoded; charset=UTF-8”);
Map
Map
String appId = “50001”;
String method = “cloud.print.waybill”;
// 当前时间戳
String ts = new Date().getTime() + “”;
String appKey = “bdf3b5f50865ac813cbdfd6c9b572b79”;
// 计算签名
String signStr = appId + method + ts + appKey;
String sign = Request.getMD5(signStr, 32);
bodys.put(“app_id”, appId);
bodys.put(“method”, method);
bodys.put(“ts”, ts);
bodys.put(“sign”, sign);
// data参数是个json格式的字符串 建议使用函数或方法去生成
bodys.put(“data”, “{
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}”);
try {
/*
重要提示如下:
HttpUtils请从
https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
下载
相应的依赖请参照
https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
*/
HttpResponse response = HttpUtils.doPost(host, path, requestMethod, headers, querys, bodys);
System.out.println(response.toString());
//获取response的body
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
// 计算md5<br /> public static String getMD5(String plainText, int length) {<br /> try {<br /> MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例<br /> md.update(plainText.getBytes());//此处传入要加密的byte类型值<br /> byte[] digest = md.digest();//此处得到的是md5加密后的byte类型值
/*<br /> 下边的运算就是自己添加的一些二次小加密,记住这个千万不能弄错乱,<br /> 否则在解密的时候,你会发现值不对的(举例:在注册的时候加密方式是一种,<br /> 在我们登录的时候是不是还需要加密它的密码然后和数据库的进行比对,但是<br /> 最后我们发现,明明密码对啊,就是打不到预期效果,这时候你就要想一下,你是否<br /> 有改动前后的加密方式) <br /> */<br /> int i;<br /> StringBuilder sb = new StringBuilder();<br /> for (int offset = 0; offset < digest.length; offset++) {<br /> i = digest[offset];<br /> if (i < 0)<br /> i += 256;<br /> if (i < 16)<br /> sb.append(0);<br /> sb.append(Integer.toHexString(i));//通过Integer.toHexString方法把值变为16进制<br /> }<br /> return sb.toString().substring(0, length);//从下标0开始,length目的是截取多少长度的值<br /> } catch (NoSuchAlgorithmException e) {<br /> e.printStackTrace();<br /> return null;<br /> }<br /> }<br />}
C#请求示例
class Request { private const String host = “https://kop.kuaidihelp.com“;
private const String path = “/api”;
private const String requestMethod = “POST”;
static void Main(string[] args)
{
String querys = “”;
String appId = “50001”;
String method = “cloud.print.waybill”;
String ts = GetTimeStamp() + “”;
String appKey = “bdf3b5f50865ac813cbdfd6c9b572b79”;
// 计算签名
String signStr = appId + method + ts + appKey;
String sign = GetMd5(signStr, 32);
String bodys = “app_id=” + appId + “&method=” + method + “&ts=” + ts + “&sign=” + sign;
// data参数是个json格式字符串 建议使用函数或方法生成json字符串
bodys = bodys + “&data={
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}”;
String url = host + path;
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
if (0 < querys.Length)
{
url = url + “?” + querys;
}
if (host.Contains("https://"))<br /> {<br /> ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);<br /> httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));<br /> }<br /> else<br /> {<br /> httpRequest = (HttpWebRequest)WebRequest.Create(url);<br /> }<br /> httpRequest.Method = requestMethod;
//根据API的要求,定义相对应的Content-Type<br /> httpRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";<br /> if (0 < bodys.Length)<br /> {<br /> byte[] data = Encoding.UTF8.GetBytes(bodys);<br /> using (Stream stream = httpRequest.GetRequestStream())<br /> {<br /> stream.Write(data, 0, data.Length);<br /> }<br /> }<br /> try<br /> {<br /> httpResponse = (HttpWebResponse)httpRequest.GetResponse();<br /> }<br /> catch (WebException ex)<br /> {<br /> httpResponse = (HttpWebResponse)ex.Response;<br /> }
Console.WriteLine(httpResponse.StatusCode);<br /> Console.WriteLine(httpResponse.Method);<br /> Console.WriteLine(httpResponse.Headers);<br /> Stream st = httpResponse.GetResponseStream();<br /> StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));<br /> Console.WriteLine(reader.ReadToEnd());<br /> Console.WriteLine("\n");
}
// 计算md5值<br /> public static string GetMd5(string md5str, int type)<br /> {<br /> if (type == 16)<br /> {<br /> MD5 algorithm = MD5.Create();<br /> byte[] data = algorithm.ComputeHash(Encoding.UTF8.GetBytes(md5str));<br /> string sh1 = "";<br /> for (int i = 0; i < data.Length; i++)<br /> {<br /> sh1 += data[i].ToString("x2").ToUpperInvariant();<br /> }<br /> return sh1.Substring(8, 16).ToLower();<br /> }<br /> else if (type == 32)<br /> {<br /> MD5 algorithm = MD5.Create();<br /> byte[] data = algorithm.ComputeHash(Encoding.UTF8.GetBytes(md5str));<br /> string sh1 = "";<br /> for (int i = 0; i < data.Length; i++)<br /> {<br /> sh1 += data[i].ToString("x2").ToUpperInvariant();<br /> }<br /> return sh1.ToLower();<br /> }<br /> return "";<br /> }
// 获取当前时间戳<br /> public static string GetTimeStamp()<br /> {<br /> TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);<br /> return Convert.ToInt64(ts.TotalSeconds).ToString();<br /> }
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)<br /> {<br /> return true;<br /> }<br />}
Python请求示例
import http.client , urllib, hashlib
conn = http.client.HTTPSConnection(“kop.kuaidihelp.com”)
appId = ‘’’50001’’’
method = ‘’’cloud.print.waybill’’’;
ts = int(time.time());
appKey = ‘’’bdf3b5f50865ac813cbdfd6c9b572b79’’’
// 计算签名
signStr = appId + method + str(ts) + appKey;
sign = hashlib.md5(signStr.encode(‘utf8’)).hexdigest()
payload_list={}
payload_list[‘app_id’]=appId
payload_list[‘method’]=method
payload_list[‘ts’]=str(ts)
payload_list[‘sign’]=sign
payload_list[‘data’]=r’’’{
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}’’’
payload =urllib.parse.urlencode(payload_list)
headers = {
‘content-type’: “application/x-www-form-urlencoded”,
}
conn.request(“POST”, “/api”, payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode(“utf-8”))
PHP请求示例
$host = “https://kop.kuaidihelp.com/api”;$headers = array();
//根据API的要求,定义相对应的Content-Type
array_push($headers, “Content-Type”.”:”.”application/x-www-form-urlencoded; charset=UTF-8”);
$appId = ‘50001’;
$method = ‘cloud.print.waybill’;
$ts = time();
$appKey = ‘2e0a4e2fd8cf545b35e65f00184bcfa’;
$bodys = [
“app_id” => $appId,
“method” => $method,
“sign” => md5($appId . $method . $ts . $appKey),
“ts” => $ts,
“data” => ‘{
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}’
];
$bodys = http_build_query($bodys);
$url = $host;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, “POST”);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
if (1 == strpos(“$”.$host, “https://“))
{
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
var_dump(curl_exec($curl));
Node.js请求示例
var request = require(“request”);
var appId = ‘50001’;
var method = ‘cloud.print.waybill’;
var ts = Date.now();
var appKey = ‘bdf3b5f50865ac813cbdfd6c9b572b79’;
// 计算签名
var signStr = appId + method + ts + appKey;
var crypto = require(‘crypto’);
var h = crypto.createHash(‘md5’);
h.update(signStr);
var sign = h.digest(‘hex’);
// data参数是个json格式的字符串
var options = {method: ‘POST’,
url: ‘https://kop.kuaidihelp.com/api’,
headers:
{ ‘cache-control’: ‘no-cache’,
‘content-type’: ‘application/x-www-form-urlencoded’ },
form:
{ app_id: appId,
method: method,
ts: ts,
sign: sign,
data: ‘{
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}’,
}};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Curl请求示例
curl - X POST ‘https://kop.kuaidihelp.com/api’ \ - H ‘Content-Type:application/x-www-form-urlencoded;charset=utf-8’ \
- d ‘app_id=50001’ \
- d ‘method=cloud.print.waybill’ \
- d ‘sign=bdf3b5f50865ac813cbdfd6c9b572b79’ \
- d ‘ts=1524209949’ \
- d ‘data={
“agent_id”: “目标打印代理,必填”,
“print_type”: “打印类型,1:预览, 2:打印, 3:打印预览. 未设置则默认为3”,
“template_id”: “模板id,打印模板ID”,
“print_data”: [
{
“cod_amount”: 200,如果是货到付款服务,则使用该字段,
“sequence”: “1/1”,
“cp_code”: “快递品牌,参照“快递品牌列表”,兼容菜鸟和快宝品牌编码”,
“pickup_code”: “取件码(可选)”,
“user_name”: “打印人的名称,若是业务员,可包括手机号码(可选)”,
“note”: “备注(可选)”,
“goods_name”: “物品名(可选)”,
“weight”: “物品重量(可选)”,
“tid”: “(建议用订单号之类的唯一标识,提交和回调时将返回该字段, 申请单号时也将使用该字段当订单号)”,
“recipient”: {
“address”: {
“city”: “宁德市”,
“detail”: “哦里咯啦咯啦”,
“district”: “福鼎市”,
“province”: “福建省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“routing_info”: {
“consolidation”: {
“name”: “温州转福鼎包(集包名)”
},
“origin”: {
“code”: “610025”,
“name”: “四川邛崃公司”
},
“route_code”: “009 030(二三段码)”,
“sortation”: {
“name”: “福鼎351(大字 一段码)”
}
},
“sender”: {
“address”: {
“city”: “成都市”,
“detail”: “兴民街55号”,
“district”: “邛崃市”,
“province”: “四川省”
},
“mobile”: “13344556677”,
“name”: “XXX”,
“phone”: “”
},
“waybill_code”: “333333333333”
}
]
}’
响应示例
成功响应示例-JSON示例
{“code”:
int0
“msg”:
string”success”
“uid”:
string”a6934adee62d8ba3430d4ac678dd5f46c7a79d6e”
“data”:{}
“提交任务时的tid”:{}
“status”:
string”success”
“task_id”:
int46208
}
异常响应示例-JSON示例
{“code”:
int200115
“msg”:
string”业务参数有误,请检查”
“uid”:
string”a6934adee62d8ba3430d4ac678dd5f46c7a79d6e”
“data”:{}
}
错误代码
错误码 | 描述 |
---|---|
221009 | 业务参数有误 |
221010 | 无效的请求方法 |
221010 | 无效的请求方法 |
222203 | 无效的回调URL |
222402 | 该打印代理已注册过 |
222503 | 无效的代理访问密钥 |
222504 | 无效的用户id |
222505 | 无效的app_id |
222508 | 超过批量打印最大限制 |