rdluck 4 years ago
parent
commit
1282605f7e
3 changed files with 52 additions and 32 deletions
  1. 15 24
      controllers/wechat.go
  2. 6 0
      models/wechat.go
  3. 31 8
      services/wechat.go

+ 15 - 24
controllers/wechat.go

@@ -2,16 +2,11 @@ package controllers
 
 import (
 	"fmt"
-	"github.com/silenceper/wechat"
-	"github.com/silenceper/wechat/cache"
-
 	"hongze/hongze_api/models"
 	"hongze/hongze_api/services"
 	"hongze/hongze_api/utils"
 	"strconv"
 	"time"
-
-	offConfig "github.com/silenceper/wechat/v2/officialaccount/config"
 )
 
 type WechatController struct {
@@ -175,29 +170,26 @@ func (this *WechatController) GetWxSign() {
 		return
 	}
 
-	wc := wechat.NewWechat()
-	memory := cache.NewMemory()
-
-	cfg := &offConfig.Config{
-		AppID:     utils.WxAppId,
-		AppSecret: utils.WxAppSecret,
-		Token:     accessToken,
-		Cache:     memory,
-	}
-	oa := wc.GetOfficialAccount(cfg)
-	j := oa.GetJs()
-	config, err := j.GetConfig(getUrl)
+	ticket, err := services.GetWxTicket(accessToken)
 	if err != nil {
-		fmt.Println("获取失败:Err:" + err.Error())
+		br.Msg = "获取Ticket失败,请联系客服"
+		br.ErrMsg = "获取Ticket失败,Err" + err.Error()
 		return
 	}
-	fmt.Println(config)
+	if ticket == "" {
+		br.Msg = "获取Ticket失败,请联系客服"
+		br.ErrMsg = "ticket为空" + ticket
+		return
+	}
+	nonceStr := utils.GetRandStringNoSpecialChar(16)
+	signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
+
 	resp := new(models.WechatSign)
-	resp.AppId = config.AppID
-	resp.NonceStr = config.NonceStr
-	resp.Timestamp = config.Timestamp
+	resp.AppId = utils.WxAppId
+	resp.NonceStr = nonceString
+	resp.Timestamp = timestamp
 	resp.Url = getUrl
-	resp.Signature = config.Signature
+	resp.Signature = signature
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取签名成功"
@@ -205,6 +197,5 @@ func (this *WechatController) GetWxSign() {
 }
 
 /*
-$app->bag('api/wechat/getWxSign',"WechatController@getWxSign");
 $app->bag('api/wechat/check', "WechatController@check");
 */

+ 6 - 0
models/wechat.go

@@ -8,3 +8,9 @@ type WechatSign struct {
 	Signature string
 	RawString string
 }
+
+type WxTicket struct {
+	Errcode int    `json:"errcode"`
+	Errmsg  string `json:"errmsg"`
+	Ticket  string `json:"ticket"`
+}

+ 31 - 8
services/wechat.go

@@ -7,6 +7,8 @@ import (
 	"hongze/hongze_api/models"
 	"hongze/hongze_api/utils"
 	"rdluck_tools/http"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -130,11 +132,32 @@ func WxGetUserInfo(openId, accessToken string) (item *WxUserInfo, err error) {
 	return
 }
 
-/*
-   public static function wxGetUserInfo($openid,$accessToken){
-       $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$accessToken}&openid={$openid}";
-       $html = @file_get_contents($url);
-       $result = json_decode($html, true);
-       return $result;
-   }
-*/
+
+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
+	}
+}
+
+
+func GetWxSignature(ticket, url, noncestr string) (string, string, int64) {
+	timestamp := time.Now().Unix()
+	signStr := strings.Join([]string{"jsapi_ticket=", ticket,
+		"&noncestr=", noncestr,
+		"&timestamp=", strconv.FormatInt(timestamp, 10), "&url=", url}, "")
+	signature := utils.Sha1(signStr)
+	fmt.Println("signStr", signStr)
+	return signature, noncestr, timestamp
+}