菜鸟电子面单打印
一、首先开通电子面单服务,然后自己编辑一个模板地址:https://cloudprint.cainiao.com/print提示:这里不再详细说明,网上随便找了一个模板地址(如果不会,下面我会提供一个,没有关系)二、需要一台打印机,我的打印机型号是(HPRT 汉印打印机)有了打印机后,就把打印机与电脑连接,有的电脑可能识别不出来打印机,这个时候就需要装一个驱动(可以询问商家),我的型号可以到htt
·
一、首先开通电子面单服务,然后自己编辑一个模板
地址:https://cloudprint.cainiao.com/print
提示:这里不再详细说明,网上随便找了一个模板地址(如果不会,下面我会提供一个,没有关系)
二、需要一台打印机,我的打印机型号是(HPRT 汉印打印机)
有了打印机后,就把打印机与电脑连接,有的电脑可能识别不出来打印机,这个时候就需要装一个驱动(可以询问商家),我的型号可以到http://cn.hprt.com/下载驱动。 电脑上能识别出打印机就OK了
三、需要下载菜鸟打印组件 这个软件
打印组件下载: http://cloudprint-docs-resource.oss-cn-shanghai.aliyuncs.com/download.html
下载完成后,安装就OK了。
安装好后,一般会出现在电脑右下角的任务栏,打开它,与自己的打印机连接起来。
四、通过WebSocket协议连接客户端(就是写代码)
直接复制下面的代码就好了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>菜鸟打印</title>
</head>
<body>
<button onclick="getdd()">打印</button>
</body>
<script src="js/jquery-1.8.3.min.js"></script>
<script>
var socket;
var getdd
var jsonObject = {
content: {
"data": {
"_dataFrom": "waybill",
"cpCode": "YUNDA",
"needEncrypt": false,
"parent": false,
"recipient": { //收货人信息
"address": {
"city": "长沙市",
"detail": "路淞虹路66666号",
"district": "岳麓区",
"province": "湖南省"
},
"mobile": "17313857698",
"name": "张三",
"phone": "17313857698"
},
"routingInfo": { //集中发货地
"consolidation": {
"code": "S210039",
"name": "上海市内包"
},
"origin": {
"code": "455387",
"name": "上海XXX公司"
},
"routeCode": "B003 000",
"sortation": {
"name": "470"
}
},
"sender": { //寄件人地址电话信息
"address": {
"city": "上海市",
"detail": "上海物资大厦20楼",
"district": "黄浦区",
"province": "上海"
},
"mobile": "18516580554",
"name": "张无忌",
"phone": "18516580554"
},
"shippingOption": {//运输选择
"code": "STANDARD_EXPRESS",
"title": "标准快递"
},
"waybillCode": "3738460008834" //面单号
},
"signature": "MD:C1b9cw46jbUP6/O2rl77Vg==", //模板与数据的签名(非必填)
"templateURL": "http://cloudprint.cainiao.com/template/standard/401/177" //模板文件url
}
}
var num = [{
waybillCode: "3738460008834",
printData: {
data: '',
templateURL: 'http://cloudprint.cainiao.com/template/standard/101/123'
},
objectId: "1"
}]
var defaultPrinter
//备注:webSocket 是全局对象,不要每次发送请求丢去创建一个,做到webSocket对象重用,和打印组件保持长连接。
// function doConnect()
// {
socket = new WebSocket('ws://127.0.0.1:13528');
//如果是https的话,端口是13529
//socket = new WebSocket('wss://localhost:13529');
// 打开Socket
socket.onopen = function(event) {
getPrintList() //打印机列表
// 监听消息
socket.onmessage = function(event) {
console.log('Client received a message', event);
console.log("打印机"+JSON.parse(event.data).defaultPrinter)
defaultPrinter = JSON.parse(event.data).defaultPrinter
};
// 监听Socket的关闭
socket.onclose = function(event) {
console.log('Client notified socket has closed', event);
};
};
// }
// doConnect()
getdd = function() {
doPrint(defaultPrinter, num)
}
/***
*
* 获取请求的UUID,指定长度和进制,如
* getUUID(8, 2) //"01001010" 8 character (base=2)
* getUUID(8, 10) // "47473046" 8 character ID (base=10)
* getUUID(8, 16) // "098F4D35"。 8 character ID (base=16)
*
*/
function getUUID(len, radix) {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var uuid = [],
i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
/***
* 构造request对象
*/
function getRequestObject(cmd) {
var request = new Object();
request.requestID = getUUID(8, 16);
request.version = "1.0";
request.cmd = cmd;
return request;
}
/***
* 获取自定义区数据以及模板URL
* waybillNO 电子面单号
*/
function getCustomAreaData(waybillNO) {
//获取waybill对应的自定义区的JSON object,此处的ajaxGet函数是伪代码
//var jsonObject = {jiade:1234}//ajaxGet(waybillNO);
var ret = new Object();
ret.templateURL = jsonObject.content.templateURL;
ret.data = jsonObject.content.data;
return ret;
}
/***
* 获取电子面单Json 数据
* waybillNO 电子面单号
*/
function getWaybillJson(waybillNO) {
//获取waybill对应的json object,此处的ajaxGet函数是伪代码
// var jsonObject = {jiade:1234}// ajaxGet(waybillNO);
return jsonObject;
}
/**
* 请求打印机列表demo
* */
function getPrintList() {
var request = getRequestObject("getPrinters");
if (socket.readyState === 1) {
console.log(request)
socket.send(JSON.stringify(request));
}
}
/**
* 弹窗模式配置打印机
* */
function getPrintInPop() {
var request = getRequestObject("printerConfig");
if (socket.readyState === 1) {
console.log(request)
socket.send(JSON.stringify(request));
}
}
/**
* 打印电子面单
* printer 指定要使用那台打印机
* waybillArray 要打印的电子面单的数组
*/
function doPrint(printer, waybillArray) {
var request = getRequestObject("print");
request.task = new Object();
request.task.taskID = getUUID(8, 10);
request.task.preview = false;
request.task.printer = printer;
var documents = new Array();
for (i = 0; i < waybillArray.length; i++) {
var doc = new Object();
doc.documentID = waybillArray[i];
var content = new Array();
var waybillJson = getWaybillJson(waybillArray[i]);
var customAreaData = getCustomAreaData(waybillArray[i]);
content.push(waybillJson, customAreaData);
doc.contents = content;
documents.push(doc);
}
request.task.documents = documents
socket.send(JSON.stringify(request));
}
/**
* 响应请求demo
* */
socket.onmessage = function(event) {
var response = eval(event.data);
if (response.cmd == 'getPrinters') {
getPrintersHandler(response); //处理打印机列表
} else if (response.cmd == 'printerConfig') {
printConfigHandler(response);
}
};
</script>
</html>
可以参考:
菜鸟云打印交互协议:https://open.taobao.com/doc.htm?docId=107014&docType=1
效果图如下:
更多推荐
所有评论(0)