Files
public/weixin/base.go
xxj 3d2086731f small camel
小驼峰
2021-03-03 11:45:18 +08:00

153 lines
3.2 KiB
Go

package weixin
import (
"encoding/json"
"io/ioutil"
"net/http"
"time"
"github.com/bitly/go-simplejson"
"github.com/xxjwxc/public/mycache"
"github.com/xxjwxc/public/myhttp"
"github.com/xxjwxc/public/mylog"
)
const (
_getTicket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token="
_getJsurl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token="
_getToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
_getSubscribe = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="
_cacheToken = "wx_access_token"
_cacheTicket = "weixin_card_ticket"
)
// GetAccessToken 获取微信accesstoken
// 获取登录凭证
func (_wx *wxTools) GetAccessToken() (accessToken string, err error) {
//先从缓存中获取 access_token
cache := mycache.NewCache(_cacheToken)
err = cache.Value(_cacheToken, &accessToken)
if err == nil {
return
}
var url = _getToken + _wx.wxInfo.AppID + "&secret=" + _wx.wxInfo.AppSecret
resp, err := http.Get(url)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
//注入client ip
js, err := simplejson.NewJson(body)
if err == nil {
accessToken, _ = js.Get("access_token").String()
//保存缓存
cache.Add(_cacheToken, &accessToken, time.Duration(7000)*time.Second)
//------------------end
}
//----------------------end
return
}
// GetAPITicket 获取微信卡券ticket
func (_wx *wxTools) GetAPITicket() (ticket string, err error) {
//先从缓存中获取
cache := mycache.NewCache(_cacheTicket)
err = cache.Value(_cacheTicket, &ticket)
if err == nil {
return
}
accessToken, e := _wx.GetAccessToken()
if e != nil {
mylog.Error(e)
err = e
return
}
var url = _getTicket + accessToken
resp, e1 := http.Get(url)
if e1 != nil {
mylog.Error(e1)
err = e1
return
}
defer resp.Body.Close()
body, e2 := ioutil.ReadAll(resp.Body)
if e2 != nil {
mylog.Error(e2)
err = e2
return
}
var result APITicket
json.Unmarshal(body, &result)
ticket = result.Ticket
//保存缓存
cache.Add(_cacheTicket, ticket, 7000*time.Second)
return
}
// GetJsTicket 获取微信js ticket
func (_wx *wxTools) GetJsTicket() (ticket string, err error) {
//先从缓存中获取
cache := mycache.NewCache("weixin_js_ticket")
err = cache.Value("base", &ticket)
if err == nil {
return
}
accessToken, e := _wx.GetAccessToken()
if e != nil {
mylog.Error(e)
err = e
return
}
var url = _getJsurl + accessToken
resp, e1 := http.Get(url)
if e1 != nil {
mylog.Error(e1)
err = e1
return
}
defer resp.Body.Close()
body, e2 := ioutil.ReadAll(resp.Body)
if e2 != nil {
mylog.Error(e2)
err = e2
return
}
var result APITicket
json.Unmarshal(body, &result)
ticket = result.Ticket
//保存缓存
cache.Add("base", ticket, 7000*time.Second)
return
}
// SendTemplateMsg 发送订阅消息
func (_wx *wxTools) SendTemplateMsg(msg TempMsg) bool {
accessToken, err := _wx.GetAccessToken()
if err != nil {
mylog.Error(err)
return false
}
bo, _ := json.Marshal(msg)
resb := myhttp.OnPostJSON(_getSubscribe+accessToken, string(bo))
var res ResTempMsg
json.Unmarshal(resb, &res)
return res.Errcode == 0
}