1.

https://open.taobao.com/docs/doc.htm?spm=a21da.7629140.0.0.97iBG8&docType=1&articleId=107052 电子面单接入文档(LINK接入)
2.

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

3.

https://lcp.cloud.cainiao.com/ 后台地址
4.
http://pac.i56.taobao.com/apiinfo/showDetail.htm?spm=0.0.0.0.3tcf05&apiId=TMS_WAYBILL_SUBSCRIPTION_QUERY&type=merchant_electronic_sheet API地址
前面的地址是需要仔细看的,我做的电子面单打印是依靠菜鸟的打印组件预览出来再手动打印,并不是全部用菜鸟的打印组件打印,下面是正式的介绍情况了.
第一步,申请需要申请的账号,这些你就看文档,我也帮不了你什么,我也是别人先申请我在用的.
第二部.单独创建一个控制器,这是控制器的内容,我并不是靠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);5960    $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 Appkey29 * @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 请求Url38 * @param  array $datas 提交的数据39 * @return url响应返回的html40      */
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 <includefile="public@header"/>
2 <head>
3     <title>Print Test</title>
4
5     <styletype="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     <scripttype="text/javascript">
11
12         varsocket;13
14 window.onload= functionload()15 {16
17 document.getElementById("pdfDiv").style.visibility="hidden";18 }19
20         functionsetStatusLabel(msg)21 {22             vareStatus=document.getElementById("connectionStatus");23 eStatus.innerHTML=msg;24 }25
26         functiondoConnect(callback)27 {28             varserviceUrl=document.getElementById("serviceUrl").value;29
30 socket= newWebSocket(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                 varobj=eval('('+event.data+')');39
40                 if(obj&&(obj.previewURL||obj.previewImage))41 {42                     varurl;43                     if(obj&&obj.previewURL) {44 url=obj.previewURL;45 }else if(obj&&obj.previewImage) {46 url=obj.previewImage;47 }48                     varpdf=document.getElementById('pdf');49                     if(pdf) {50 pdf.setAttribute('src', url);51 document.getElementById("pdfDiv").style.visibility="visible";52 }53 }54                 varresultElement=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         functionsendCommand()82 {83             if(typeofsocket== "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             varmsg=document.getElementById('printmessage').value;94             varrepeatCount=document.getElementById('repeatCount').value;95             varisPreview=document.getElementById('isPreview').checked;96             vartime= newDate().getTime();97
98             for(varindex= 0; index<repeatCount; index++) {99                 varobj=JSON.parse(msg);100
101                 if(obj["task"])102 {103                     //taskID
104 obj["task"]["taskID"]=time.toString()+ "_TASK_" +index;105
106                     //preview
107 obj["task"]["preview"]=isPreview;108 }109
110                 varnewMsg=JSON.stringify(obj);111 socket.send(newMsg);112 }113 }114
115         functionclearResult()116 {117             varresultElement=document.getElementById("resultMessage");118 resultElement.value= "";119 }120     </script>
121
122
123 </head>
124 <body>
125
126 <divid="ctlDiv">
127
128     <formname="formname"action="javascript:sendCommand()">
129         <phidden>重复发送请求:<inputid="repeatCount"type="number"min="1"max="1000"step="1"value="1">&nbsp;&nbsp;&nbsp;
130             <inputhidden id="isPreview"type="checkbox"checked="true">预览模式131         </p>
132         <p>    <inputhidden type="text"id="serviceUrl"name="serviceUrl"value="ws://localhost:13528" />
133             <labelhidden id="connectionStatus">未知</label>
134             <inputhidden id="dianji"type="submit"value="发送请求"/>
135         </p>
136         <textareahidden cols="80"rows="20"id="printmessage"name="printmessage">{137 "cmd": "print",138 "requestID": "123458976",139 "version": "1.0",140 "task": {141 "taskID": "7293666",142 "preview": false,143 "printer": "",144 "notifyMode": "allInOne",145 "previewType": "html",146 "documents": [147 {148 "documentID": "0123456789",149 "contents": [150 {$list}//数据是在这里哦接收的,你不需要改什么,如果你觉得这不是你想要的,你也可以借鉴一下方法151 ]152 }153 ]154 }155 }156     </textarea>
157         <br/><br/>
158         <textareahidden cols="80"rows="20"id="resultMessage"name="resultMessage"readonly="readonly"></textarea>
159         <br/>
160         <inputhidden type="button"value="清除返回消息"onclick="clearResult()"/>
161     </form>
162 </div>
163
164 <divstyle="margin: 0 auto"id="pdfDiv"align="middle">
165     <iframeid="pdf"src=""width="100%"height="100%">
166     </iframe>
167 </div>
168
169 </body>
170 </html>
171
172 <script>
173 $('#dianji').click();174
175
176 </script>

最后放一张预览成功的图片(注:必须安装菜鸟打印组件菜鸟预览)

这个需要右键打印,或点击打印的图标才能打印,打印情况就说到这里了,有什么不懂的可以留言

转载于:https://www.cnblogs.com/luojie-/p/8537596.html

关于菜鸟的圆通电子面单打印相关推荐

  1. C#-快递鸟电子面单打印API

    以下是快递鸟电子面单接口对接demo (1).只支持Json格式.接口指令1007. (2).订单编号(OrderCode)不可重复提交,重复提交系统会返回具体错误代码. (3).接口支持:顺丰(SF ...

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

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

  3. 圆通电子面单账户开通申请流程(快递鸟示例)

    电子面单下单: 5.3.1.请求接口之前需要先实名认证,开通相关会员服务,否则会请求失败并返回提示"未申请开通接口": 5.3.2.接口开发需下载"快递鸟接口技术文档&q ...

  4. 电商对接使用圆通电子面单接口方法

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

  5. 圆通电子面单接口申请案例(PHP)

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

  6. 通过快递100获取快递单号,结合c-lodop热敏纸打印 – 通过菜鸟ISV/自研ERP使用菜鸟电子面单...

    https://www.1024cc.cn/index.php/2019/04/29/%E6%89%93%E5%8D%B0%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95/ 打 ...

  7. 通过快递鸟如何接入圆通速递电子面单

    一.接入前准备(TO商家业务人员) 1.申请快递鸟用户ID和API key 1.1登录快递鸟官网注册页面http://www.kdniao.com/reg注册快递鸟账号: 1.2登录快递鸟用户管理后台 ...

  8. 快递电子面单批量打印接口对接demo-JAVA

    目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打印电子面 ...

  9. 电子面单云打印方案(PHP示例)

    物流快递.电商.ERP.仓储等都涉及发货业务都需要用到电子面单打印,市面上有各种各样的电子面单打印机,电子面单打印软件,电子面单打印工具满足了打印需求,但未能很好的满足移动端打印.这里介绍一个手机端电 ...

  10. 快递鸟电子面单批量打印接口用java怎么对接对接

    目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打印电子面 ...

最新文章

  1. asic面试题目 英伟达_英伟达一面总结
  2. 将远程服务器获取的linkedhashMap对象转为实体类对象
  3. 程序员发现 Bug 的时候是怎样一种心境?
  4. SPL 关联优化技巧
  5. 数论--中国剩余定理模板
  6. 你想象中的Task后续,很简单?
  7. Maven开发笔记(四)—— Maven中plugins和pluginManagement
  8. LeetCode 169. 求众数(摩尔投票)
  9. 无线网络MIMO技术浅谈
  10. 今晚直播丨如何通过APEX实现数据库自动晨检功能
  11. jdbc连接mysql驱动包_jdbc连接数据库驱动包
  12. java题目青蛙跳杯子_蓝桥杯 历届试题 青蛙跳杯子
  13. 什么是埋点?我们为什么需要埋点?(原作者:知乎 原志Growing)
  14. IDEA提示Multi-catches are not supported at this language level的解决办法
  15. 计算机云台示意图,智能语音识别云台转动模块电路设计—电路图天天读(70)...
  16. 【K哥爬虫普法】百度、360八年乱战,robots 协议之战终落幕
  17. 云计算未来的发展前景和就业前景怎么样?
  18. IBMX3650M4服务器_安装内存_内存顺序
  19. VLAN的划分以及三层交换机理论,OMG,太详细了吧,看它!
  20. Loadrunner12简单使用过程

热门文章

  1. html canvas 烟花 特效代码
  2. 360卸载软件测试初学者,360软件管家如何卸载软件?360软件管家卸载软件的方法步骤...
  3. String intern()方法
  4. magicbook装深度linux,荣耀Magicbook 2019锐龙版装Deepin 20后亮度无法调节的解决
  5. php阿拉伯数字转中文人民币大写
  6. 2019 10月 月末总结
  7. 企业微信webhook使用
  8. 拉勾网的职位信息爬取(详细)
  9. 51单片机按键计数c语言程序,利用AT89C51单片机制作的按键次数计数器
  10. 关于CPU架构之总结