package workWechat import ( "encoding/json" "errors" "fmt" "hr_server/grocerystore" "hr_server/overall" "hr_server/overall/overallhandle" ) /* * @ 作者: 秦东 @ 时间: 2024-01-18 14:11:11 @ 功能: 获取token @ 参数 #systemApp 系统 #key 身份KEy #isAgain 重新授权 1:否,2:是 @ 返回值 # @ 方法原型 #token token值 #err 状态 */ func GainWechatToken(systemApp, key string, isAgain int) (token string, err error) { companyId := overall.CONSTANT_CONFIG.WechatCompany.CompanyId redisFileKey := fmt.Sprintf("Wechat:Token:%v_%v_%v", companyId, key, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) var secretStr string switch systemApp { case "kpi": redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.WechatKpi.Agentid) secretStr = overall.CONSTANT_CONFIG.WechatKpi.Secret case "school": redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.WechatSchool.Agentid) secretStr = overall.CONSTANT_CONFIG.WechatSchool.Secret default: redisFileKey = fmt.Sprintf("%v_%v", redisFileKey, systemApp) } redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 if isAgain != 1 { token, err = getWechatServer(companyId, secretStr) if err != nil { return } redisClient.SetRedisTime(7200) redisClient.Set(redisFileKey, token) } else { isTrue, tokens := redisClient.Get(redisFileKey) if isTrue && token != "" { err = nil token = tokens return } else { token, err = getWechatServer(companyId, secretStr) if err != nil { return } redisClient.SetRedisTime(7200) redisClient.Set(redisFileKey, token) } } return } /* * @ 作者: 秦东 @ 时间: 2024-01-18 14:23:24 @ 功能: 获取微信Token(链接微信服务器) @ 参数 # @ 返回值 # @ 方法原型 # */ func getWechatServer(companyId, secretStr string) (token string, err error) { getTokenUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%v&corpsecret=%v", companyId, secretStr) // getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + companyId + "&corpsecret=" + secretStr tokenByte := overallhandle.CurlGet(getTokenUrl) var callBackCont WeChatCallBack err = json.Unmarshal(tokenByte, &callBackCont) if err != nil { return } if callBackCont.Errcode != 0 { err = errors.New("未能获得到TOKEN!") return } token = callBackCont.Accesstoken return } /* * @ 作者: 秦东 @ 时间: 2024-01-18 17:00:54 @ 功能: 获取企业的jsapi_ticket 或 获取应用的jsapi_ticket @ 参数 #systemApp 系统 #key 身份识别 #calss 1:应用,2:企业 @ 返回值 # @ 方法原型 # */ func GainJsapiTicket(systemApp, key string, class int) (jsApiTickerStr string, err error) { jsApiTicketRedis := fmt.Sprintf("Wechat:JsapiTicket:%v_%v_%v", systemApp, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, class) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) isTrue, jsApiTickerInfo := redisClient.Get(jsApiTicketRedis) //读取redis数据 if isTrue { jsApiTickerStr = jsApiTickerInfo err = nil return } else { var sendUrlstr string //获取token tokenStr, errs := GainWechatToken(systemApp, key, 1) if errs != nil { err = errs return } if class != 1 { sendUrlstr = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + tokenStr //获取企业级 } else { sendUrlstr = "https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=" + tokenStr + "&type=agent_config" //获取应用级 } //获取企业微信jsapi_ticket jsapiTickerMsg := overallhandle.CurlGet(sendUrlstr) var callBackCont WeChatCallBack err = json.Unmarshal(jsapiTickerMsg, &callBackCont) if err != nil { return } if callBackCont.Errcode != 0 { return } jsApiTickerStr = callBackCont.Ticket redisClient.SetRedisTime(7200) redisClient.Set(jsApiTicketRedis, jsApiTickerStr) } return }