1.用API打印发货单、取件码、标签、小票单等
2.用API打印快递单

云打印机WIFI联网教程,点我查看
点击查看【taobao】

要初步测试,告知下我们客服要开始测试,
调用API成功打印后,会把您提交打印的效果拍照给您看。
初步测试会用到的小程序和参数:
标签打王
标签打王.jpg
image.png
调用API先初步测试打印,会使用到的一些API参数,供测试对接看效果用:
用户ID
app_id=”108344”;
应用密钥
api_key=”86c7ea9521d3b525be539b0bda4c8f6f2e07cf3c”;
目标云打印机的访问密钥
agent_id=”6949690060994106”;

应用场景

  1. 向云打印机发送取件码、发货单、贴纸等非电子面单类型的打印任务,在云打印机上完成打印
    2. 支持利用”标签打王“微信小程序编辑打印模板,随心所欲设计打印样式与内容

    接口名称

    sticker.print.do

    公共参数

    请求地址

    | 环境名称 | HTTPS请求地址 | | —- | —- | | 正式地址 | https://kop.kuaidihelp.com/api |

公共请求参数

名称 类型 是否必须 描述
method string API接口名称,如sticker.print.do
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(给初步测试的云打印机密钥)使用目标云打印机,需要其管理员允许。
template_id string 打印模板ID。打印模板需要在“标签打王”微信小程序中设计,此处填入模板详情页显示的模板ID
print_data array 打印数据。若打印模板中包含有变量,需在此提供变量值,每个数组元素为一条打印项,需包含所有变量的值。批量打印提供多个打印项即可

image.png

响应参数

名称 类型 是否必须 描述
status string 处理状态,success为成功,其他为失败
task_id string 本次打印任务编号,在查询打印任务状态时需要

请求示例[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 headers = new HashMap();
//根据API的要求,定义相对应的Content-Type
headers.put(“Content-Type”, “application/x-www-form-urlencoded; charset=UTF-8”);
Map querys = new HashMap();
Map bodys = new HashMap();

String appId = “50001”;
String method = “sticker.print.do”;
// 当前时间戳
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”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}”);

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

  1. // 计算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类型值
  2. /*<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 = “sticker.print.do”;
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”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}”;
String url = host + path;
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
if (0 < querys.Length)
{
url = url + “?” + querys;
}

  1. 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;
  2. //根据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 /> }
  3. 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");
  4. }
  5. // 计算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 /> }
  6. // 获取当前时间戳<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 /> }
  7. 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 = ‘’’sticker.print.do’’’;
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”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}’’’

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 = ‘sticker.print.do’;
$ts = time();
$appKey = ‘2e0a4e2fd8cf545b35e65f00184bcfa’;
$bodys = [
“app_id” => $appId,
“method” => $method,
“sign” => md5($appId . $method . $ts . $appKey),
“ts” => $ts,
“data” => ‘{
“agent_id”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}’
];
$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 = ‘sticker.print.do’;
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”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}’,
}};

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=sticker.print.do’ \
- d ‘sign=bdf3b5f50865ac813cbdfd6c9b572b79’ \
- d ‘ts=1524209949’ \
- d ‘data={
“agent_id”:”BE85E501-996C-46F1-9DAD-C3026685233320”,
“template_id”:”166678”,
“print_data”:[
{
“tid”:”2020042611000001”,
“pickupCodeNew”:”A01”
},
{
“tid”:”202004261100003”,
“pickupCodeNew”:”A02”
}
]
}’

响应示例

成功响应示例-JSON示例

{“code”:
int0
“msg”:
string”成功”
“data”:{}
“提交任务时的tid”:{}
“status”:
string”success”
“task_id”:
string”588660803”
“uid”:
string”97a8c01addaf33444921c82e2584839a00000000”
}

异常响应示例-JSON示例

{
}
“code”:
int200115
“msg”:
string”业务参数有误,请检查”
“data”:{}
“uid”:
string”97a8c01addaf33444921c82e2584839a00000000”

错误代码

错误码 描述
221009 业务参数有误
221010 无效的请求方法
221010 无效的请求方法
222203 无效的回调URL
222402 该打印代理已注册过
222503 无效的代理访问密钥
222504 无效的用户id
222505 无效的app_id
222508 超过批量打印最大限制