package controller import ( "basic.com/valib/bhomedbapi.git" "basic.com/valib/licence.git" "basic.com/valib/logger.git" "encoding/json" "errors" "github.com/gin-gonic/gin" "io/ioutil" "net/http" "os" "strings" "time" "vamicro/config" "vamicro/extend/code" "vamicro/extend/util" "vamicro/version-control/service" ) /* 在线激活smartai 1.登录商城 2.展示商城订单 3.选择订单进行激活 */ func pRet(b []byte, err error, c *gin.Context, cb func(data interface{}) (interface{}, error)) { if err != nil { logger.Error("pRet err:", err) util.ResponseFormat(c, code.ComError, err.Error()) return } var ret bhomedbapi.Result err = json.Unmarshal(b, &ret) if err != nil { logger.Error("pRet err:", err) util.ResponseFormat(c, code.ComError, err.Error()) return } if !ret.Success { logger.Error("!ret.Success ret:", ret) c.JSON(http.StatusInternalServerError, ret) return } if cb != nil { var rd interface{} rd, err = cb(ret.Data) if err != nil { util.ResponseFormat(c, code.ComError, err.Error()) return } else { util.ResponseFormat(c, code.Success, rd) return } } c.JSON(http.StatusOK, ret) } //请求商城端发送短信验证码 func shopMakSmsHandle(c *gin.Context) { phoneNum := c.Query("phoneNum") if phoneNum == "" { util.ResponseFormat(c, code.RequestParamError, "") return } url := util.GetShopUrl() + "/data/api-u/user/makeVerifyCode" if !strings.HasPrefix(url, "http://") { url = "http://" + url } m := map[string]string{ "phoneNum": phoneNum, } b, err := util.DoGetRequest(url, m, nil) pRet(b, err, c, nil) } //调用商城端登录,获取token func shopCenterLoginHandle(c *gin.Context) { phoneNum := c.PostForm("phoneNum") verifyCode := c.PostForm("verifyCode") if phoneNum == "" || verifyCode == "" { util.ResponseFormat(c, code.RequestParamError, "") return } url := util.GetShopUrl() + "/data/api-u/user/login" if !strings.HasPrefix(url, "http://") { url = "http://" + url } m := map[string]interface{}{ "phoneNum": phoneNum, "verifyCode": verifyCode, } b, err := util.DoPostRequest(url, util.CONTENT_TYPE_FORM, m, nil, nil, time.Second*5) pRet(b, err, c, func(data interface{}) (interface{}, error) { d, e := json.Marshal(data) if e != nil { return nil, e } type sld struct { AccessToken string `json:"access_token"` } var u sld e = json.Unmarshal(d, &u) if e != nil { return nil, e } if !strings.HasPrefix(u.AccessToken, "Bearer ") { u.AccessToken = "Bearer " + u.AccessToken } return u, nil }) } //获取可用于激活的订单列表 func shopCenterGetOrderListHandle(c *gin.Context) { token := c.PostForm("token") if token == "" { util.ResponseFormat(c, code.RequestParamError, "") return } if !strings.HasPrefix(token, "Bearer ") { token = "Bearer " + token } url := util.GetShopUrl() + "/data/api-s/order/getActiveOrder" if !strings.HasPrefix(url, "http://") { url = "http://" + url } header := map[string]string{ "Authorization": token, } m := map[string]interface{}{ "page": 1, "size": 100, } b, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, m, nil, header, time.Second*5) pRet(b, err, c, nil) } //请求商城使用订单进行激活,返回内容: //请求码 通道数量 摄像机数量 设备数量 服务时长 产品密钥 func authActiveByOrderHandle(c *gin.Context) { token := c.PostForm("token") orderId := c.PostForm("orderId") productId := c.PostForm("productId") activateCode := c.PostForm("activateCode") //25位激活码 if token == "" || activateCode == "" { util.ResponseFormat(c, code.RequestParamError, "") return } if !strings.HasPrefix(token, "Bearer ") { token = "Bearer " + token } url := util.GetShopUrl() + "/data/api-s/q_authorization" if !strings.HasPrefix(url, "http://") { url = "http://" + url } header := map[string]string{ "Authorization": token, } var rd = util.AuthorizationInfo{ DevId: config.Server.AnalyServerId, MachineCode: licence.GetMachineCode(), DeviceType: config.Server.DeviceType, DeviceMode: config.Server.DeviceModel, ActivateCode: activateCode, } var sysInitApi bhomedbapi.SysInitApi b, rInfo := sysInitApi.GetRegInfo() if b { rbd, e := json.Marshal(rInfo) if e == nil { var sysRI service.RegUserInfo if e = json.Unmarshal(rbd, &sysRI); e == nil { rd.UserType = sysRI.UserType rd.PhoneNum = sysRI.PhoneNum rd.Name = sysRI.Name rd.ProvinceId = sysRI.ProvinceId rd.CityId = sysRI.CityId rd.CountyId = sysRI.CountyId rd.Email = sysRI.Email } } } q, err := service.HackAuthorizationInfo(rd) if err != nil { logger.Error("Haq err:", err) util.ResponseFormat(c, code.ComError, err.Error()) return } body := map[string]interface{}{ "sn": q, "orderId": orderId, "productId": productId, "activateCode": activateCode, } rb, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, body, nil, header, time.Second*5) cb := func(data interface{}) (interface{}, error) { rb, err := json.Marshal(data) if err != nil { logger.Error("json.Marshal err:", err) return nil, err } type rs struct { AuthInfo string `json:"authInfo"` } var rai rs err = json.Unmarshal(rb, &rai) if err != nil { logger.Error("json.Unmarshal err:", err) return nil, err } authInfo, e := util.GetAuthorizationInfo(rai.AuthInfo) if e != nil { logger.Error("GetAuthorizationInfo e:", e) return nil, e } machineCode := licence.GetMachineCode() if machineCode != authInfo.MachineCode { logger.Error("GetAuthorization machineCode not match, local:", machineCode, " remote:", authInfo.MachineCode) return nil, errors.New("机器码不匹配") } sn := util.GetVamicroPath() + "/sn.txt" pathAuth := util.GetVamicroPath() + "/auth.txt" ioutil.WriteFile(sn, []byte(""), os.ModePerm) ioutil.WriteFile(pathAuth, []byte(rai.AuthInfo), os.ModePerm) rm := map[string]interface{}{ "sn": authInfo.ActivateCode, "edition": authInfo.Edition, "chCount": authInfo.ChCount, "cameraCount": authInfo.CameraCount, "devCount": authInfo.DevCount, "serveYear": authInfo.ServeYear, "authInfo": rai.AuthInfo, } return rm, nil } pRet(rb, err, c, cb) }