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.
163 lines
3.9 KiB
163 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
|
|
}
|
|
|