菜鸟电子面单打印

一、首先开通电子面单服务,然后自己编辑一个模板

地址: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

效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值