- 易联云打印机支持开放应用
This commit is contained in:
@@ -14,10 +14,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
prodURL = "https://open-api.10ss.net"
|
prodURL = "https://open-api.10ss.net"
|
||||||
signKey = "sign"
|
signKey = "sign"
|
||||||
timestampKey = "timestamp"
|
timestampKey = "timestamp"
|
||||||
oathApiPath = "oauth/oauth"
|
oathApiPath = "oauth/oauth"
|
||||||
|
scanCodemodelApiPath = "oauth/scancodemodel"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -50,7 +51,9 @@ type TokenInfo struct {
|
|||||||
AccessToken string `json:"access_token"`
|
AccessToken string `json:"access_token"`
|
||||||
RefreshToken string `json:"refresh_token"`
|
RefreshToken string `json:"refresh_token"`
|
||||||
ExpiresIn int64 `json:"expires_in"`
|
ExpiresIn int64 `json:"expires_in"`
|
||||||
Scope string `json:"scope"`
|
|
||||||
|
Scope string `json:"scope"`
|
||||||
|
MachineCode string `json:"machine_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(clientID, clientSecret string, config ...*platformapi.APIConfig) *API {
|
func New(clientID, clientSecret string, config ...*platformapi.APIConfig) *API {
|
||||||
@@ -70,7 +73,10 @@ func (a *API) signParams(timestamp int64) string {
|
|||||||
return fmt.Sprintf("%x", md5.Sum([]byte(a.clientID+utils.Int64ToStr(timestamp)+a.clientSecret)))
|
return fmt.Sprintf("%x", md5.Sum([]byte(a.clientID+utils.Int64ToStr(timestamp)+a.clientSecret)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) AccessAPI(apiName string, apiParams map[string]interface{}) (retVal map[string]interface{}, err error) {
|
func (a *API) AccessAPI(apiName string, apiParams map[string]interface{}, token string) (retVal map[string]interface{}, err error) {
|
||||||
|
if len(token) < len("d65578a6fa414d738e0c44f85ac4b950") {
|
||||||
|
token = ""
|
||||||
|
}
|
||||||
err = platformapi.AccessPlatformAPIWithRetry(a.client,
|
err = platformapi.AccessPlatformAPIWithRetry(a.client,
|
||||||
func() *http.Request {
|
func() *http.Request {
|
||||||
timestamp := time.Now().Unix()
|
timestamp := time.Now().Unix()
|
||||||
@@ -80,8 +86,11 @@ func (a *API) AccessAPI(apiName string, apiParams map[string]interface{}) (retVa
|
|||||||
"client_id": a.clientID,
|
"client_id": a.clientID,
|
||||||
"id": utils.GetUpperUUID(),
|
"id": utils.GetUpperUUID(),
|
||||||
}, apiParams)
|
}, apiParams)
|
||||||
if oathApiPath != apiName {
|
if oathApiPath != apiName && scanCodemodelApiPath != apiName {
|
||||||
params["access_token"] = a.GetToken()
|
if token == "" {
|
||||||
|
token = a.GetToken()
|
||||||
|
}
|
||||||
|
params["access_token"] = token
|
||||||
}
|
}
|
||||||
request, _ := http.NewRequest(http.MethodPost, utils.GenerateGetURL(prodURL, apiName, nil), strings.NewReader(utils.Map2URLValues(params).Encode()))
|
request, _ := http.NewRequest(http.MethodPost, utils.GenerateGetURL(prodURL, apiName, nil), strings.NewReader(utils.Map2URLValues(params).Encode()))
|
||||||
request.Header.Set("charset", "UTF-8")
|
request.Header.Set("charset", "UTF-8")
|
||||||
@@ -131,13 +140,35 @@ func (a *API) RetrieveToken() (tokenInfo *TokenInfo, err error) {
|
|||||||
result, err := a.AccessAPI(oathApiPath, map[string]interface{}{
|
result, err := a.AccessAPI(oathApiPath, map[string]interface{}{
|
||||||
"grant_type": "client_credentials",
|
"grant_type": "client_credentials",
|
||||||
"scope": "all",
|
"scope": "all",
|
||||||
})
|
}, "")
|
||||||
if err != nil {
|
if err == nil {
|
||||||
return nil, err
|
if err = utils.Map2StructByJson(result, &tokenInfo, false); err == nil {
|
||||||
|
a.SetToken(tokenInfo.AccessToken)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tokenInfo = &TokenInfo{}
|
return tokenInfo, err
|
||||||
if err = utils.Map2StructByJson(result, tokenInfo, false); err == nil {
|
}
|
||||||
a.SetToken(tokenInfo.AccessToken)
|
|
||||||
|
func (a *API) Code2Token(code string) (tokenInfo *TokenInfo, err error) {
|
||||||
|
result, err := a.AccessAPI(oathApiPath, map[string]interface{}{
|
||||||
|
"grant_type": "authorization_code",
|
||||||
|
"scope": "all",
|
||||||
|
"code": code,
|
||||||
|
}, "")
|
||||||
|
if err == nil {
|
||||||
|
err = utils.Map2StructByJson(result, &tokenInfo, false)
|
||||||
|
}
|
||||||
|
return tokenInfo, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) RefreshToken(refreshToken string) (tokenInfo *TokenInfo, err error) {
|
||||||
|
result, err := a.AccessAPI(oathApiPath, map[string]interface{}{
|
||||||
|
"grant_type": "refresh_token",
|
||||||
|
"scope": "all",
|
||||||
|
"refresh_token": refreshToken,
|
||||||
|
}, "")
|
||||||
|
if err == nil {
|
||||||
|
err = utils.Map2StructByJson(result, &tokenInfo, false)
|
||||||
}
|
}
|
||||||
return tokenInfo, err
|
return tokenInfo, err
|
||||||
}
|
}
|
||||||
@@ -147,18 +178,18 @@ func (a *API) AddPrinter(machineCode, msign, printerName string) (err error) {
|
|||||||
"machine_code": machineCode,
|
"machine_code": machineCode,
|
||||||
"msign": msign,
|
"msign": msign,
|
||||||
"print_name": printerName,
|
"print_name": printerName,
|
||||||
})
|
}, "")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) DeletePrinter(machineCode string) (err error) {
|
func (a *API) DeletePrinter(machineCode string) (err error) {
|
||||||
_, err = a.AccessAPI("printer/deleteprinter", map[string]interface{}{
|
_, err = a.AccessAPI("printer/deleteprinter", map[string]interface{}{
|
||||||
"machine_code": machineCode,
|
"machine_code": machineCode,
|
||||||
})
|
}, "")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) PrintMsg(machineCode, orderID, content string) (err error) {
|
func (a *API) printMsg(machineCode, orderID, content, token string) (err error) {
|
||||||
if orderID == "" {
|
if orderID == "" {
|
||||||
orderID = utils.GetUUID()
|
orderID = utils.GetUUID()
|
||||||
}
|
}
|
||||||
@@ -166,16 +197,45 @@ func (a *API) PrintMsg(machineCode, orderID, content string) (err error) {
|
|||||||
"machine_code": machineCode,
|
"machine_code": machineCode,
|
||||||
"origin_id": orderID,
|
"origin_id": orderID,
|
||||||
"content": content,
|
"content": content,
|
||||||
})
|
}, token)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) GetPrintStatus(machineCode string) (state int, err error) {
|
func (a *API) PrintMsg(machineCode, orderID, content string) (err error) {
|
||||||
|
return a.printMsg(machineCode, orderID, content, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) PrintMsgWithToken(machineCode, orderID, content, token string) (err error) {
|
||||||
|
return a.printMsg(machineCode, orderID, content, token)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) getPrintStatus(machineCode, token string) (state int, err error) {
|
||||||
result, err := a.AccessAPI("printer/getprintstatus", map[string]interface{}{
|
result, err := a.AccessAPI("printer/getprintstatus", map[string]interface{}{
|
||||||
"machine_code": machineCode,
|
"machine_code": machineCode,
|
||||||
})
|
}, token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
return int(utils.Str2Int64(utils.Interface2String(result["state"]))), nil
|
return int(utils.Str2Int64(utils.Interface2String(result["state"]))), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *API) GetPrintStatus(machineCode string) (state int, err error) {
|
||||||
|
return a.getPrintStatus(machineCode, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) GetPrintStatusWithToken(machineCode, token string) (state int, err error) {
|
||||||
|
return a.getPrintStatus(machineCode, token)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) GetPrinterToken(machineCode, qrKey string) (tokenInfo *TokenInfo, err error) {
|
||||||
|
result, err := a.AccessAPI(scanCodemodelApiPath, map[string]interface{}{
|
||||||
|
"machine_code": machineCode,
|
||||||
|
"qr_key": qrKey,
|
||||||
|
"scope": "all",
|
||||||
|
}, "")
|
||||||
|
if err == nil {
|
||||||
|
err = utils.Map2StructByJson(result, &tokenInfo, false)
|
||||||
|
a.SetToken(tokenInfo.AccessToken)
|
||||||
|
}
|
||||||
|
return tokenInfo, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,8 +19,13 @@ func init() {
|
|||||||
sugarLogger = logger.Sugar()
|
sugarLogger = logger.Sugar()
|
||||||
baseapi.Init(sugarLogger)
|
baseapi.Init(sugarLogger)
|
||||||
|
|
||||||
|
// 自有应用
|
||||||
api = New("1039586024", "4885d07c2997b661102e4b6099c0bf3b")
|
api = New("1039586024", "4885d07c2997b661102e4b6099c0bf3b")
|
||||||
api.SetToken("a25e039ea5d14a7aa61653eb58118d9c")
|
api.SetToken("968b52db8a0a40d184d67578aa4888f8")
|
||||||
|
|
||||||
|
// 开放应用
|
||||||
|
// api = New("1098307169", "d5eedb40c99e6691b1ca2ba82a363d6a")
|
||||||
|
// api.SetToken("d65578a6fa414d738e0c44f85ac4b950")
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleError(t *testing.T, err error) {
|
func handleError(t *testing.T, err error) {
|
||||||
@@ -47,7 +52,14 @@ func TestDeletePrinter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPrintMsg(t *testing.T) {
|
func TestPrintMsg(t *testing.T) {
|
||||||
err := api.PrintMsg("4004600675", utils.GetUUID(), "hello world")
|
// 4004606481
|
||||||
|
err := api.PrintMsg("4004600675", utils.GetUUID(), "<FS2>饿百取货码</FS2>")
|
||||||
|
handleError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrintMsgWithToken(t *testing.T) {
|
||||||
|
// 4004606481
|
||||||
|
err := api.PrintMsgWithToken("4004600675", utils.GetUUID(), "<FS2>饿百取货码</FS2>", "faketoken")
|
||||||
handleError(t, err)
|
handleError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,3 +68,15 @@ func TestGetPrintStatus(t *testing.T) {
|
|||||||
handleError(t, err)
|
handleError(t, err)
|
||||||
baseapi.SugarLogger.Debug(state)
|
baseapi.SugarLogger.Debug(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetPrintStatusWithToken(t *testing.T) {
|
||||||
|
state, err := api.GetPrintStatusWithToken("4004600675", "faketoken")
|
||||||
|
handleError(t, err)
|
||||||
|
baseapi.SugarLogger.Debug(state)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetPrinterToken(t *testing.T) {
|
||||||
|
TokenInfo, err := api.GetPrinterToken("4004600675", "cb3UTvMq")
|
||||||
|
handleError(t, err)
|
||||||
|
baseapi.SugarLogger.Debug(TokenInfo)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user