package mobile import ( "fmt" "gin-vue-admin/global" "gin-vue-admin/model/response" "gin-vue-admin/service" "gin-vue-admin/utils" "gin-vue-admin/utils/wx" "github.com/gin-gonic/gin" ) type GetUnlimitedReq struct { HospitalCode string `json:"hospitalCode"` DoctorPhone string `json:"doctorPhone"` OtherNo string `json:"otherNo"` QrType string `json:"qrType"` } type GetUnlimitedForSurveyReply struct { QrData string `json:"qrData"` OpenLink string `json:"openLink"` } type GetUnlimitedData struct { Scene string `json:"scene"` //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式) Page string `json:"page"` //必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面 Width int `json:"width"` //二维码的宽度,单位 px,最小 280px,最大 1280px ColorR string `json:"color_r"` //设置颜色 ColorG string `json:"color_g"` //设置颜色 ColorB string `json:"color_b"` //设置颜色 } type GetSchemeReq struct { Path string `json:"path"` Query string `json:"query"` } type GetTokenData struct { Code int `json:"code"` Data string `json:"data"` Msg string `json:"msg"` } func GetUnlimitedForOther(c *gin.Context) { var req GetUnlimitedReq _ = c.ShouldBindJSON(&req) token := getToken() data := GetUnlimitedData{} data.Scene = req.HospitalCode + ";" + req.DoctorPhone + ";" + req.OtherNo + ";" + req.QrType data.Page = "" errcode, reply := getUnlimited(token, data) if errcode != 200 { response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) } else { response.OkWithData(reply, c) return } } func GetUnlimited(c *gin.Context) { var req GetUnlimitedReq _ = c.ShouldBindJSON(&req) token := getToken() data := GetUnlimitedData{} data.Scene = req.HospitalCode + ";" + req.DoctorPhone + ";" + req.OtherNo + ";1" data.Page = "" errcode, reply := getUnlimited(token, data) if errcode != 200 { response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) } else { response.OkWithData(reply, c) return } } func GetUnlimitedForReport(c *gin.Context) { var req GetUnlimitedReq _ = c.ShouldBindJSON(&req) token := getToken() data := GetUnlimitedData{} data.Scene = req.HospitalCode + ";" + req.DoctorPhone + ";" + req.OtherNo + ";4" data.Page = "pages/casesDetail/casesDetail" errcode, reply := getUnlimited(token, data) if errcode != 200 { response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) } else { response.OkWithData(reply, c) return } } func GetUnlimitedForSurvey(c *gin.Context) { var req GetUnlimitedReq _ = c.ShouldBindJSON(&req) token := getToken() data := GetUnlimitedData{} data.Scene = req.HospitalCode + ";" + req.DoctorPhone + ";" + req.OtherNo + ";2" //data.Page = "" data.Page = "doctor/questionnaire/q1" errcode, qrData := getUnlimited(token, data) if errcode != 200 { response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) } schemeReq := GetSchemeReq{} schemeReq.Path = data.Page schemeReq.Query = data.Scene errcode, openLink := getScheme(token, schemeReq) reply := GetUnlimitedForSurveyReply{} reply.QrData = qrData.(string) reply.OpenLink = openLink if errcode != 200 { response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) } else { response.OkWithData(reply, c) return } } func getToken() string { if global.GVA_CONFIG.Common.Type == "2" { url := "https://medical.pet-dbc.cn/mobile/getTokenForLines" postData := make(map[string]string) resp := utils.Post(url, &postData, "", 1) fmt.Println(resp) reply := new(GetTokenData) utils.UnserislizeJson(resp, reply) return reply.Data //return "reply.Data" } else { token := service.GetWxToken() if token != "" { return token } } tokenRes, err := wx.GetAccessToken(global.GVA_CONFIG.Wx.Appid, global.GVA_CONFIG.Wx.Appsecret) if tokenRes == nil { //response.FailWithDetailedCode(411, "", "accesstoken获取失败", c) return "" } if err != nil { fmt.Println("GetAccessToken", err) //response.FailWithDetailedCode(412, "", "accesstoken获取失败", c) return "" } service.CreateWxToken(tokenRes.AccessToken) return tokenRes.AccessToken } func delToken() string { if global.GVA_CONFIG.Common.Type == "2" { url := "https://medical.pet-dbc.cn/mobile/delTokenForLines" postData := make(map[string]string) resp := utils.Post(url, &postData, "", 1) fmt.Println(resp) reply := new(GetTokenData) utils.UnserislizeJson(resp, reply) return reply.Data //return "reply.Data" } else { service.DelWxToken() } return getToken() } // @Description 小程序二维码 // @Param body body GetUnlimitedReq true "输入项" // @Success 200 {object} utils.ResponseData // @router /api/v1/wxapp/get-unlimited [post] func getUnlimited(token string, req GetUnlimitedData) (int, interface{}) { reply, err := wx.GetUnlimited(token, req.Scene, req.Page, 280, "0", "0", "0") if err != nil { fmt.Println("获取二维码报错:", err) token := delToken() return getUnlimited(token, req) } return 200, reply } func getScheme(token string, req GetSchemeReq) (int, string) { reply := wx.GetScheme(token, req.Path, req.Query) return 200, reply } func GetTokenForLines(c *gin.Context) { response.OkWithData(getToken(), c) return } func DelTokenForLines(c *gin.Context) { response.OkWithData(delToken(), c) return }