菜鸟电子面单打印

2023-11-07

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

菜鸟电子面单打印 的相关文章

随机推荐

  • Python爱心代码

    效果展示 代码自取 from tkinter import from math import log sin cos pi import random 新建画布尺寸大小 CANVAS WIDTH 640 CANVAS HEIGHT 480
  • GBN,SR,TCP区别

    GBN 回退N go back N 如果某个报文段没有被正确的接收 那么从这个报文段到后面的报文段都要重新发送 返回的ACK采用剋及确认的机制 也就是说如果GBN返回的ACK 3 也就是说3报文段和3 之前的报文段都被正确地接收了 SR 接
  • 基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能

    前言 其原理主要是利用JavaScript中的鼠标事件来控制CSS样式 大致就是监听某个DOM元素的鼠标按下事件 以及按下之后的移动事件和松开事件 在鼠标按下且移动过程中 可实时获得鼠标的X轴坐标的值 通过简单计算 可计算出目标元素的宽度
  • uboot-链接脚本(u-boot.lds)

    学习目标 uboot链接脚本分析 学习内容 学习使用了正点原子的I MX6ULL教程及开发平台 uboot的链接脚本u boot lds u boot map 学习时间 2022 07 17 学习产出 分析uboot的启动流程之前 首先要找
  • npm install 报错 ERR! network ‘proxy‘ config is set properly. See: ‘npm help config‘

    想用npm创建项目 但是突然报了个问题 问题 使用 npm install 初始化项目依赖失败 报错 proxy config is set properly See npm help config npm WARN registry Un
  • 多行同时编辑(idea)

    同时按住 Ctrl Shift Alt 点击要编辑的地方就可以同时编辑了
  • stm32图像识别分类技术,陈老师简单为你阐述一下

    STM32图像分类 前言 可能有的同学会有疑问 STM32 能做图像分类这么复杂的事情吗 嵌入式系统中视觉技术的迅速普及 推动了用于汽车安全 机器视觉和运动分析的超高速成像攻克方案 相应地 通过更壮大的图像传感器和更小的像素体系构造 能够显
  • 学习Java面向对象编程和设计模式最好的5本书

    对于任何一个Java开发人员来说 必须学会面向对象的设计原则和各种设计模式的知识 但有一些关于面向对象设计原则 设计模式和最佳实践的书籍 只有少数几本书能做到真正在讲解这方面内容 设计原则和设计模式 设计原则是基础 设计模式是基于这个基础的
  • OAuth2.0 授权模式,基于HttpClient 实现

    功能代码如下 package com zzg ucas config import java io IOException import org apache http HttpResponse import org apache http
  • TP5.0: 显示错误信息

    在TP5中 我们运行的代码有错误无法执行时 只显示页面错误 而不显示错误信息 对我我来讲是无法接受滴 毕竟我还是个小渣渣 查看了百度 解决方案是 在application config php中找到 我们把false改成true即可 然后我
  • CUDA Samples: heat conduction(模拟热传导)

    以下CUDA sample是分别用C 和CUDA实现的模拟热传导生成的图像 并对其中使用到的CUDA函数进行了解说 code参考了 GPU高性能编程CUDA实战 一书的第七章 各个文件内容如下 funset cpp include funs
  • 【计算机视觉

    文章目录 一 分割 语义相关 12篇 1 1 MeViS A Large scale Benchmark for Video Segmentation with Motion Expressions 1 2 Likelihood Based
  • SCAU-OJ教材习题

    第三章 1 分期还款 加强版 从银行贷款金额为d 准备每月还款额为p 月利率为r 请编写程序输入这三个数值 计算并输出多少个月能够还清贷款 输出时保留1位小数 如果无法还清 请输出 God 计算公式如下 输入格式 三个数 分别为货款金额 每
  • 史上最全的Websocket入门教程

    websocket简介 websocket是什么 答 它是一种网络通信协议 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 为什么需要websocket 疑问 我们已经有了 HTTP 协议 为什么还需要另一个协议
  • 【力扣】96. 不同的二叉搜索树 <动态规划>

    力扣 96 不同的二叉搜索树 给你一个整数 n 求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种 返回满足题意的二叉搜索树的种数 示例 1 输入 n 3 输出 5 示例 2 输入 n 1 输出 1 提示 1 l
  • Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

    1 Lombok 使用演示 Lombok 使 同时使 Data 和 Builder 构建无参构造器报错 编译不通过 如下图 Lombok 使 Data 可以自动 成 参构造和类 所有属性的 getter setter 法 可以简化我们代码的
  • 【Matlab显示空间不足 help memory——已解决 + Matlab上保存的数据太大,导致保存的数据显示只有1KB——已解决】

    Matlab显示空间不足 help memory 已解决 Matlab上保存的数据太大 导致保存的数据显示只有1KB 已解决 问题描述 问题一 方案一 问题一 方案二 问题二 方案 问题描述 1 当处理一些matlab矩阵数据时会出现一些错
  • Flutter LayoutBuilder组件

    文章目录 Flutter LayoutBuilder组件 简书 使用 Flutter LayoutBuilder组件 简书 可以借助LayoutBuilder组件根据不同的屏幕尺寸显示不同的效果 如竖屏和横屏显示的样式不一样 屏幕尺寸介绍
  • 数据分析之非参数检验与二元逻辑回归结果不一致的原因

    在对两组数据进行非参数检验时 各项属性间无统计学差异 但以分类变量作为因变量使用二元逻辑回归进行分析时 其中存在属性p值小于0 05 即该变量对因变量的影响具有显著性 导致该情况的原因 可能是由于两个检验方法所用的假设和检验策略不同所致 非
  • 菜鸟电子面单打印

    一 首先开通电子面单服务 然后自己编辑一个模板 地址 https cloudprint cainiao com print 提示 这里不再详细说明 网上随便找了一个模板地址 如果不会 下面我会提供一个 没有关系 二 需要一台打印机 我的打印