Impresora WiFi Android Flying Goose

ilustrar

Por necesidades de la empresa es necesario conectarse a una impresora WiFi para imprimir. Llevo muchos años trabajando en una impresora Bluetooth sin WiFi. Es realmente difícil para mí. ¡Empecemos sin decir tonterías!

representaciones

inserte la descripción de la imagen aquí

Pasos de implementación

1: Cree una cuenta en la plataforma y autentíquese: https://admin.feieyun.com/index.php Después de pasar la revisión, obtendrá el USUARIO y UKEY correspondientes, que se utilizarán más adelante
2: Conéctese a la API correspondiente : lea usted mismo la documentación oficial de la API

parámetro público

    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="*******# *******# 拼必达打印机 # *******";

agregar impresora

      /**
     * 添加打印机方法
     * @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());
                }
            }
        });
    }

eliminar impresora

 /**
     * 删除打印机
     * @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());
                }
            }
        });
    }

Imprima el recibo

    /**
     * 打印机打印订单
     * @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());
                }
            }
        });
    }

Cadena cifrada 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;
    }

Convertir matriz de bytes en cadena

    /**
     * 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;
    }

Supongo que te gusta

Origin blog.csdn.net/Android_Cll/article/details/119612244
Recomendado
Clasificación