HR管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
3.9 KiB

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
}