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