package com.yijia.station.utils; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; import java.util.List; /*** * FeiEPrinterUtil * 飞鹅打印机工具类 * @date 2021年1月17日 * @Author JK */ public class FeiEPrinterUtil { private static Logger logger =(Logger) LoggerFactory.getLogger(FeiEPrinterUtil.class); /*飞鹅后台管理登录账号 账号:79800875@qq.com 密码:jk18654585051 */ public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改 public static final String USER = "79800875@qq.com";//*必填*:账号名 public static final String UKEY = "ScyIqKvntVSJkWhz";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】 //public static final String SN = "*********";//*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API /* * //================================小票打印功能===========================================// * ***返回值JSON字符串*** * 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5} * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5} * @param sn * @return */ public static String printReceipt(String sn, String content){ //标签说明: //单标签: //"
"为换行,""为切刀指令(主动切纸,仅限切刀打印机使用才有效果) //""为打印LOGO指令(前提是预先在机器内置LOGO图片),""为钱箱或者外置音响指令 //成对标签: //""为居中放大一倍,""为放大一倍,""为居中,字体变高一倍 //字体变宽一倍,""为二维码,""为字体加粗,""为右对齐 //拼凑订单内容时可参考如下格式 //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式 //String content; // content = "测试打印
"; // content += "名称      单价 数量 金额
"; // content += "--------------------------------
"; // content += "饭       1.0 1 1.0
"; // content += "炒饭      10.0 10 10.0
"; // content += "蛋炒饭     10.0 10 100.0
"; // content += "鸡蛋炒饭    100.0 1 100.0
"; // content += "番茄蛋炒饭   1000.0 1 100.0
"; // content += "西红柿蛋炒饭  1000.0 1 100.0
"; // content += "西红柿鸡蛋炒饭 100.0 10 100.0
"; // content += "备注:加辣
"; // content += "--------------------------------
"; // content += "合计:xx.0元
"; // content += "送货地点:广州市南沙区xx路xx号
"; // content += "联系电话:13888888888888
"; // content += "订餐时间:2016-08-08 08:08:08
"; // content += "http://www.dzist.com"; //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(30000)//读取超时 .setConnectTimeout(30000)//连接超时 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("user",USER)); String STIME = String.valueOf(System.currentTimeMillis()/1000); nvps.add(new BasicNameValuePair("stime",STIME)); nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); nvps.add(new BasicNameValuePair("apiname","Open_printMsg"));//固定值,不需要修改 nvps.add(new BasicNameValuePair("sn",sn)); nvps.add(new BasicNameValuePair("content",content)); nvps.add(new BasicNameValuePair("times","1"));//打印联数 CloseableHttpResponse response = null; String result = null; try { post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); if(statecode == 200){ HttpEntity httpentity = response.getEntity(); if (httpentity != null){ //服务器返回的JSON字符串,建议要当做日志记录起来 result = EntityUtils.toString(httpentity); logger.info("小票打印功能返回结果信息:" +result); } } } catch (Exception e) { e.printStackTrace(); } finally{ try { if(response!=null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { post.abort(); } catch (Exception e) { e.printStackTrace(); } try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /* * //================================查询某订单是否打印成功=====================================// * ***返回值JSON字符串*** * 成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":2}//data:true为已打印,false为未打印 * 失败:{"msg":"错误描述","ret":非0, "data":null,"serverExecutedTime":7} * @param orderid * @return */ public static String queryOrderState(String orderid){ //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(30000)//读取超时 .setConnectTimeout(30000)//连接超时 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("user",USER)); String STIME = String.valueOf(System.currentTimeMillis()/1000); nvps.add(new BasicNameValuePair("stime",STIME)); nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); nvps.add(new BasicNameValuePair("apiname","Open_queryOrderState"));//固定值,不需要修改 nvps.add(new BasicNameValuePair("orderid",orderid)); CloseableHttpResponse response = null; String result = null; try { post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); if(statecode == 200){ HttpEntity httpentity = response.getEntity(); if (httpentity != null){ //服务器返回 result = EntityUtils.toString(httpentity); logger.info("查询某订单是否打印成功信息:" + result); } } } catch (Exception e){ e.printStackTrace(); } finally{ try { if(response!=null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { post.abort(); } catch (Exception e) { e.printStackTrace(); } try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /* * //=====================查询指定打印机某天的订单详情==========================// * ***返回值JSON字符串*** * 成功:{"msg":"ok","ret":0,"data":{"print":6,"waiting":1},"serverExecutedTime":9}//print已打印,waiting为打印 * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5} * @param sn * @param strdate * @return */ public static String queryOrderInfoByDate(String sn,String strdate){ //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(30000)//读取超时 .setConnectTimeout(30000)//连接超时 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("user",USER)); String STIME = String.valueOf(System.currentTimeMillis()/1000); nvps.add(new BasicNameValuePair("stime",STIME)); nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); nvps.add(new BasicNameValuePair("apiname","Open_queryOrderInfoByDate"));//固定值,不需要修改 nvps.add(new BasicNameValuePair("sn",sn)); nvps.add(new BasicNameValuePair("date",strdate));//yyyy-MM-dd格式 CloseableHttpResponse response = null; String result = null; try{ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); if(statecode == 200){ HttpEntity httpentity = response.getEntity(); if (httpentity != null){ //服务器返回 result = EntityUtils.toString(httpentity); logger.info("查询指定打印机某天的订单详情: "+result); } } } catch (Exception e){ e.printStackTrace(); } finally{ try { if(response!=null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { post.abort(); } catch (Exception e) { e.printStackTrace(); } try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /* * //=====================查询打印机的状态==============================// * ***返回值JSON字符串*** * 成功:{"msg":"ok","ret":0,"data":"状态","serverExecutedTime":4} * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5} * @param sn * @return */ public static String queryPrinterStatus(String sn){ //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(30000)//读取超时 .setConnectTimeout(30000)//连接超时 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("user",USER)); String STIME = String.valueOf(System.currentTimeMillis()/1000); nvps.add(new BasicNameValuePair("stime",STIME)); nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); nvps.add(new BasicNameValuePair("apiname","Open_queryPrinterStatus"));//固定值,不需要修改 nvps.add(new BasicNameValuePair("sn",sn)); CloseableHttpResponse response = null; String result = null; try{ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); if(statecode == 200){ HttpEntity httpentity = response.getEntity(); if (httpentity != null){ //服务器返回 result = EntityUtils.toString(httpentity); logger.info("查询打印机的状态: "+result); } } } catch (Exception e){ e.printStackTrace(); } finally{ try { if(response!=null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { post.abort(); } catch (Exception e) { e.printStackTrace(); } try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /* * //==================添加打印机接口(支持批量)================== * //***返回值JSON字符串*** * //正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3} * //错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37} * * //提示:打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100行(台)。 * // String snlist = "sn1#key1#remark1#carnum1\nsn2#key2#remark2#carnum2"; * // String method = addprinter(snlist); * // System.out.println(method); * @param snlist * @return */ public static String addprinter(String snlist){ //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(30000)//读取超时 .setConnectTimeout(30000)//连接超时 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("user",USER)); String STIME = String.valueOf(System.currentTimeMillis()/1000); nvps.add(new BasicNameValuePair("stime",STIME)); nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); nvps.add(new BasicNameValuePair("apiname","Open_printerAddlist"));//固定值,不需要修改 nvps.add(new BasicNameValuePair("printerContent",snlist)); CloseableHttpResponse response = null; String result = null; try{ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); if(statecode == 200){ HttpEntity httpentity = response.getEntity(); if (httpentity != null){ result = EntityUtils.toString(httpentity); logger.info("添加打印机接口: " + result); } } } catch (Exception e){ e.printStackTrace(); } finally{ try { if(response!=null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { post.abort(); } catch (Exception e) { e.printStackTrace(); } try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /* * 生成签名字符串 * @param USER * @param UKEY * @param STIME * @return */ private static String signature(String USER,String UKEY,String STIME){ String s = DigestUtils.sha1Hex(USER+UKEY+STIME); return s; } }