| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package channel
- import (
- "encoding/json"
- "fmt"
- "message-pusher/common"
- "net/http"
- "time"
- )
- type wechatTestAccountResponse struct {
- ErrorCode int `json:"errcode"`
- ErrorMessage string `json:"errmsg"`
- AccessToken string `json:"access_token"`
- ExpiresIn int `json:"expires_in"`
- }
- type WeChatTestAccountTokenStoreItem struct {
- AppID string
- AppSecret string
- AccessToken string
- }
- func (i *WeChatTestAccountTokenStoreItem) Key() string {
- return i.AppID + i.AppSecret
- }
- func (i *WeChatTestAccountTokenStoreItem) Token() string {
- return i.AccessToken
- }
- func (i *WeChatTestAccountTokenStoreItem) Refresh() {
- // https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
- client := http.Client{
- Timeout: 5 * time.Second,
- }
- req, err := http.NewRequest("GET", fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",
- i.AppID, i.AppSecret), nil)
- if err != nil {
- common.SysError(err.Error())
- return
- }
- responseData, err := client.Do(req)
- if err != nil {
- common.SysError("failed to refresh access token: " + err.Error())
- return
- }
- defer responseData.Body.Close()
- var res wechatTestAccountResponse
- err = json.NewDecoder(responseData.Body).Decode(&res)
- if err != nil {
- common.SysError("failed to decode wechatTestAccountResponse: " + err.Error())
- return
- }
- if res.ErrorCode != 0 {
- common.SysError(res.ErrorMessage)
- return
- }
- i.AccessToken = res.AccessToken
- common.SysLog("access token refreshed")
- }
|