|
|
package utils
import ( "errors" "fmt" "github.com/gin-gonic/gin" "github.com/songzhibin97/gkit/tools/gjson" )
const ()
/* 发送微信消息结构体定义 */
type Val struct { Value interface{} `json:"value"` }
type ValColor struct { Value interface{} `json:"value"` Color string `json:"color,omitempty"` //字体颜色
}
type TPL struct { Touser string `json:"touser"` //微信用户ID
TemplateId string `json:"template_id"` //微信公众号模板消息ID
Url string `json:"url,omitempty"` //会从微信跳转到该URL页面
Data gin.H `json:"data"` //微信消息模板中参数内容
}
var ( /** 微信接口URL **/ //获取Access token
WechatAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%v&secret=%v" //发送模板消息
WechatTplSendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%v" //获取微信用户基本信息
WeChatUserInfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=%v&openid=%v&lang=zh_CN" //微信二维码请求
WechatQrcodeCreateUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%v" //创建二维码参数设置
WechatQrcodeCreatePostParameter = `{"expire_seconds": %v, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": %v}}}` //二维码图片地址
WechatQrcodeImg = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%v"
/** 微信公众号模版ID **/ //账号登陆成功通知
WechatTplID_100 = "5qm_kPSs7JyYSgjd3kIBH2tLpVm3R8zbu0fFrOPDyrw" //用户登录提醒
WechatTplID_200 = "9rKojfQ8P8-BKAqiO4wa6k9KkI20TC94A3Sx1jzKAi4" //登陆提醒
WechatTplID_300 = "3x9HB1IowrdgOFS4vJcvb2p11MZB0QZTSRoferYWsO0" )
////本地计算签名 signature
//func MakeSignature(timestamp, nonce string) string {
// si := []string{token, timestamp, nonce}
// sort.Strings(si) //字典序排序
// str := strings.Join(si, "") //组合字符串
// s := sha1.New() //返回一个新的使用SHA1校验的hash.Hash接口
// io.WriteString(s, str) //WriteString函数将字符串数组str中的内容写入到s中
// return fmt.Sprintf("%x", s.Sum(nil))
//}
var ( AppID = "wx53b33076923e4e7f" AppSecret = "768efa1f3f8d9d42061d8af1cd3ea936" )
//获取微信公众号的access_token
func GetAccessToken() (access_token string, error error) {
accessTokenUrl := fmt.Sprintf(WechatAccessTokenUrl, AppID, AppSecret) returnAccessTokenData, err := Get(accessTokenUrl) if err != nil { //请求微信相关接口网络连接出错
return "", errors.New("请求微信相关接口网络连接出错" + fmt.Sprintf("%v", err))
} access_token = gjson.GetBytes(returnAccessTokenData, "access_token").String() if len(access_token) == 0 { //微信接口返回的错误json信息 string(returnData)
return "", errors.New(string(returnAccessTokenData)) }
return access_token, nil
}
func GetKenAndOpenid(code string) (session_key, openid string, err error) {
url := fmt.Sprintf(`https://api.weixin.qq.com/sns/jscode2session?appid=%v&secret=%v&js_code=%v&grant_type=authorization_code`, AppID, AppSecret, code) res, err := Get(url) if err != nil { //请求微信相关接口网络连接出错
return } fmt.Println("获取用户openid,和解密私钥session_key", string((res))) session_key = gjson.GetBytes(res, "session_key").String() openid = gjson.GetBytes(res, "openid").String() return }
|