<?php
/**
打印 - 映美云 https://open.jolimark.com/doc/
*/
namespace Home\Controller;
use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid = "";private $appkey = "";//打印机编号private $deviceIds = "";//订单打印 - URL地址打印public function order_print($order_id = 0){$orderLogic = new OrderLogic();$order = $orderLogic->getOrderInfo($order_id);if (empty($order)) {$this->error('订单不存在');exit;}$url = "https://mcp.jolimark.com/mcp/v3/sys/PrintHtmlUrl";$access_token = $this->get_access_token();$params = ['app_id'		=> $this->appid,'access_token'	=> $access_token,'device_ids'	=> $this->deviceIds,'cus_orderid'	=> $order['order_sn'],'bill_content'	=> "http://xxxxx.com/Home/Print/order_print_view/id/".$order_id,'paper_width'	=> 98,    //打印纸宽度'paper_height'	=> 98,    //打印纸高度'paper_type'	=> 2,     //标签纸];$res = httpRequest($url, "POST", $params);$res  = json_decode($res, true);if ($res['return_code'] == 0) {return true;}else {return false;}}//订单打印页public function order_print_view(){$order_id = I("get.id",'0');$orderLogic = new OrderLogic();$order = $orderLogic->getOrderInfo($order_id);if (empty($order)) {$this->error('订单不存在');exit;}$orderGoods = $orderLogic->getOrderGoods($order_id);$this->assign('order', $order);$this->assign('orderGoods',$orderGoods);$this->display();}//获取access_tokenprivate function get_access_token(){$access_token = S('jolimark_access_token');if (!$access_token){$url = "https://mcp.jolimark.com/mcp/v3/sys/GetAccessToken";$time_stamp = time();$param_url = "app_id={$this->appid}&sign_type=MD&time_stamp={$time_stamp}&key={$this->appkey}";$sign = strtoupper( MD5($param_url) );$url .= "?".$param_url."&sign=".$sign;$res  = httpRequest($url, "GET");$res  = json_decode($res, true);if ($res['return_code'] == 0){$access_token = $res['return_data']['access_token'];S('jolimark_access_token', $access_token, $res['return_data']['expires_in']);}}return $access_token;}
}

URL订单页面排版代码

