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.

103 lines
3.4 KiB

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
}