Kaynağa Gözat

微信获取签名接口

xingzai 3 yıl önce
ebeveyn
işleme
0be376f4fe
3 değiştirilmiş dosya ile 116 ekleme ve 115 silme
  1. 47 0
      controllers/wechat.go
  2. 11 115
      models/wechat.go
  3. 58 0
      services/wechat.go

+ 47 - 0
controllers/wechat.go

@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"encoding/json"
+	"fmt"
 	"hongze/hongze_cygxzs/models"
 	"hongze/hongze_cygxzs/services"
 	"hongze/hongze_cygxzs/utils"
@@ -121,3 +122,49 @@ func (this *WechatCommonController) WechatLoginByxzs() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 微信获取签名接口
+// @Description 微信获取签名接口
+// @Param   Url   query   string  true       "url地址"
+// @Success 200 {object} models.WechatSign
+// @router /getWxSign [get]
+func (this *WechatCommonController) GetWxSign() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	getUrl := this.GetString("Url")
+	accessToken, err := services.GetWxAccessTokenByXzs()
+	fmt.Println("getUrl:", accessToken)
+	fmt.Println("getUrl:", getUrl)
+	if err != nil {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取access_token失败,err:" + err.Error()
+		return
+	}
+	ticket, err := services.GetWxTicket(accessToken)
+	if err != nil {
+		br.Msg = "获取Ticket失败,请联系客服"
+		br.ErrMsg = "获取Ticket失败,Err" + err.Error()
+		return
+	}
+	if ticket == "" {
+		br.Msg = "获取Ticket失败,请联系客服"
+		br.ErrMsg = "ticket为空" + ticket
+		return
+	}
+	nonceStr := utils.GetRandStringNoSpecialChar(16)
+	fmt.Println(ticket)
+	signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
+	resp := new(models.WechatSign)
+	resp.AppId = utils.WxPublicAppId
+	resp.NonceStr = nonceString
+	resp.Timestamp = timestamp
+	resp.Url = getUrl
+	resp.Signature = signature
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取签名成功"
+	br.Data = resp
+}

+ 11 - 115
models/wechat.go

@@ -1,15 +1,5 @@
 package models
 
-import (
-	"encoding/json"
-	"fmt"
-	"hongze/hongze_cygxzs/utils"
-	"rdluck_tools/http"
-	"rdluck_tools/orm"
-	"strings"
-	"time"
-)
-
 type WxLoginReq struct {
 	Code string `description:"微信code"`
 }
@@ -20,65 +10,19 @@ type WxToken struct {
 	Id          int64
 }
 