<html> <head> <title>配送小票</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <!--小票基本信息--> <p><label style="font-size:48px;font-weight:bold;">订单打印</label></p> <!--配送信息--> <hr style="print-char:*;"> <p><label style="font-size:34px;font-weight:bold;">{$order.address2} - <if condition="$order.shipping_price eq '0.00'">到店自取<else />{$order.shipping_name}</if></label></p> <p><label style="font-size:34px;font-weight:bold;">{$order.consignee}</label></p> <p><label style="font-size:34px;font-weight:bold;">{$order.mobile}</label></p> <hr style="print-char:*;"> <p><label>订单编号: </label><label>{$order.order_sn}</label></p> <p><label>下单时间: </label><label>{$order.add_time|date='Y-m-d H:i',###}</label></p><p><label>支付方式: </label><label>{$order.pay_name}</label></p><p><label>客服电话: </label><label>13245566789</label></p><p><label style="font-weight:bold;">到店取件码: </label><label style="font-weight:bold;">{$order.pickup_code}</label></p><!--小票明细--> <hr style="print-char:-;print-text:物品;"> <volist name="orderGoods" id="good"><p> <label style="width:71%;font-weight:bold;">{$good.goods_name}</label> <label style="width:13%;font-weight:bold;text-align:center;">X{$good.goods_num}</label> <label style="width:16%;font-weight:bold;text-align:right;">{$good[goods_total] - $good[zhekou]}</label> </p></volist><p><!--费用明细--> <hr style="print-char:-;print-text:其它费用;"> <p> <label style="width:85%;font-weight:bold;">运费</label> <label style="width: 15%;font-weight:bold;text-align:right;">{$order.shipping_price}</label> </p><p> <label style="width:85%;font-weight:bold;">新人立领</label> <label style="width: 15%;font-weight:bold;text-align:right;">{$order.fuli_price}</label> </p> <p> <label style="width:85%;font-weight:bold;">活动优惠</label> <label style="width: 15%;font-weight:bold;text-align:right;">{$order.cut_fee}</label> </p> <p><label style="text-align:right;font-weight:bold;font-size:36px;">总计: {$order.order_amount}</label></p> <!-- <br /> --><!-- <h3 style="text-align:center;font-size:48px;font-weight:bold;">=== #1 完 ===</h3>  --><!-- <br />  --></body> </html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914637.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914637.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914637.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法 ——XGBoost 的介绍和使用

前言&#xff1a; 最近在工作中遇到一个结构化数据回归预测的问题&#xff0c;用到了很多回归算法&#xff08;如多元线性回归等&#xff09;都没有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也冲三个特征参数人为的增加来几个&#xff0c;训练出来的效果还是很…

Linux操作系统之信号:保存与处理信号

目录 前言&#xff1a; 前文回顾与补充&#xff1a; 信号的保存 PCB里的信号保存 sigset_t 信号集操作函数 信号的处理 信号捕捉的流程&#xff1a;​编辑 操作系统的运行原理 硬件中断 时钟中断 死循环 软中断 总结&#xff1a; 前言&#xff1a; 在上一篇文…

Spring Boot 设置滚动日志logback

Spring Boot 的 logback 框架 Spring Boot 默认内置了 Logback 作为日志实现框架&#xff0c;只需要在resources文件夹下添加一个logback-spring.xml&#xff0c;springboot会按照你的设置自动开启logback日志功能。 配置 logback-spring.xml 实现每天产生一个日志文件&#xf…

如何定义一个只能在堆上或栈上生成对象的类

在C中&#xff0c;可以通过特定的技术手段来控制对象只能在堆(heap)或栈(stack)上创建。只能在堆上创建对象的类要实现这一点&#xff0c;我们需要阻止用户直接实例化对象&#xff0c;而只能通过new操作符创建。class HeapOnly { public:static HeapOnly* create() {return new…

1.1 前端-vue3项目的创建

构建工具先搭好vue3框架 vue2的vue-cli脚手架基于webpack构建工具创建vue的框架. 而在vue3&#xff0c;可以通过vite构建工具创建vue3项目&#xff0c;性能更优。 两者创建方式的区别&#xff1a;cmd命令基于的构建工具vue2/vue3vue create 项目名称&#xff08;或 vue ui图形化…

PHP password_get_info() 函数

password_get_info() 函数用于返回指定散列&#xff08;hash&#xff09;的相关信息。 PHP 版本要求: PHP 5 > 5.5.0, PHP 7 语法 array password_get_info ( string $hash ) 参数说明&#xff1a; $hash: 一个由 password_hash() 创建的散列值。 返回值 返回三个元素…

mac上的app如何自动分类

使用文件夹进行手动分类在Finder中创建文件夹&#xff0c;将同类应用拖入同一文件夹。右键点击Dock上的应用图标&#xff0c;选择「选项」→「在Finder中显示」&#xff0c;可快速定位应用安装位置。利用Launchpad自动分组打开Launchpad&#xff08;触控板四指捏合或按F4键&…

LLM面试题目 3

LLM面试题目 3 什么是自注意力机制(Self-Attention)?为什么它在LLM中很重要?如何评估LLM的性能?LLM面临的挑战有哪些?Transformer和RNN的区别是什么?LLM如何处理多轮对话? 题目讲解 什么是自注意力机制(Self-Attention)?为什么它在LLM中很重要? 自注意力机制是一种…

linux上的软挂载操作方法

针对linux上的软挂载 可以查看linux已经挂载和存储的磁盘分区 df -hfdisk 命令是检索相同信息的另一种方法&#xff0c;可以看到所有的磁盘分区 sudo fdisk -l 要将磁盘分区 /dev/sda1 挂载到 /home/visionx/EXD1 目录 步骤 1&#xff1a;准备工作 1.创建挂载目录&#xff08;如…

SecretFlow 隐语 (2) --- 隐语架构概览

在前边两篇文章中&#xff0c;介绍了数据要素和可信流通相关的内容&#xff0c;以及基于p2p模式的安装方法 SecretFlow 隐语 (1) --- 快速入门 关于在Linux上部署 SecretFlow --- P2P部署模式 由于安装过程中出现意外报错&#xff0c;现已提交issue等待官方技术人员查阅&#x…

PHP语言基础知识(超详细)第二节

二十七. 数组的遍历 1)通过函数进行遍历:(例:demo07) (此方式不能完全遍历数组,需要借助其他功能辅助)(不推荐,了解即可) key():返回数组中当前指针所在位置的键。 current():返回数组中当前指针所在位置的值。 例如:demo07: <?php/*key():返回数组中…

网络--OSPF实验

目录 OSPF实验报告 一、实验拓扑 二、实验要求 三、实验思路 1.IP地址划分 2. OSPF 部署 3. 其它配置 4. 验证测试 四、实验步骤 1.IP 地址配置 2.OSPF 部署 3.其它配置 4.验证测试 OSPF实验报告 一、实验拓扑 二、实验要求 1、R1-R3为区域0&#xff0c;R3-R4为…

Go语言第一个程序--hello world!

文章目录一、Go 语言程序安装二、运行程序三、go mod tidy 命令四、遇到的问题五、VS Code 调试 go 程序的相关配置说明一、Go 语言程序安装 Go语言下载链接&#xff1a;https://studygolang.com/dl 双击打开下一步下一步即可。 验证安装&#xff1a;go version 二、运行程序 创…

【MCU控制 初级手札】1.1 电阻

作者&#xff1a;电控工程手札 本博文内容著作权归作者所有&#xff0c;转载请务必保留本文链接 目录1. 定义2. 电导3. 电阻率4. 电导率5. 伏安特性6. 开路与短路7. 功率8. 应用元件特性&#xff08;端子特性&#xff09;&#xff1a;元件的两个端子的电路物理量之间的代数函数…

JS中async/await功能介绍和使用演示

JS 中 async/await 功能介绍与使用演示 一、功能介绍基本概念 async&#xff1a;用于声明异步函数&#xff0c;返回一个 Promise 对象。即使函数内没有显式返回 Promise&#xff0c;也会隐式将返回值封装为 Promise.resolve()。await&#xff1a;仅能在 async 函数内部使用&…

系统调用入口机制:多架构对比理解(以 ARM64 为主)

&#x1f4d6; 推荐阅读&#xff1a;《Yocto项目实战教程:高效定制嵌入式Linux系统》 &#x1f3a5; 更多学习视频请关注 B 站&#xff1a;嵌入式Jerry 系统调用入口机制&#xff1a;多架构对比理解&#xff08;以 ARM64 为主&#xff09; 本篇内容聚焦于系统调用的入口实现机…

java MultipartFile初始化

在Java中&#xff0c;MultipartFile 是Spring框架中用于处理文件上传的接口。​开发者通常不会直接初始化MultipartFile对象&#xff0c;而是通过Spring MVC的控制器方法参数接收上传的文件。如果需要在测试或模拟场景中创建其实例&#xff0c;可以使用Spring的MockMultipartFi…

Linux C IO多路复用

在上一节利用管道实现了一个简单的聊天室&#xff0c;但这个聊天室有一个很明显的问题就是&#xff0c;当A处于读阻塞情况下是不能向B发送消息的&#xff0c;只有收到B的消息才能发送。如何实现同时既能接受B的消息&#xff0c;又能向其发送消息&#xff1f;很遗憾&#xff0c;…

day21——特殊文件:XML、Properties、以及日志框架

文章目录一、特殊文件概述二、Properties属性文件2.1 文件特点2.2 Properties类解析2.3 写入属性文件三、XML文件详解3.1 XML核心特性3.2 XML解析&#xff08;Dom4J&#xff09;3.3 XML写入3.4 XML约束&#xff08;了解&#xff09;四、日志技术&#xff08;Logback&#xff09…

经典VB与现代VB(VB.NET)

Visual Basic&#xff08;VB&#xff09;目前其发展状态可以分为经典VB&#xff08;VB6及之前&#xff09;​和现代VB&#xff08;VB.NET&#xff09;​两个阶段。经典VB诞生于1991年&#xff0c;凭借​“快速开发&#xff08;Rapid Application Development, RAD&#xff09;”…