关于菜鸟的圆通电子面单打印(代码片段)

年华-夜 年华-夜     2022-10-23     321

关键词:

1.

 
2.

 https://dayin.cainiao.com/miandan/subscription/branchRechargeInfo.htm?spm=a2d3a.8498240.0.0.558119b3hxhtix 订购关系查询

3.

 
4.
 
 
 
前面的地址是需要仔细看的,我做的电子面单打印是依靠菜鸟的打印组件预览出来再手动打印,并不是全部用菜鸟的打印组件打印,下面是正式的介绍情况了.
 
第一步,申请需要申请的账号,这些你就看文档,我也帮不了你什么,我也是别人先申请我在用的.
第二部.单独创建一个控制器,这是控制器的内容,我并不是靠ajax传递数据到控制器接收的,而是用form表单提交,这里说清楚,接收的数据按照你要床底的情况自己组装
 
 1    //圆通信息
 2                     $a=time()+1;//随机订单号
 3                     $b=time();//随机包裹号      这两个参数不许是变量,不然每次返回的快递单号都是同一个,也就是合单,你也可以在群里问客服
 4 //下面是需要传递到接口的数据
 5                     $eorderi =\'"cpCode":"YTO","dmsSorting":"false","needEncrypt":"false","resourceCode":"无",
 6         "sender":
 7             "address":
 8                 "city":"宿迁市",
 9                 "detail":"淮海东路*********",
