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
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
|
|
}
|