-func GetWxAccessToken() (accessTokenStr string, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM wx_token LIMIT 1`
-	wxToken := new(WxToken)
-	err = o.Raw(sql).QueryRow(&wxToken)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return
-	}
-	//Token不存在
-	if wxToken == nil {
-		fmt.Println("wxToken is empty")
-		accessToken, err := GetWxToken()
-		if err != nil {
-			return "", err
-		}
-		if accessToken.AccessToken != "" {
-			expiresIn := time.Now().Add(time.Duration(accessToken.ExpiresIn) * time.Second).Unix()
-			addSql := "insert into wx_token (access_token,expires_in) values (?,?)"
-			_, err = o.Raw(addSql, accessToken.AccessToken, expiresIn).Exec()
-			accessTokenStr = accessToken.AccessToken
-		}
-		return accessTokenStr, err
-	} else {
-		//判断token是否过期
-		if time.Now().Unix() > wxToken.ExpiresIn {
-			accessToken, err := GetWxToken()
-			fmt.Println(accessToken)
-			if err != nil {
-				return "", err
-			}
-			if accessToken.AccessToken != "" {
-				expiresIn := time.Now().Add(time.Duration(accessToken.ExpiresIn) * time.Second).Unix()
-				updateSql := "update wx_token set access_token = ?,expires_in = ? "
-				_, err = o.Raw(updateSql, accessToken.AccessToken, expiresIn).Exec()
-				accessTokenStr = accessToken.AccessToken
-				fmt.Println("更新 TOKEN:", err)
-			}
-			return accessTokenStr, err
-		} else {
-			return wxToken.AccessToken, nil
-		}
-	}
-	return
+type WxTicket struct {
+	Errcode int    `json:"errcode"`
+	Errmsg  string `json:"errmsg"`
+	Ticket  string `json:"ticket"`
 }
 
-func GetWxToken() (item *WxAccessToken, err error) {
-	getUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + utils.WxPublicAppId + "&secret=" + utils.WxPublicAppSecret
-	result, err := http.Get(getUrl)
-	if err != nil {
-		return
-	}
-	err = json.Unmarshal(result, &item)
-	if err != nil {
-		fmt.Println("GetWxToken Unmarshal Err:%s", err.Error())
-		return
-	}
-	if item.Errmsg != "" {
-	}
-	return
+type WechatSign struct {
+	AppId     string
+	NonceStr  string
+	Timestamp int64
+	Url       string
+	Signature string
+	RawString string
 }
 
 type WxAccessToken struct {
@@ -101,30 +45,6 @@ type WxUsers struct {
 	NextOpenid string
 }
 
-func WxUsersGet() (openIdStr string) {
-	accessToken, err := GetWxAccessToken()
-	if err != nil {
-		utils.FileLog.Info("GetWxAccessToken Err:%s", err.Error())
-		return
-	}
-	url := "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken
-	result, err := http.Get(url)
-	if err != nil {
-		utils.FileLog.Info("GetUser Err:", err.Error())
-		return
-	}
-	item := new(WxUsers)
-	err = json.Unmarshal(result, &item)
-	if err != nil {
-		fmt.Println("Unmarshal Err:", err.Error())
-		return
-	}
-	openIdStr = strings.Join(item.Data.Openid, "','")
-	openIdStr = "'" + openIdStr + "'"
-	utils.FileLog.Info("openIdStr:%s", openIdStr)
-	return
-}
-
 type WxCheckContentJson struct {
 	AccessToken  string `json:"access_token"`
 	ExpiresIn    int    `json:"expires_in"`
@@ -135,27 +55,3 @@ type WxCheckContentJson struct {
 	Errcode      int    `json:"errcode"`
 	Errmsg       string `json:"errmsg"`
 }
-
-func WxCheckContent(content string) {
-	accessToken, err := GetWxAccessToken()
-	if err != nil {
-		utils.FileLog.Info("GetWxAccessToken Err:%s", err.Error())
-		return
-	}
-	url := "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + accessToken
-	fmt.Println(url)
-	result, err := http.Post(url, content)
-	if err != nil {
-		utils.FileLog.Info("GetUser Err:", err.Error())
-		return
-	}
-
-	item := new(WxCheckContentJson)
-	err = json.Unmarshal(result, &item)
-	if err != nil {
-		fmt.Println("Unmarshal Err:", err.Error())
-		return
-	}
-	fmt.Println(result)
-	return
-}

+ 58 - 0
services/wechat.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"hongze/hongze_cygxzs/models"
 	"hongze/hongze_cygxzs/utils"
 	"rdluck_tools/http"
 	"strconv"
@@ -135,3 +136,60 @@ type WxUserDetail struct {
 	Headimgurl string
 	Nickname   string
 }
+
+func GetWxAccessTokenByXzs() (accessTokenStr string, err error) {
+	//缓存校验
+	cacheKey := fmt.Sprint("xygxxzs_wxtoken")
+	accessTokenStr, _ = utils.Rc.RedisString("xygxxzs_wxtoken")
+	if accessTokenStr != "" {
+		accessTokens, err := utils.Rc.RedisString("xygxxzs_wxtoken")
+		if err != nil {
+			fmt.Println(err)
+		}
+		fmt.Println("string", accessTokens)
+		accessTokenStr = accessTokens
+	} else {
+		WxAccessToken, err := GetWxTokenByXzs()
+		if err != nil {
+			fmt.Println(err)
+		}
+		utils.Rc.SetNX(cacheKey, WxAccessToken.AccessToken, time.Second*7000)
+		accessTokenStr = WxAccessToken.AccessToken
+	}
+	return
+}
+
+//获取小助手的微信Token
+func GetWxTokenByXzs() (item *WxAccessToken, err error) {
+	getUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + utils.WxPublicAppId + "&secret=" + utils.WxPublicAppSecret
+	result, err := http.Get(getUrl)
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(result, &item)
+	if err != nil {
+		fmt.Println("GetWxToken Unmarshal Err:%s", err.Error())
+		return
+	}
+	if item.Errmsg != "" {
+	}
+	return
+}
+
+func GetWxTicket(accessToken string) (string, error) {
+	Url := strings.Join([]string{"https://api.weixin.qq.com/cgi-bin/ticket/getticket",
+		"?access_token=", accessToken,
+		"&type=jsapi"}, "")
+	infoBody, err := http.Get(Url)
+	if err != nil {
+		return "", err
+	}
+	atr := models.WxTicket{}
+	err = json.Unmarshal(infoBody, &atr)
+	fmt.Println("ticket result:", string(infoBody))
+	if err != nil {
+		return atr.Errmsg, err
+	} else {
+		return atr.Ticket, nil
+	}
+}