外卖云打印机开放平台接口的 Java 封装。
如果需要支持统一形式的调用,可以考虑采用聚合接口:https://github.com/xesam/cloud-printing
- 芯烨;
- 飞鹅;
- 商鹏。
注意:这些厂商各自都有常规打印机与云打印机系列,只有云打印机型号才被支持
默认实现依赖 httpclient5(发送Http请求) 和 jackson(序列化Map为JSON)。
以 maven 为例:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
</dependencies>
ApiAuth apiAuth = new ApiAuth("this is your appid", "this is your secret");
这一步不是必须的,你也可以直接把签名参数放到接口的对应字段去,也就是略微麻烦一点而已。
使用 ApiAuth 的方式:
ApiHttpClient apiClient = new FeieApiHttpClient(apiAuth); // 飞鹅
ApiHttpClient apiClient = new XpyunApiHttpClient(apiAuth); // 芯烨
ApiHttpClient apiClient = new SpyunApiHttpClient(apiAuth); // 商鹏
不使用 ApiAuth 的方式:
ApiHttpClient apiClient = new FeieApiHttpClient(); // 飞鹅
ApiHttpClient apiClient = new XpyunApiHttpClient(); // 芯烨
ApiHttpClient apiClient = new SpyunApiHttpClient(); // 商鹏
以打印接口为例,注意不同平台使用的参数不同。
飞鹅,如果你在创建 ApiHttpClient 的时候使用了 apiAuth,那么在发送请求参数的时候可以不传入签名参数:
Map<String, Object> data = new HashMap<String, Object>() {{
put("backurl", "this_is_backurl");
put("expired", 86400);
put("sn", "this_is_sn");
put("content", "this_is_content");
put("times", 1);
}};
ApiResponse res = testApiClient.printMsgOrder(data);
if(res.isSuccess()){
System.out.println(res.getValue());
}else{
res.getException().printStackTrace();
}
提示:如果 testApiClient 在创建的时候没有使用 apiAuth,那么就需要在 data 中显式传入签名信息
飞鹅,如果你在创建 ApiHttpClient 的时候没有传入 apiAuth,那么你就需要手动添加签名参数到具体的请求参数中:
Map<String, Object> data = new HashMap<String, Object>() {{
put("backurl", "this_is_backurl");
put("expired", 86400);
put("sn", "this_is_sn");
put("content", "this_is_content");
put("times", 1);
put("stime", "this is your stime"); //显式传入 stime
put("user", "this is your user"); //显式传入 user
put("sig", "this is your sig"); //显式传入 sig
}};
ApiResponse res = testApiClient.printMsgOrder(data);
if(res.isSuccess()){
System.out.println(res.getValue());
}else{
res.getException().printStackTrace();
}
芯烨:
Map<String, Object> data = new HashMap<String, Object>() {{
put("sn", "this_is_sn");
put("content", "this_is_content");
put("copies", 1);
put("backurlFlag", 1);
put("cutter", 1);
put("voice", 1);
put("mode", 1);
put("expiresIn", 86400);
put("payType", 41);
put("payMode", 59);
put("money", 22);
}};
ApiResponse res = testApiClient.printMsgOrder(data);
if(res.isSuccess()){
System.out.println(res.getValue());
}else{
res.getException().printStackTrace();
}
商鹏:
Map<String, Object> mapData = new HashMap<String, Object>() {{
put("sn", "this_is_sn");
put("content", "this_is_content");
put("times", 1);
}};
ApiResponse res = testApiClient.printMsgOrder(data);
if(res.isSuccess()){
System.out.println(res.getValue());
}else{
res.getException().printStackTrace();
}
具体接口参见:ApiHttpClient.java
服务端打印回调 差异:
平台差异 | 飞鹅 | 商鹏云 | 芯烨云 |
---|---|---|---|
服务器回调 | 支持 | 不支持 | 支持 |
常规接口 差异:
接口 | 飞鹅 | 商鹏云 | 芯烨云 |
---|---|---|---|
打印小票 | 支持 | 支持 | 支持 |
打印标签 | 支持 | 不支持 | 支持 |
打印超时 | 支持接口配置,最长24小时 | 固定48小时 | 支持接口配置,最长24小时 |
添加设备 | 支持 | 支持 | 支持 |
删除设备 | 支持 | 支持 | 支持 |
修改设备 | 支持 | 支持 | 支持 |
查询订单 | 支持 | 支持 | 支持 |
清空订单 | 支持 | 支持 | 支持 |
修改声音 | 不支持 | 支持 | 支持 |
配置切刀 | 不支持 | 支持 | 不支持 |
如果需要替换 httpclient5 或者 jackson,直接通过构造方法替换 ApiHttpEngine 即可。
ApiHttpEngine customEngine = new CustomApiHttpEngine();
ApiHttpClient apiClient = new FeieApiHttpClient(apiAuth, customEngine); // 飞鹅
ApiHttpClient apiClient = new XpyunApiHttpClient(apiAuth, customEngine); // 芯烨
ApiHttpClient apiClient = new SpyunApiHttpClient(apiAuth, customEngine); // 商鹏
- Api 请求封装;