1
This commit is contained in:
@@ -1 +1,313 @@
|
||||
package xpyunapi
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
baseURL = "https://open.xpyun.net/api/openapi/xprinter/"
|
||||
signKey = "sign"
|
||||
timestampKey = "timestamp"
|
||||
debugTest = 1 //debug=1返回非json格式的数据,仅测试时候使用
|
||||
)
|
||||
|
||||
const (
|
||||
ResponseCodeSuccess = 0 //成功
|
||||
ResponseMsgSuccess = "ok"
|
||||
)
|
||||
|
||||
var (
|
||||
exceedLimitCodes = map[string]int{}
|
||||
canRetryCodes = map[string]int{}
|
||||
)
|
||||
|
||||
type API struct {
|
||||
locker sync.RWMutex
|
||||
accessToken string
|
||||
|
||||
userName string
|
||||
userKey string
|
||||
client *http.Client
|
||||
config *platformapi.APIConfig
|
||||
}
|
||||
|
||||
//初始化
|
||||
func New(userName, userKey string, config ...*platformapi.APIConfig) *API {
|
||||
curConfig := platformapi.DefAPIConfig
|
||||
if len(config) > 0 {
|
||||
curConfig = *config[0]
|
||||
}
|
||||
return &API{
|
||||
userName: userName,
|
||||
userKey: userKey,
|
||||
client: &http.Client{Timeout: curConfig.ClientTimeout},
|
||||
config: &curConfig,
|
||||
}
|
||||
}
|
||||
|
||||
//生成签名
|
||||
func (a *API) GenerateSign() string {
|
||||
return Sign(a.userName + a.userKey + strconv.FormatInt(GetMillisecond(), 10))
|
||||
}
|
||||
|
||||
//生成 RestRequest
|
||||
func (a *API) GenerateRestRequest() RestRequest {
|
||||
return RestRequest{
|
||||
User: a.userName,
|
||||
UserKey: a.userKey,
|
||||
Timestamp: GetMillisecond(),
|
||||
Sign: a.GenerateSign(),
|
||||
}
|
||||
}
|
||||
|
||||
func xpyunPostJson(url string, request interface{}) *XPYunResp {
|
||||
result := HttpPostJson(url, request)
|
||||
return result
|
||||
}
|
||||
|
||||
// 1.添加打印机到开发者账户(可批量)
|
||||
func (a *API) AddPrinters(sn, printerName string) error {
|
||||
url := baseURL + "addPrinters"
|
||||
request := &AddPrinterRequest{
|
||||
RestRequest: a.GenerateRestRequest(),
|
||||
Items: []*AddPrinterRequestItem{{
|
||||
Sn: sn,
|
||||
Name: printerName,
|
||||
}},
|
||||
}
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if len(retVal["failMsg"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["failMsg"].([]interface{}) {
|
||||
t := strings.Split(v.(string), ":")
|
||||
failMsg += t[0] + XpuErrMsg[t[1]]
|
||||
}
|
||||
return fmt.Errorf("添加打印机错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//2.设置打印机语音类型
|
||||
func (a *API) SetVoiceType(sn string, soundSize int) error {
|
||||
url := baseURL + "setVoiceType"
|
||||
request := &SetVoiceTypeRequest{
|
||||
RestRequest: a.GenerateRestRequest(),
|
||||
Sn: sn,
|
||||
VoiceType: VoiceTypeOtherPerson,
|
||||
VolumeLevel: soundSize,
|
||||
}
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if retVal != nil && len(retVal["failMsg"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["failMsg"].([]interface{}) {
|
||||
t := strings.Split(v.(string), ":")
|
||||
failMsg += t[0] + XpuErrMsg[t[1]]
|
||||
}
|
||||
return fmt.Errorf("设置打印机运营类型错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//3.打印小票订单
|
||||
func (a *API) Print(request *PrintRequest) (string, error) {
|
||||
url := baseURL + "print"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return "0", errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return "0", fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(string)
|
||||
if len(retVal) > 0 {
|
||||
return retVal, nil
|
||||
} else {
|
||||
return "0", nil
|
||||
}
|
||||
}
|
||||
|
||||
// 5.批量删除打印机
|
||||
func (a *API) DelPrinters(snList []string) error {
|
||||
url := baseURL + "delPrinters"
|
||||
request := &DelPrinterRequest{
|
||||
RestRequest: a.GenerateRestRequest(),
|
||||
SnList: snList,
|
||||
}
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if retVal != nil && len(retVal["failMsg"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["failMsg"].([]interface{}) {
|
||||
t := strings.Split(v.(string), ":")
|
||||
failMsg += t[0] + XpuErrMsg[t[1]]
|
||||
}
|
||||
return fmt.Errorf("删除打印机错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//6.修改打印机信息
|
||||
func (a *API) UpdatePrinter(request *UpdPrinterRequest) error {
|
||||
url := baseURL + "updPrinter"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if retVal != nil && len(retVal["failMsg"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["failMsg"].([]interface{}) {
|
||||
t := strings.Split(v.(string), ":")
|
||||
failMsg += t[0] + XpuErrMsg[t[1]]
|
||||
}
|
||||
return fmt.Errorf("修改打印机信息错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//7.清空待打印队列
|
||||
func (a *API) EmptyPrinterQueue(sn string) error {
|
||||
url := baseURL + "delPrinterQueue"
|
||||
request := &EmpPrinterQueueRequest{
|
||||
RestRequest: a.GenerateRestRequest(),
|
||||
Sn: sn,
|
||||
}
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if retVal != nil && len(retVal["failMsg"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["failMsg"].([]interface{}) {
|
||||
t := strings.Split(v.(string), ":")
|
||||
failMsg += t[0] + XpuErrMsg[t[1]]
|
||||
}
|
||||
return fmt.Errorf("清空待打印机队列错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//8.查询订单状态
|
||||
func (a *API) QueryOrderState(request *QueryOrderStateRequest) (bool, error) {
|
||||
url := baseURL + "queryOrderState"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return false, errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return false, fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
return resp.Content.Data.(bool), nil
|
||||
}
|
||||
|
||||
//9.查询打印机某天的订单统计数
|
||||
func (a *API) QueryOrderStatis(request *QueryOrderStatisRequest) (printed, waiting float64, err error) {
|
||||
url := baseURL + "queryOrderStatis"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return 0, 0, errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return 0, 0, fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal, _ := resp.Content.Data.(map[string]interface{})
|
||||
if retVal != nil {
|
||||
printed = retVal["printed"].(float64)
|
||||
waiting = retVal["waiting"].(float64)
|
||||
return printed, waiting, nil
|
||||
}
|
||||
return 0, 0, nil
|
||||
}
|
||||
|
||||
//10.获取指定打印机状态
|
||||
//* 0、离线 1、在线正常 2、在线不正常
|
||||
// * 备注:异常一般是无纸,离线的判断是打印机与服务器失去联系超过30秒
|
||||
func (a *API) QueryPrinterStatus(sn string) (interface{}, error) {
|
||||
url := baseURL + "queryPrinterStatus"
|
||||
request := &QueryPrinterStatusRequest{
|
||||
RestRequest: a.GenerateRestRequest(),
|
||||
Sn: sn,
|
||||
}
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return PrinterStateError, errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return PrinterStateError, fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
if resp.Content.Data != nil && resp.Content.Data.(float64) >= 0 {
|
||||
return resp.Content.Data, nil
|
||||
}
|
||||
return PrinterStateError, nil
|
||||
}
|
||||
|
||||
//11.批量获取指定打印机状态
|
||||
func (a *API) QueryPrintersStatus(request *QueryPrintersStatusRequest) ([]float64, error) {
|
||||
url := baseURL + "queryPrintersStatus"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return nil, errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return nil, fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
retVal := []float64{}
|
||||
if resp.Content.Data != nil && resp.Content.Data.(float64) >= 0 {
|
||||
for _, v := range resp.Content.Data.([]interface{}) {
|
||||
retVal = append(retVal, v.(float64))
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
//12.金额播报
|
||||
func (a *API) PlayVoice(request *PlayVoiceRequest) error {
|
||||
url := baseURL + "playVoice"
|
||||
request.RestRequest = a.GenerateRestRequest()
|
||||
resp := xpyunPostJson(url, request)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.Content.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("%v", XpuErrMsg2[resp.Content.Msg])
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user