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 }