目錄
- 說明
- 效果圖
- 實作步驟
- 公共引數
- 添加列印機
- 洗掉列印機
- 列印小票
- SHA-1加密字串
- Bytes陣列轉換為字串
說明
因公司需求,需要實作連接WiFi列印機進行列印,很多年還沒有WiFi的時候做過藍牙列印機,真實難為我了,廢話不多說,開始吧!
效果圖

實作步驟
1:平臺創建賬號并認證:https://admin.feieyun.com/index.php 審核通過后就會得到相應的USER和UKEY,后面會用到
2:對接相應API:API官方檔案自家看
公共引數
public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
public static final String USER = "*********";//*必填*:賬號名
public static final String UKEY = "*********";//*必填*: 飛鵝云后臺注冊賬號后生成的UKEY 【備注:這不是填列印機的KEY】
public static final String SN = "*********";//*必填*:列印機編號,必須要在管理后臺里添加列印機或呼叫API介面添加之后,才能呼叫API
//列印機編號(必填) # 列印機識別碼(必填) # 備注名稱(選填) # 流量卡號碼(選填),多臺列印機請換行(\n)添加新列印機資訊,每次最多100臺,
//特別說明:列印機識別碼就是列印機底座的key
String snlist="*******# *******# 拼必達列印機 # *******";
添加列印機
/**
* 添加列印機方法
* @param snlist
*/
public void rightDatelist(String snlist){
//獲取當前時間戳
String STIME = String.valueOf(System.currentTimeMillis()/1000);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//以表單形式 post方式提交的資料
FormBody formBody = new FormBody.Builder()
.add("user", USER)//飛鵝云后臺注冊用戶名,
.add("stime", STIME)//當前UNIX時間戳,10位,精確到秒,
.add("sig", getSHA(USER+UKEY+STIME))//對引數 user+UKEY+stime拼接后(+號表示連接符)進行SHA1加密得到簽名,加密后簽名值為40位小寫字串,
.add("apiname", "Open_printerAddlist")//請求的介面名稱:Open_printerAddlist
.add("debug", "0")//debug=1回傳非json格式的資料,僅測驗時候使用,
.add("printerContent", snlist)//列印機編號(必填) # 列印機識別碼(必填) # 備注名稱(選填) # 流量卡號碼(選填),多臺列印機請換行(\n)添加新列印機資訊,每次最多100臺,
.build();
final Request request = new Request.Builder()
.url(URL)//請求的url
.post(formBody)
.build();
//創建/Call
Call call = okHttpClient.newCall(request);
//加入佇列 異步操作
call.enqueue(new Callback() {
//請求錯誤回呼方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("添加失敗"+e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()==200) {
System.out.println("添加成功"+response.body().string());
}
}
});
}
洗掉列印機
/**
* 洗掉列印機
* @param
*/
public void rightDatelistDc(){
//獲取當前時間戳
String STIME = String.valueOf(System.currentTimeMillis()/1000);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//post方式提交的資料
FormBody formBody = new FormBody.Builder()
.add("user", USER)//飛鵝云后臺注冊用戶名,
.add("stime", STIME)//當前UNIX時間戳,10位,精確到秒,
.add("sig", getSHA(USER+UKEY+STIME))//對引數 user+UKEY+stime拼接后(+號表示連接符)進行SHA1加密得到簽名,加密后簽名值為40位小寫字串,
.add("apiname", "Open_printerDelList")//請求的介面名稱:Open_printerAddlist
.add("debug", "0")//debug=1回傳非json格式的資料,僅測驗時候使用,
.add("snlist", SN)//列印機編號,多臺列印機請用減號“-”連接起來,
.build();
final Request request = new Request.Builder()
.url(URL)//請求的url
.post(formBody)
.build();
//創建/Call
Call call = okHttpClient.newCall(request);
//加入佇列 異步操作
call.enqueue(new Callback() {
//請求錯誤回呼方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("洗掉失敗");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()==200) {
System.out.println("洗掉成功"+response.body().string());
}
}
});
}
列印小票
/**
* 列印機列印訂單
* @param
*/
public void rightDatelistDy(){
String content;
content = "<CB>安卓測驗列印</CB><BR>";
content += "名稱 單價 數量 金額<BR>";
content += "--------------------------------<BR>";
content += "飯 1.0 1 1.0<BR>";
content += "炒飯 10.0 10 10.0<BR>";
content += "蛋炒飯 10.0 10 100.0<BR>";
content += "雞蛋炒飯 100.0 1 100.0<BR>";
content += "番茄蛋炒飯 1000.0 1 100.0<BR>";
content += "西紅柿蛋炒飯 1000.0 1 100.0<BR>";
content += "西紅柿雞蛋炒飯 100.0 10 100.0<BR>";
content += "備注:加辣<BR>";
content += "--------------------------------<BR>";
content += "合計:10000.0元<BR>";
content += "送貨地點:貴州易榮德尚<BR>";
content += "聯系電話:17385159420<BR>";
content += "訂餐時間:2021-08-04 08:08:08<BR>";
// content += "<QR>http://www.dzist.com</QR>";
String STIME = String.valueOf(System.currentTimeMillis()/1000);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//post方式提交的資料
FormBody formBody = new FormBody.Builder()
.add("user", USER)//飛鵝云后臺注冊用戶名
.add("stime", STIME)//當前UNIX時間戳,10位,精確到秒,
// .add("backurl","http://mini.llskj.cn/feieyun_verify_pWEenZ263Q1BzvXC.txt")//必須先在管理后臺設定,回呼資料格式詳見《訂單狀態回呼》
// .add("expired",zeroMillis+"")//訂單失效UNIX時間戳,10位,精確到秒,列印時超過該時間該訂單將拋棄不列印,取值范圍為:當前時間<訂單失效時間≤24小時后,
.add("sig", getSHA(USER+UKEY+STIME))//對引數 user+UKEY+stime拼接后(+號表示連接符)進行SHA1加密得到簽名,加密后簽名值為40位小寫字串,
.add("apiname", "Open_printMsg")//請求的介面名稱
.add("sn", SN)//列印機編號
.add("content", content)//列印內容,不能超過5000位元組
.add("times","1")//列印次數
.build();
final Request request = new Request.Builder()
.url(URL)//請求的url
.post(formBody)
.build();
System.out.println("列印機編號:"+SN);
//創建/Call
Call call = okHttpClient.newCall(request);
//加入佇列 異步操作
call.enqueue(new Callback() {
//請求錯誤回呼方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("列印失敗");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()==200) {
System.out.println("列印成功"+response.body().string());
}
}
});
}
SHA-1加密字串
/**
* SHA-1加密字串
*
* @param info
* @return
*/
public static String getSHA(String info) {
byte[] bytesSHA = null;
try {
// 得到一個SHA-1的訊息摘要
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
// 添加要進行計算摘要的資訊
messageDigest.update(info.getBytes());
// 得到該摘要
bytesSHA = messageDigest.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
String strSHA = byteToHex(bytesSHA);
return strSHA;
}
Bytes陣列轉換為字串
/**
* Bytes陣列轉換為字串
*
* @param bytes
* @return
*/
private static String byteToHex(byte[] bytes) {
String hs = "";
String temp;
for (byte b : bytes) {
temp = (Integer.toHexString(b & 0XFF));
if (temp.length() == 1) {
hs = hs + "0" + temp;
} else {
hs = hs + temp;
}
}
return hs;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/293646.html
標籤:其他
