平台介绍
平台简介
商鹏云打印开放平台,为开发者提供各行业的云打印解决方案,致力于成为国内最安全、稳定的云打印服务平台。
平台日均打印小票超过一百万,云打印解决方案可以有效提升商家经营效率、降低经营成本、提升市场竞争力、提高消费者的服务体验。
商鹏云打印开放平台提供完善的API开发文档以及示例,还有免费的技术支持服务。
接入商鹏云打印开放平台,让你的应用马上具备云打印功能,随时随地打印,不受距离限制。
开放平台运营管理规则
1.相关定义
商鹏云打印开放平台:商鹏云打印开放平台(以下简称“开放平台”),商鹏,为第三方提供:技术文档、应用程序等相关服务,帮助其使用商鹏云打印服务。
第三方:指与开放平台合作的任何第三方,包括但不限于个人开发者、企业开发者、以及个人或企业开发者的关联公司、合作方。
2.开放平台接入流程
接入指南
第一步:注册(开发者的账号密码具有唯一性,开发者需对账号下的一切操作承担全部责任与法律后果);
第二步:阅读并确认了解《商鹏云打印开放平台服务条款》;
第三步:完善第三方信息;
第四步:根据接口文档进行开发;
第五步:开发测试;
第六步:上线;
3.免责声明
条款
(1)对于使用了开放平台提供服务的第三方,必须遵守法律法规,如有违反,第三方同意独立承担所有的风险和后果。
(2)第三方将使用了开放平台提供服务后的系统提供给最终用户使用时,应充分告知其相关注意事项。因任何人使用第三方开发或运营的系统所产生的任何问题、事故或纠纷,均由第三方自行承担全部责任,开放平台对此不承担责任。
(3)开放平台因本条前述事由受到损失或者被要求承担责任的,有权要求相应第三方赔偿开放平台因此受到的损失和/或要求该开发者承担相关责任。
开发者接入API步骤如下,更多详情请加入: 商鹏云QQ 2群:686838578 (新群)
第一步:注册开发者账号
到 http://developer.spyun.net (以下统称‘商鹏云管理后台’)注册开发者账号。
第二步:对接API
注意:必须先调用添加打印机接口,然后才能调用打印接口进行打印。所有API接口都是https协议
第三步:测试打印
测试打印之前,请确保打印机在线,并且纸张正常。如调试打印模板有问题,请加入商鹏云开发交流QQ群
RESTful API介绍
RESTful API本质就是发送 HTTP 请求,只不过大家常用的可能是 HTTP GET 和 HTTP POST 请求,但是在 RESTful API里面还经常用到 HTTP PUT 、HTTP PACTCH、 HTTP DELETE。
在 RESTful API中,把这五种操作称之为动词,可以(但不是特别准确)想象成增删改查。客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
RESTful API 接口调用成功时返回 HTTP 状态码为 200,如调用错误会返回除 200 之外的其他 HTTP 状态码,可根据返回数据中的 errorcode和errormsg 字段判断具体错误。
常见HTTP错误状态码如下:
HTTP 返回码(Status Code) | 说明(Description) |
---|---|
400 | (错误请求)服务器不理解请求的语法。 |
401 | (未授权)请求要求身份验证。对于需要sign的接口,服务器可能返回此响应。 |
403 | (禁止)服务器拒绝请求。 |
404 | (未找到)服务器找不到请求的接口。 |
408 | (请求超时)服务器等候请求时发生超时。 |
413 | (请求体过大),拆成更小的请求体重试即可。 |
500 | (服务器内部错误)服务器遇到错误,无法完成请求。 |
501 | (尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | (错误网关)服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | (服务不可用)请求接口超过调用频率限制,即接口被限流。 |
504 | (网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。 |
全局errorcode如下:
errorcode | 说明(Description) |
---|---|
0 | 成功 |
-1 | appid为空 |
-2 | appid不存在 |
-3 | 时间戳为空 |
-4 | 签名错误 |
大于0 | 错误码大于0时每个接口返回不一样,具体请看各个接口 |
添加打印机
请求url:
https://open.spyun.net/v1/printer/add
请求方法:
POST
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求体body:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sn | string | 是 | 打印机编号(查看打印机底部标签) |
pkey | string | 是 | 打印机KEY(查看打印机底部标签) |
name | string | 是 | 打印机名称/备注 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{"errorcode":0}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号为空 |
2 | 打印机KEY为空 |
3 | 打印机名称为空 |
4 | 打印机编号或KEY错误 |
5 | 此打印机已添加,不能重复添加 |
6 | 系统繁忙 |
获取打印机信息
请求url:
https://open.spyun.net/v1/printer/info
请求方法:
GET
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求URL参数:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sign | string | 是 | 签名,详见签名生成算法 |
sn | string | 是 | 打印机编号 |
成功返回:
{
"errorcode":0,
"sn":"sp11222333", // 打印机编号
"name":"name", // 打印机名称
"online":1, // 是否在线,1:在线:0:离线
"status":0, // 状态,0:正常,1:异常
"sqsnum":1, // 待打印订单数
"model":"xxx", // 机型
"auto_cut":1, // 自动切刀开关,1:开,0:关
"voice":"U", // 语音开关信息 N:关,Y:滴滴滴,U:小语音,V:中语音,W:大语音
"imsi":"xxx" // 流量卡号码,wifi机型该值为空
}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印机不存在 |
修改打印机信息
请求url:
https://open.spyun.net/v1/printer/update
请求方法:
PATCH
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求体body:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sn | int | 是 | 打印机编号 |
name | string | 否 | 打印机名称 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{"errorcode":0}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印机不存在 |
3 | 系统繁忙 |
修改打印机配置参数
请求url:
https://open.spyun.net/v1/printer/setting
请求方法:
PATCH
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求体body:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sn | int | 是 | 打印机编号 |
auto_cut | int | 否 | 自动切刀开关,1:开,0:关 |
voice | string | 否 | 语音开关,N:关,Y:滴滴滴,U:小语音,V:中语音,W:大语音 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{"errorcode":0}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印机不存在 |
3 | 该打印机为语音限制机,不能设置真人语音 |
4 | 系统繁忙 |
删除打印机
请求url:
https://open.spyun.net/v1/printer/delete
请求方法:
DELETE
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求体body:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sn | string | 是 | 打印机编号 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{"errorcode":0}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口无特别errorcode。
打印订单
请求url:
https://open.spyun.net/v1/printer/print
请求方法:
POST
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求URL参数:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
content | string | 是 | 打印内容,最大支持5000字节 |
sn | string | 是 | 打印机编号 |
times | int | 否 | 打印次数,默认为1,范围为1-5 |
sign | string | 是 | 签名,详见签名生成算法 |
注意:发过来的打印订单会缓存12小时,超时没有打印的订单将会自动清空
排版控制标签说明:(详情请参考SDK示例)
- <BR> :换行符
- <CUT> :切刀指令(主动切纸,仅限切刀打印机使用才有效果)
- <IMAGE> :打印图片指令(前提是预先在机器内置图片,出厂时设置好)
- <L1></L1>:放大一倍
- <L2></L2>:放大两倍
- <C></C>:居中,该标签可以与DL,L,H,W嵌套
- <C><L1></L1></C>:居中放大一倍(可嵌套)
- <H></H>:字体变高一倍
- <W></W>:字体变宽一倍
- <R></R>:右对齐
- <B></B>:字体加粗
- <QRCODE></QRCODE>:二维码,单个订单只能打印一个二维码
- <BC128_A></BC128_A>:条形码(一维条码),数字字母混合条形码,最多支持14位数字大写字母混合
- <BC128_C></BC128_C>:条形码(一维条码),数字条形码,最多支持22位数字
说明:来订单时默认播放新来单语音,若使用“申请退单”或“申请取消订单”的语音,请使用以下指令:- <AUDIO-REFUND> :申请退单语音指令。播报内容为:有用户申请退单了
- <AUDIO-CANCEL> :申请取消订单语音指令。播报内容为:有用户申请取消订单了
成功返回:
{
"errorcode":0,
"id":"5c1af88568e417349343b942", // 打印订单ID,查询订单状态时需要用到
"create_time":"2019-01-01 00:00:00" // 订单接收时间
}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印内容为空 |
3 | 打印内容超过5000字节 |
4 | 打印次数范围不为1-5 |
5 | 打印机不存在 |
6 | 系统繁忙 |
清空待打印订单
请求url:
https://open.spyun.net/v1/printer/cleansqs
请求方法:
DELETE
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求URL参数:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sn | string | 是 | 打印机编号 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{
"errorcode":0,
"cleannum":10 //清空的订单数
}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印机不存在 |
查询打印订单状态
请求url:
https://open.spyun.net/v1/printer/order/status
请求方法:
GET
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求URL参数:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
id | string | 是 | 打印订单ID,由"打印订单"接口返回 |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{
"errorcode":0,
"status":true,// 打印状态,true:已打印,false:未打印
"print_time":"2019-01-01 00:00:00" // 打印时间
}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口无特别errorcode。
查询打印机历史打印订单数
请求url:
https://open.spyun.net/v1/printer/order/number
请求方法:
GET
请求数据说明:
客户端发送到服务端的数据类型为:application/x-www-form-urlencoded,服务器返回的数据类型为:applicstion/json,数据编码为:UTF-8。
请求URL参数:
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appid | string | 是 | 用户唯一凭证 |
date | string | 是 | 查询日期,格式YYYY-MM-DD,如:2018-12-20 |
sn | string | 是 | 打印机编号 |
timestamp | int | 是 | 请求时unix时间戳(10位数字,精确到秒) |
sign | string | 是 | 签名,详见签名生成算法 |
成功返回:
{
"errorcode":0,
"number":18 // 已打印订单数
}
失败返回:
{
"errorcode":-1,
"errormsg":"appid为空"
}
本接口errorcode说明:
errorcode | 说明(Description) |
---|---|
1 | 打印机编号SN不正确 |
2 | 打印机不存在 |
3 | 查询日期不正确 |
签名生成算法
签名生成的通用步骤如下:
第一步:设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名,注意为空指空字符串,"0"不为空字符串,需参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
第二步:在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
举例:
假设传送的参数如下:
{
"appid":"sp5c1314095ed15",
"timestamp":"1544765945",
"sn":"111111111",
"pkey":"22222222",
"name":"test"
}
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
stringA="appid=sp5c1314095ed15&name=test&pkey=22222222&sn=111111111×tamp=1544765873";
第二步:拼接API密钥:
stringSignTemp="stringA&appsecret=735aa25a15b75e6c1e0760823a22346a"
sign=MD5(stringSignTemp).toUpperCase()="3C24E50A3F1E0B4AB60FFA3A78E19E18"
注意:appid 和 appsecret 的值,请登陆管理后台查看开发者信息