mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-26 20:01:19 +08:00
153 lines
3.2 KiB
Go
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
|
|
}
|