链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
12 KiB

6 years ago
6 years ago
6 years ago
  1. <?php
  2. use think\Db;
  3. header("Content-type: text/html; charset=utf-8");
  4. include 'httpclient.php';
  5. define('USER', '13161443713@163.com'); //*必填*:飞鹅云后台注册账号
  6. define('UKEY', 'XsaHzgePdyWTfcMX'); //*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
  7. define('SN', '550510805'); //*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
  8. //以下参数不需要修改
  9. define('IP', 'api.feieyun.cn'); //接口IP或域名
  10. define('PORT', 80); //接口IP端口
  11. define('PATH', '/Api/Open/'); //接口路径
  12. //拼凑订单内容时可参考如下格式
  13. //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
  14. $content = '<CB>测试打印</CB><BR>';
  15. $content .= '名称      单价 数量 金额<BR>';
  16. $content .= '--------------------------------<BR>';
  17. $content .= '饭       10.0 10 100.0<BR>';
  18. $content .= '炒饭      10.0 10 100.0<BR>';
  19. $content .= '蛋炒饭     10.0 10 100.0<BR>';
  20. $content .= '鸡蛋炒饭    10.0 10 100.0<BR>';
  21. $content .= '西红柿炒饭   10.0 10 100.0<BR>';
  22. $content .= '西红柿蛋炒饭  10.0 10 100.0<BR>';
  23. $content .= '西红柿鸡蛋炒饭 10.0 10 100.0<BR>';
  24. $content .= '--------------------------------<BR>';
  25. $content .= '备注:加辣<BR>';
  26. $content .= '合计:xx.0元<BR>';
  27. $content .= '送货地点:广西南宁五象新区<BR>';
  28. $content .= '联系电话:13888888888888<BR>';
  29. $content .= '订餐时间:2014-08-08 08:08:08<BR>';
  30. $content .= '<QR>http://www.feieyun.com</QR>';//把二维码字符串用标签套上即可自动生成二维码
  31. //标签说明:
  32. $content = "<DIRECTION>1</DIRECTION>";//设定打印时出纸和打印字体的方向,n 0 或 1,每次设备重启后都会初始化为 0 值设置,1:正向出纸,0:反向出纸,
  33. $content .= "<TEXT x='9' y='10' font='12' w='1' h='2' r='0'>#001 五号桌 1/3</TEXT><TEXT x='80' y='80' font='12' w='2' h='2' r='0'>可乐鸡翅</TEXT><TEXT x='9' y='180' font='12' w='1' h='1' r='0'>张三先生 13800138000</TEXT>";//40mm宽度标签纸打印例子,打开注释调用标签打印接口打印
  34. /**
  35. * [打印订单接口 Open_printMsg]
  36. * @param [string] $sn [打印机编号sn]
  37. * @param [string] $content [打印内容]
  38. * @param [string] $times [打印联数]
  39. * @return [string] [接口返回值]
  40. */
  41. function printMsg($sn, $content, $times = 1)
  42. {
  43. $time = time(); //请求时间
  44. $msgInfo = array(
  45. 'user' => USER,
  46. 'stime' => $time,
  47. 'sig' => signature($time),
  48. 'apiname' => 'Open_printMsg',
  49. 'sn' => $sn,
  50. 'content' => $content,
  51. 'times' => $times//打印次数
  52. );
  53. $client = new HttpClient(IP, PORT);
  54. if (!$client->post(PATH, $msgInfo)) {
  55. echo 'error';
  56. } else {
  57. //服务器返回的JSON字符串,建议要当做日志记录起来
  58. $result = $client->getContent();
  59. return $result;
  60. }
  61. }
  62. /**
  63. * [批量添加打印机接口 Open_printerAddlist]
  64. * @param [string] $printerContent [打印机的sn#key]
  65. * @return [string] [接口返回值]
  66. */
  67. function printerAddlist($printerContent)
  68. {
  69. $time = time(); //请求时间
  70. $msgInfo = array(
  71. 'user' => USER,
  72. 'stime' => $time,
  73. 'sig' => signature($time),
  74. 'apiname' => 'Open_printerAddlist',
  75. 'printerContent' => $printerContent
  76. );
  77. $client = new HttpClient(IP, PORT);
  78. if (!$client->post(PATH, $msgInfo)) {
  79. echo 'error';
  80. } else {
  81. $result = $client->getContent();
  82. return $result;
  83. }
  84. }
  85. /**
  86. * [批量删除打印机 Open_printerDelList]
  87. * @param [string] $snlist [打印机编号,多台打印机请用减号“-”连接起来]
  88. * @return [string] [接口返回值]
  89. */
  90. function printerDelList($snlist)
  91. {
  92. $time = time(); //请求时间
  93. $msgInfo = array(
  94. 'user' => USER,
  95. 'stime' => $time,
  96. 'sig' => signature($time),
  97. 'apiname' => 'Open_printerDelList',
  98. 'snlist' => $snlist
  99. );
  100. $client = new HttpClient(IP, PORT);
  101. if (!$client->post(PATH, $msgInfo)) {
  102. echo 'error';
  103. } else {
  104. $result = $client->getContent();
  105. return $result;
  106. }
  107. }
  108. /**
  109. * [查询订单是否打印成功接口 Open_queryOrderState]
  110. * @param [string] $orderid [调用打印机接口成功后,服务器返回的JSON中的编号 例如:123456789_20190919163739_95385649]
  111. * @return [string] [接口返回值]
  112. */
  113. function queryOrderState($orderid)
  114. {
  115. $time = time(); //请求时间
  116. $msgInfo = array(
  117. 'user' => USER,
  118. 'stime' => $time,
  119. 'sig' => signature($time),
  120. 'apiname' => 'Open_queryOrderState',
  121. 'orderid' => $orderid
  122. );
  123. $client = new HttpClient(IP, PORT);
  124. if (!$client->post(PATH, $msgInfo)) {
  125. echo 'error';
  126. } else {
  127. $result = $client->getContent();
  128. return $result;
  129. }
  130. }
  131. /**
  132. * [signature 生成签名]
  133. * @param [string] $time [当前UNIX时间戳,10位,精确到秒]
  134. * @return [string] [接口返回值]
  135. */
  136. function signature($time)
  137. {
  138. return sha1(USER . UKEY . $time);//公共参数,请求公钥
  139. }
  140. function FeiePrint($order_num)
  141. {
  142. $data = DB::table('ims_cjdc_order_main')
  143. ->alias('m')
  144. ->join(['ims_cjdc_order'=>'o'],'o.order_main_id = m.id','inner')
  145. ->join(['ims_cjdc_order_goods'=>'g'],'o.id = g.order_id','inner')
  146. ->join(['ims_cjdc_feprint'=>'f'],'m.market_id = f.market_id','inner')
  147. ->join(['ims_cjdc_store'=>'s'],'s.id = o.store_id','inner')
  148. //->distinct(true)
  149. ->where('m.order_num',$order_num)
  150. ->field("o.note as o_note,g.name,g.number,g.money,g.good_unit,m.delivery_time as ps_time,m.address,m.note,m.name as user_name,m.dada_fee,m.money as m_money,m.yhq_money2,m.box_money,f.sn,m.tel,m.order_num,g.id,g.spec,s.name as shopname")
  151. ->order('s.id')
  152. ->select();
  153. // $order_goods = Db::table('ims_cjdc_order_goods')->where('order_id', $order_main['id'])->field("name,number,money")->select();
  154. // $sn = Db::table('ims_cjdc_feprint')->where('market_id', $order_main['market_id'])->value("sn");
  155. $content = PrintFormat($data, 14, 6, 3, 6);
  156. $res = printMsg($data[0]['sn'], $content, 1);
  157. return ($res);
  158. }
  159. function PrintFormat($arr, $A, $B, $C, $D)
  160. {
  161. $orderInfo = '<CB>懒族生活</CB><BR>';
  162. $orderInfo .= '名称 单价 数量 金额<BR>';
  163. $orderInfo .= '--------------------------------<BR>';
  164. $shopname = "";
  165. $shopnum = 0;
  166. foreach ($arr as $k5 => $v5) {
  167. if ($shopname != $v5['shopname']) {
  168. if ($shopname != "") {
  169. $orderInfo .= ' <BR>';
  170. }
  171. $shopnum++;
  172. $orderInfo .= "<C>(" . $shopnum . ")" .$v5['shopname'] . '</C><BR>';
  173. $shopname = $v5['shopname'];
  174. }
  175. $name = $v5['name'];
  176. if(!empty($v5['spec'])) {
  177. $name .= "(规格:". $v5['spec'].")";
  178. }elseif (!empty($v5['good_unit'])){
  179. $name .= "(规格:". $v5['good_unit'].")";
  180. }
  181. $price = $v5['money'];
  182. $num = $v5['number'];
  183. $prices = sprintf("%.2f",$v5['money']*$v5['number']);
  184. $kw3 = '';
  185. $kw1 = '';
  186. $kw2 = '';
  187. $kw4 = '';
  188. $str = $name;
  189. $blankNum = $A;//名称控制为14个字节
  190. $lan = mb_strlen($str,'utf-8');
  191. $m = 0;
  192. $j=1;
  193. $blankNum++;
  194. $result = array();
  195. if(strlen($price) < $B){
  196. $k1 = $B - strlen($price);
  197. for($q=0;$q<$k1;$q++){
  198. $kw1 .= ' ';
  199. }
  200. $price = $kw1.$price;
  201. }
  202. if(strlen($num) < $C){
  203. $k2 = $C - strlen($num);
  204. for($q=0;$q<$k2;$q++){
  205. $kw2 .= ' ';
  206. }
  207. $num = $kw2.$num;
  208. }
  209. if(strlen($prices) < $D){
  210. $k3 = $D - strlen($prices);
  211. for($q=0;$q<$k3;$q++){
  212. $kw4 .= ' ';
  213. }
  214. $prices = $kw4.$prices;
  215. }
  216. for ($i=0;$i<$lan;$i++){
  217. $new = mb_substr($str,$m,$j,'utf-8');
  218. $j++;
  219. if(mb_strwidth($new,'utf-8')<$blankNum) {
  220. if($m+$j>$lan) {
  221. $m = $m+$j;
  222. $tail = $new;
  223. $lenght = iconv("UTF-8", "GBK//IGNORE", $new);
  224. $k = $A - strlen($lenght);
  225. for($q=0;$q<$k;$q++){
  226. $kw3 .= ' ';
  227. }
  228. if($m==$j){
  229. $tail .= $kw3.' '.$price.' '.$num.' '.$prices;
  230. }else{
  231. $tail .= $kw3.'<BR>';
  232. }
  233. break;
  234. }else{
  235. $next_new = mb_substr($str,$m,$j,'utf-8');
  236. if(mb_strwidth($next_new,'utf-8')<$blankNum) continue;
  237. else{
  238. $m = $i+1;
  239. $result[] = $new;
  240. $j=1;
  241. }
  242. }
  243. }
  244. }
  245. $head = '';
  246. foreach ($result as $key=>$value) {
  247. if($key < 1){
  248. $v_lenght = iconv("UTF-8", "GBK//IGNORE", $value);
  249. $v_lenght = strlen($v_lenght);
  250. if($v_lenght == 13) $value = $value." ";
  251. $head .= $value.' '.$price.' '.$num.' '.$prices;
  252. }else{
  253. $head .= $value.'<BR>';
  254. }
  255. }
  256. $orderInfo .= $head.$tail;
  257. if(!empty($v5['o_note'])){
  258. $orderInfo .= '备注:'.$v5['o_note'].'<BR>';
  259. }
  260. @$nums += $prices;
  261. }
  262. // $time = date('Y-m-d H:i:s', time());
  263. $orderInfo .= '--------------------------------<BR>';
  264. if ($arr[0]['box_money'] > 0) {
  265. $kw5 = '';
  266. $len = 24 - strlen($arr[0]['box_money']);
  267. for ($q = 0; $q < $len; $q++) {
  268. $kw5 .= ' ';
  269. }
  270. $orderInfo .= '包装费:' . $kw5 . $arr[0]['box_money'] . '<BR>';
  271. }
  272. if($arr[0]['dada_fee'] > 0){
  273. $kw5 = '';
  274. $len = 24 - strlen($arr[0]['dada_fee']);
  275. for ($q = 0; $q < $len; $q++) {
  276. $kw5 .= ' ';
  277. }
  278. $orderInfo .= '配送费:'.$kw5.$arr[0]['dada_fee'].'<BR>';
  279. }
  280. if($arr[0]['yhq_money2'] > 0){
  281. $yhq_money2 = sprintf("%.2f",$arr[0]['yhq_money2']);
  282. $kw6 = '';
  283. $len = 25 - strlen($yhq_money2);
  284. for ($q = 0; $q < $len; $q++) {
  285. $kw6 .= ' ';
  286. }
  287. $orderInfo .= '红包:'.$kw6.'-'.$yhq_money2.'<BR>';
  288. }
  289. $total = '合计:'.$arr[0]['m_money'];
  290. $user_name = $arr[0]['user_name'];
  291. if(strlen($user_name)>18){
  292. $user_name=substr($user_name,0,18).'...';
  293. }
  294. $str = $user_name . $total;
  295. $kw5 = '';
  296. $lenght = iconv("UTF-8", "GBK//IGNORE", $str);
  297. $total_len = 32 - strlen($lenght);
  298. for ($q = 0; $q < $total_len; $q++) {
  299. $kw5 .= ' ';
  300. }
  301. $total_str = $user_name.$kw5.$total;
  302. $orderInfo .= $total_str.'<BR>';
  303. $orderInfo .= '送货地点:' . $arr[0]['address'] . '<BR>';
  304. $tel = substr_replace( $arr[0]['tel'], '****', 3, 4);
  305. $orderInfo .= '联系电话:' . $tel . '<BR>';
  306. $orderInfo .= '配送时间:' . $arr[0]['ps_time'] . '<BR>';
  307. if(!empty($arr[0]['note'])){
  308. $orderInfo .= '备注:'.$arr[0]['note'].'<BR><BR>';
  309. }
  310. //$orderInfo .= '<QR>http://www.feieyun.com</QR>';//把解析后的二维码生成的字符串用标签套上即可自动生成二维码
  311. return $orderInfo;
  312. }
  313. ?>