10                 "district":"泗阳县",
11                 "province":"江苏省",
12                 "town":""
13             ,
14             "mobile":"18***742",
15             "name":"曲*",
16             "phone":"1865***42",
17         ,//这些是发货地址,和你在订购关系里申请的内容要一样
18         "storeCode":"无",
19         "tradeOrderInfoDtos":[
20             
21                 "logisticsServices":"",
22                 "objectId":"1",
23                 "orderInfo":
24                     "orderChannelsType":"OTHERS",
25                     "tradeOrderList":[
26                         "\'.$a.\'"//订单号
27                     ]
28                 ,
29                 "packageInfo":
30                     "id":"\'.$b.\'",//包裹号
31                     "items":[
32                         
33                             "count":"\'.$total_number.\'",
34                             "name":"衣服"
35                         
36                     ],
37                     "volume":"1",
38                     "weight":"1"
39                 ,
40                 "recipient":
41                     "address":
42                         "city":"\'.$ship_order_data[\'city\'].\'",
43                         "detail":"\'.$ship_order_data[\'address\'].\'",
44                         "district":"\'.$ship_order_data[\'exparea\'].\'",
45                         "province":"\'.$ship_order_data[\'province\'].\'",
46                         "town":""
47                     ,
48                     "mobile":"\'.$ship_order_data[\'phone\'].\'",
49                     "name":"\'.$ship_order_data[\'username\'].\'",
50                     "phone":"\'.$ship_order_data[\'phone\'].\'"
51                 ,//这些是发货地址
52                 "templateUrl":" http://cloudprint.cainiao.com/template/standard/101/572",//我用的是圆通,所以这是模板的地址,自己在API里面找
53                 "userId":"12"//随便填写
54             
55         ]
56     \';
57
58    $jsonResult = $this->submitEOrderi($eorderi);
59
60    $str=json_decode($jsonResult);


      
      $this->assign(\'list\',$str->waybillCloudPrintResponseList[0]->printData);//只需要打印里面的printData里的数据


      return $this->fetch(\'ce\');//新写一个空白的前端.数据在那边接收

第三部.前面的都是准备工作,下面的才是正事的.

(1).

  
 1 //圆通电子面单接口
 2 
 3     /**
 4      * Json方式 调用电子面单接口
 5      */
 6     public function submitEOrderi($requestData)
 7     
 8         $url=\'http://link.cainiao.com/gateway/link.do\';//正式地址  必须
 9 
10 
11         $appSecret =\'z026yj********83S3B6cv86\';必须
12 //
13         $datas = array(
14             \'msg_type\' =>\'TMS_WAYBILL_GET\',
15             \'logistic_provider_id\' =>\'UFI1c3dkR2tNRWpX*********************1zWWZxS2V5Y1FrWi90K21jelhOSTMwQ3pKaA==\',必须
16
17             \'data_digest\'=>$this->encrypti($requestData,$appSecret),//获取签名
18             \'logistics_interface\' =>$requestData,
19         );
20 
21         $result = $this->sendPosti($url,$datas);提交数据
22 
23         return $result;
24     
25     /**
26      * 电商Sign签名生成
27      * @param data 内容
28      * @param appkey Appkey
29      * @return DataSign签名
30      */
31     public function encrypti($data,$appSecret)
32     
33         return base64_encode(md5($data.$appSecret,true));
34     
35     /**
36      *  post提交数据
37      * @param  string $url 请求Url
38      * @param  array $datas 提交的数据
39      * @return url响应返回的html
40      */
41 
42     function sendPosti($url, $datas) 
43         $temps = array();
44         foreach ($datas as $key => $value) 
45             $temps[] = sprintf(\'%s=%s\', $key, $value);
46         
47         $post_data = implode(\'&\', $temps);
48         $url_info = parse_url($url);
49         if(empty($url_info[\'port\']))
50         
51             $url_info[\'port\']=80;
52         
53         $httpheader = "POST " . $url_info[\'path\'] . " HTTP/1.0\\r\\n";
54         $httpheader.= "Host:" . $url_info[\'host\'] . "\\r\\n";
55         $httpheader.= "Content-Type:application/x-www-form-urlencoded\\r\\n";
56         $httpheader.= "Content-Length:" . strlen($post_data) . "\\r\\n";
57         $httpheader.= "Connection:close\\r\\n\\r\\n";
58         $httpheader.= $post_data;
59         $fd = fsockopen($url_info[\'host\'], $url_info[\'port\']);
60         fwrite($fd, $httpheader);
61         $gets = "";
62         $headerFlag = true;
63         while (!feof($fd)) 
64             if (($header = @fgets($fd)) && ($header == "\\r\\n" || $header == "\\n")) 
65                 break;
66             
67         
68         while (!feof($fd)) 
69             $gets.= fread($fd, 128);
70         
71         fclose($fd);
72 
73         return $gets;
74     

 

第三部.前端页面的代码

  1 <include file="public@header"/>
  2 <head>
  3     <title>Print Test</title>
  4 
  5     <style type="text/css">
  6 
  7         /*div#ctlDiv height:750px;width:50%;float:left;border-style:solid;border-color:red;border-width:0px;*/
  8         div#pdfDiv height:750px;width:49%;border-style:solid;border-color:red;border-width:0px;
  9     </style>
 10     <script type="text/javascript">
 11 
 12         var socket;
 13 
 14         window.onload = function load()
 15         
 16 
 17             document.getElementById("pdfDiv").style.visibility="hidden";
 18         
 19 
 20         function setStatusLabel(msg)
 21         
 22             var eStatus = document.getElementById("connectionStatus");
 23             eStatus.innerHTML = msg;
 24         
 25 
 26         function doConnect(callback)
 27         
 28             var serviceUrl = document.getElementById("serviceUrl").value;
 29 
 30             socket = new WebSocket(serviceUrl);
 31 
 32             // 监听消息
 33             socket.onmessage = function(event)
 34             
 35                 console.log(\'Client received a message\',event);
 36                 document.getElementById("pdfDiv").style.visibility="hidden";
 37                 // parse json
 38                 var obj = eval(\'(\'+event.data+\')\');
 39 
 40                 if (obj && (obj.previewURL || obj.previewImage))
 41                 
 42                     var url;
 43                     if (obj && obj.previewURL) 
 44                         url = obj.previewURL;
 45                      else if (obj && obj.previewImage) 
 46                         url = obj.previewImage;
 47                     
 48                     var pdf = document.getElementById(\'pdf\');
 49                     if (pdf) 
 50                         pdf.setAttribute(\'src\', url);
 51                         document.getElementById("pdfDiv").style.visibility="visible";
 52                     
 53                 
 54                 var resultElement = document.getElementById("resultMessage");
 55                 resultElement.value = resultElement.value + event.data + "\\n";
 56                 resultElement.scrollTop = resultElement.scrollHeight;
 57             ;
 58 
 59             socket.onopen = function(event)
 60             
 61                 if (callback != null) 
 62                     callback();
 63                 
 64                 setStatusLabel("已连接");
 65             
 66 
 67             socket.onerror = function(error)
 68             
 69                 console.log("Failed to connect CN print at " + serviceUrl, error);
 70                 setStatusLabel("连接错误");
 71             
 72 
 73             // 监听Socket的关闭
 74             socket.onclose = function(event)
 75             
 76                 console.log(\'Client notified socket has closed\',event);
 77                 setStatusLabel("连接关闭");
 78             ;
 79         
 80 
 81         function sendCommand()
 82         
 83             if (typeof socket == "undefined" || socket.readyState == WebSocket.CLOSED) 
 84                 doConnect(sendCommand);
 85                 return;
 86             
 87 
 88             if (socket.readyState != WebSocket.OPEN) 
 89                 alert("无效连接: " + socket.readyState);
 90                 return;
 91             
 92 
 93             var msg = document.getElementById(\'printmessage\').value;
 94             var repeatCount = document.getElementById(\'repeatCount\').value;
 95             var isPreview = document.getElementById(\'isPreview\').checked;
 96             var time = new Date().getTime();
 97 
 98             for (var index = 0; index < repeatCount; index++) 
 99                 var obj = JSON.parse(msg);
100 
101                 if (obj["task"])
102                 
103                     // taskID
104                     obj["task"]["taskID"] = time.toString() + "_TASK_" 查看详情  

免费圆通电子面单接口对接

  电子面单接口是快递鸟提供给独立电商、仓储管理系统、物流供应链等物流系统平台使用的下单接口,满足客户在线发货需求并提供打印面单的服务,客户通过网络选择物流公司发送请求通知贵公司有快递要发货,把数... 查看详情

圆通电子面单接口对接及调试

  电子面单接口是快递鸟提供给独立电商、仓储管理系统、物流供应链等物流系统平台使用的下单接口,满足客户在线发货需求并提供打印面单的服务,客户通过网络选择物流公司发送请求通知贵公司有快递要发货,把数... 查看详情

圆通电子面单demo(代码片段)

自己写的,比较简单,没什么好多说的config.php<?phpreturn[‘Url‘=>‘请求地址‘,‘CustomerCode‘=>‘客户编码‘,‘CheckCode‘=>‘密钥‘,‘SenderName‘=>‘发件人名‘,‘SenderProvince‘=>‘发件人省‘,‘SenderCity‘=>‘发件人市... 查看详情

电子面单批量打印接口对接(含打印控件)

...使用方法介绍。目前支持批量打印电子面单的有快递鸟、菜鸟和快递公司。但是快递公司仅能打印本公司的电子面单,对于电商等发货商来说不太适用,菜鸟教适合淘系商家,快递鸟则比较通用,这里介绍快递鸟电子面单接口批... 查看详情

电子面单api接口_java调用示例

... 目前电子面单接口类型有:快递公司自行提供接口、菜鸟电子面单接口、快递鸟电子面单接口。菜鸟电子面单接口、快递鸟电子面单接口接入方式类似,都支持15家快递查询,其 查看详情

顺丰电子面单api接口怎么接入?

...,分别是快递公司电子面单接口、快递鸟电子面单接口、菜鸟电子面单接口1、快递公司接口由各个快递公司单独开发的接口,面向商家。商家需先注册账号申请对接,快递鸟与快递公司确定相应网点及具体信息,然后快递公司... 查看详情

电商适用电子面单接口对接案例

电子面单接口现在有快递公司、菜鸟和快递鸟提供快递公司是一家家合作,要接口文档,逐一对接菜鸟和快递鸟是电子面单接口集成方,能打印多家快递电子面单,菜鸟目前支持15家,快递鸟支持20家,基本上都是常用的快递,... 查看详情

电脑上怎么下载,安装阿里巴巴?

...印_热敏打印订购后并且进入软件。2进入软件后首先进行菜鸟电子面单授权3电子面单授权完成后,开始打印发货即可。注意事项必须先开通菜鸟电子面单需要使用菜鸟电子面单打印插件提问下一步怎么做解释仔细一点好么听不懂... 查看详情

各种电子面单_api接口

  电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务。通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍。电子面单以接口形式嵌入到自己的系统、网站上,可以在自己的平台操作打印电子面单。&nb... 查看详情

电子面单打印机如何使用

参考技术A  电子面单,亦可称为热敏纸快递标签、经济型面单,二维码面单等,指的是根据物流公司的规定要求,在不干胶热敏纸上打印客户收发件信息的面单。  电子面单在国外已经成功应用多年,如联邦快递(FedEx)和国... 查看详情

快递公司面单纸张标准

菜鸟标准100mm*180mm天天/全峰/快捷100mm*180mmE邮宝长100mm*150mmE邮宝短100mm*100mm优速/宅急送100mm*150mm优速标准100mm*180mm菜鸟申通/圆通100mm*180mm菜鸟汇通/韵达100mm*180mm邮政物流100mm*180mm邮政小包100mm*150mm韵达标准100mm*203mm韵达小包100mm*180mm... 查看详情

快递公司面单纸张标准

菜鸟标准100mm*180mm天天/全峰/快捷100mm*180mmE邮宝长100mm*150mmE邮宝短100mm*100mm优速/宅急送100mm*150mm优速标准100mm*180mm菜鸟申通/圆通100mm*180mm菜鸟汇通/韵达100mm*180mm邮政物流100mm*180mm邮政小包100mm*150mm韵达标准100mm*203mm韵达小包100mm*180mm... 查看详情

快递鸟电子面单打印功能基于java

之前的后天管理系统的电子面单打印使用的是灵通打单。使用相对比较麻烦,需要到处Excel之后再导入,麻烦。快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题。不难是不难,但是遇到的坑着实是不少... 查看详情

快递公司面单纸张标准

菜鸟标准100mm*180mm天天/全峰/快捷100mm*180mmE邮宝长100mm*150mmE邮宝短100mm*100mm优速/宅急送100mm*150mm优速标准100mm*180mm菜鸟申通/圆通100mm*180mm菜鸟汇通/韵达100mm*180mm邮政物流100mm*180mm邮政小包100mm*150mm韵达标准100mm*203mm韵达小包100mm*180mm... 查看详情

快递公司面单纸张标准

菜鸟标准100mm*180mm天天/全峰/快捷100mm*180mmE邮宝长100mm*150mmE邮宝短100mm*100mm优速/宅急送100mm*150mm优速标准100mm*180mm菜鸟申通/圆通100mm*180mm菜鸟汇通/韵达100mm*180mm邮政物流100mm*180mm邮政小包100mm*150mm韵达标准100mm*203mm韵达小包100mm*180mm... 查看详情

vue打印电子面单(后台传来的html的解决方案)

//打印可以使用lodop这个经典的前端打印控件1、在vueassets目录新建LodopFuncs.js,(可以自由选择其他路径),里面的内容为:varCreatedOKLodop7766=null;//====判断是否需要安装CLodop云打印服务器:====exportfunctionneedCLodop(){try{varua=navigator.userAgent;if(... 查看详情

电子面单打印机怎么安装

参考技术A  1、安装电子面单。  第一步:打开打印机右盖,露出纸卷仓,抬起打印头压臂;第二步,电子面单依次从打印机背部穿纸口和纸导向杆下方穿过;第三步:将首张面单的前边缘与撕纸标尺的边缘对齐,纸张导向... 查看详情