|
- package cloud_printer
-
- import (
- "applet/app/comm/e"
- "applet/app/comm/utils"
- "applet/app/comm/utils/cache"
- "applet/app/printer/md"
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "github.com/syyongx/php2go"
- "github.com/tidwall/gjson"
- "math/rand"
- "strconv"
- "strings"
- "time"
- )
-
- // 添加打印机
- func AddPrinter(masterId, clientId, clientSecret string, args md.PrinterReq) error {
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "machine_code": args.Sn,
- "msign": args.Key,
- "print_name": args.Remark,
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("printer/addprinter", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- if err == nil {
- err = e.NewErr(400, gjson.GetBytes(data, "error_description").String())
- }
- return err
- }
- return nil
- }
-
- // 删除
- func DelPrinter(masterId, clientId, clientSecret string, args md.PrinterReq) error {
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "machine_code": args.Sn,
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("printer/deleteprinter", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- if err == nil {
- err = e.NewErr(400, gjson.GetBytes(data, "error_description").String())
- }
- return err
- }
- return nil
- }
-
- // 设置推送链接
- func SetSendUrl(masterId, clientId, clientSecret string, args map[string]string) error {
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "cmd": args["cmd"],
- "url": args["url"],
- "status": args["status"],
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("oauth/setpushurl", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- if err == nil {
- err = e.NewErr(400, gjson.GetBytes(data, "error_description").String())
- }
- return err
- }
- return nil
- }
-
- // 打印
- func PrintDoing(masterId, clientId, clientSecret string, args md.PrinterReq) string {
- content := args.Content
- content1, _ := php2go.Base64Decode(args.Content)
- if content1 != "" {
- content = content1
- }
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "machine_code": args.Sn,
- "content": content,
- "origin_id": args.Oid,
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("print/index", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
-
- return ""
- }
- return gjson.GetBytes(data, "body.id").String()
- }
-
- // 获取订单状态
- func GetOrdStatus(masterId, clientId, clientSecret string, args md.PrinterReq) int {
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "machine_code": args.Sn,
- "order_id": args.Oid,
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("printer/getorderstatus", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- return 0
- }
- return int(gjson.GetBytes(data, "body.status").Int())
- }
-
- // 获取终端状态
- func GetPrinterStatus(masterId, clientId, clientSecret string, args md.PrinterReq) int {
- token := GetToken(masterId, clientId, clientSecret)
- param := map[string]interface{}{
- "client_id": clientId,
- "machine_code": args.Sn,
- "access_token": token,
- "id": GetUUID4(),
- }
- data, err := Send("printer/getprintstatus", clientSecret, param, 1)
- fmt.Println(data)
- fmt.Println(err)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- return 0
- }
- return int(gjson.GetBytes(data, "body.state").Int())
- }
-
- // 获取token
- func GetToken(masterId, clientId, clientSecret string) string {
- args := map[string]interface{}{
- "client_id": clientId,
- "grant_type": "client_credentials",
- "scope": "all",
- "id": GetUUID4(),
- }
- key := fmt.Sprintf("%s:cloud_token_%s", masterId, clientId)
- redisData, _ := cache.GetString(key)
- token := gjson.Get(redisData, "access_token").String()
- refreshToken := gjson.Get(redisData, "refresh_token").String()
- expiresTime := gjson.Get(redisData, "expires_time").String()
- tokens := ""
- if refreshToken == "" && token == "" {
- tokens = CommSaveToken(key, clientSecret, args)
- if tokens != "" {
- token = tokens
- }
- } else if utils.StrToInt64(expiresTime) < time.Now().Unix() { //过期处理
- args["grant_type"] = "refresh_token"
- args["refresh_token"] = refreshToken
- tokens = CommSaveToken(key, clientSecret, args)
- }
- if tokens != "" {
- token = tokens
- }
- return token
- }
- func CommSaveToken(key string, clientSecret string, args map[string]interface{}) string {
- data, err := Send("oauth/oauth", clientSecret, args, 1)
- if err != nil || gjson.GetBytes(data, "error").String() != "0" {
- return ""
- }
- expiresIn := gjson.GetBytes(data, "body.expires_in").Int()
- body := gjson.GetBytes(data, "body").String()
- var resData map[string]interface{}
- json.Unmarshal([]byte(body), &resData)
- resData["expires_time"] = utils.Int64ToStr(time.Now().Unix() + expiresIn - 86400)
- jsonData, _ := json.Marshal(resData)
- cache.SetEx(key, string(jsonData), int(expiresIn+86400))
- token := gjson.GetBytes(data, "body.access_token").String()
- return token
- }
-
- func Send(act string, clientSecret string, args map[string]interface{}, isPost int) ([]byte, error) {
- router := "https://open-api.10ss.net/" + act
- oldRouter := router
- args["timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
- args["sign"] = GetSign(utils.AnyToString(args["client_id"]), utils.AnyToString(args["timestamp"]), clientSecret)
- for k, v := range args {
- if strings.Contains(router, "?") == false {
- router += "?" + k + "=" + php2go.URLEncode(utils.AnyToString(v))
- } else {
- router += "&" + k + "=" + php2go.URLEncode(utils.AnyToString(v))
- }
- }
- if isPost == 1 {
- return utils.CurlPost(oldRouter, args, map[string]string{})
- }
- return utils.CurlGet(router, map[string]string{})
- }
- func GetSign(clientId, timestamp, clientServer string) string {
- pretreatmentData := fmt.Sprintf("%s%s%s", clientId, timestamp, clientServer)
- m := md5.New()
- m.Write([]byte(pretreatmentData))
- return fmt.Sprintf("%s", hex.EncodeToString(m.Sum(nil)))
- }
-
- func GetUUID4() string {
- return fmt.Sprintf("%04x%04x-%04x-%04x-%04x-%04x%04x%04x",
- mtRand(0, 0xffff), mtRand(0, 0xffff),
- mtRand(0, 0xffff),
- mtRand(0, 0xfff)|0x4000,
- mtRand(0, 0x3fff)|0x8000,
- mtRand(0, 0xffff), mtRand(0, 0xffff), mtRand(0, 0xffff),
- )
- }
- func mtRand(min, max int) int {
- return rand.Intn(max-min) + min
- }
|