芯烨云打印机之Java对接示例

1、添加打印机到开发者账户(可批量)
功能描述:
批量添加打印机,请严格参照请求格式说明。
请求接口:
https://open.xpyun.net/api/openapi/xprinter/addPrinters
请求方式:
POST
公共参数:
所有请求都必须传递的参数

sign 参数说明:
例如:user=acc、UserKEY=abc、timestamp=acbc,那么先拼成字符串 accabcacbc,再将此 字符串进行 SHA1 加密,得到 sign。

私有参数:

返回参数说明:


请求示例:

{
    "items":[
        {
            "sn":"XPY123456789A",
            "name":"X58A"
        },
        {
            "sn":"XPY987654321B",
            "name":"X58B"
        },
        {
            "sn":"XPY123456723A",
            "name":"X58C"
        },
        {
            "sn":"XPY987654345B",
            "name":"X58D"
        }
    ],
    "user":"testuser@google.com",
    "timestamp":"1565417654",
    "sign":"82bdcbe2cf6ac4923339b13c2aad1f95ddf0b0a8",
    "debug":"0"
}

返回示例:
示例解读:总共添加 4 台打印机设备,添加成功 2 台,添加失败 2 台,失败原因可通过 failMsg 字段的原 因代码。
成功:

{
    "msg":"ok",
    "code":0,
    "data":{
        "success":[
            "XPY123456789A",
            "XPY987654321B"
        ],
        "fail":[
            "XPY123456723A",
            " XPY987654345B"
        ],
        "failMsg":[
            "XPY123456723A:1010",
            "XPY987654345B:1010"
        ]
    },
    "serverExecutedTime":1
}

失败:

{
    "msg":"REQUEST_USER_NOT_REGISTER",
    "code":-4,
    "data":null,
    "serverExecutedTime":1
}

特别注意:
开发者自己写的请求以表单方式提交数据,请求头需要使用 Content-Type: application/json;c harset=UTF-8,请勿使用其它方式提交数据。
特别声明:
1、API 接口同时支持 https 和 http 两种方式请求,推荐使用 https 方式,为了便于升级维 护,建议采用服务后台对接云打印
2、API 请求的参数包含 2 部分:公共参数和私有参数,详情请看对应 API 接口说明。
3、API 请求和返回结果皆为 json 格式数据。

Java测试类:

package com.print;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author QiaoChu
 */
@SpringBootTest
@Slf4j
public class PrintTest {
    /**
     * 开发者ID
     */
    private static final String USER_ID = "123456@qq.com";
    /**
     * 开发者密钥
     */
    private static final String USER_KEY = "e10adc3949ba59abbe56e057f20f883e";
    /**
     * 请求URL
     */
    private static String API_PREFIX = "https://open.xpyun.net/api/openapi/xprinter/";

    @Test
    //@Disabled
    public void printTest() {
        // 当前 UNIX 时间戳,10 位,精确到秒
        long stime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
        String timestamp = String.valueOf(stime);
        String originContext = USER_ID + USER_KEY + timestamp;
        /*
         * 对参数 user + UserKEY + timestamp 拼接后(+号表示连接符)进
         * 行 SHA1 加密得到签名,值为 40 位小写字符串,其
         * 中 UserKEY 为用户开发者密
         */
        String sign = DigestUtils.sha1Hex(originContext);
        //请求地址
        String url = API_PREFIX + "addPrinters";
        //公共参数 存放参数
        Map<String, Object> mapJson = new HashMap<>();
        mapJson.put("user", USER_ID);
        mapJson.put("timestamp", timestamp);
        mapJson.put("sign", sign);
        mapJson.put("debug", 0);

        //私有参数 方式一
        List<PrinterItem> printerItemList = new ArrayList<>();
        PrinterItem printerItem1 = new PrinterItem();
        printerItem1.setSn("XPY123456789A");
        printerItem1.setName("X58A");
        printerItemList.add(printerItem1);

        PrinterItem printerItem2 = new PrinterItem();
        printerItem2.setSn("XPY987654321B");
        printerItem2.setName("X58B");
        printerItemList.add(printerItem2);

        PrinterItem printerItem3 = new PrinterItem();
        printerItem3.setSn("XPY123456723A");
        printerItem3.setName("X58C");
        printerItemList.add(printerItem3);

        PrinterItem printerItem4 = new PrinterItem();
        printerItem4.setSn("XPY987654345B");
        printerItem4.setName("X58D");
        printerItemList.add(printerItem4);
        mapJson.put("items", printerItemList.toArray());

        //私有参数 方式二
        PrinterItem[] printerItems = {
                new PrinterItem("XPY123456789A", "X58A"),
                new PrinterItem("XPY987654321B", "X58B"),
                new PrinterItem("XPY123456723A", "X58C"),
                new PrinterItem("XPY987654345B", "X58D"),
        };
        mapJson.put("items", printerItems);

        //存放请求头,可以存放多个请求头
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json;charset=UTF-8");
        //发送post请求并接收响应数据
        log.info("请求参数信息:[{}]", JSON.toJSONString(mapJson));
        String result = HttpUtil.createPost(url).addHeaders(headers).form(mapJson).execute().body();
        log.info("请求结果信息:[{}]", JSON.toJSONString(result));
    }

    /**
     * 添加打印机到开发者账户
     * 请求参数封装
     */
    private static class PrinterItem {
        private String sn;
        private String name;

        PrinterItem() {

        }

        PrinterItem(String sn, String name) {
            this.name = name;
            this.sn = sn;
        }

        public String getSn() {
            return sn;
        }

        public void setSn(String sn) {
            this.sn = sn;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值