|
- package wx
-
- import (
- "applet/app/db"
- "applet/app/enum"
- "applet/app/md"
- "applet/app/utils"
- "applet/app/utils/cache"
- "encoding/json"
- "errors"
- )
-
- type OfficialAccount struct {
- AccessToken string `json:"access_token"`
- Appid string `json:"appid"`
- Secret string `json:"secret"`
- }
-
- func (officialAccount *OfficialAccount) Set() { // set方法
- sysCfgDb := db.SysCfgDb{}
- sysCfgDb.Set()
- officialAccount.Appid = sysCfgDb.SysCfgGetWithDb(enum.WxOfficialAccountAppId)
- officialAccount.Secret = sysCfgDb.SysCfgGetWithDb(enum.WxOfficialAccountAppSecret)
- officialAccount.AccessToken = officialAccount.createToken()
- }
-
- func (officialAccount *OfficialAccount) createToken() (accessToken string) {
- cacheKey := md.WxOfficialAccountCacheKey
- accessToken, _ = cache.GetString(cacheKey)
- if accessToken != "" {
- return
- }
-
- url := md.WxOfficialAccountRequestBaseUrl + enum.GetAccessToken
- post, err := utils.CurlPost(url, map[string]string{
- "appid": officialAccount.Appid,
- "secret": officialAccount.Secret,
- "grant_type": "client_credential",
- }, nil)
-
- utils.FilePutContents("wx_official_account_create_token", "resp"+string(post))
- var data md.CreateTokenResp
- err = json.Unmarshal(post, &data)
- if err != nil {
- return
- }
- if data.AccessToken == "" {
- panic(errors.New("获取 access_token 失败"))
- }
-
- accessToken = data.AccessToken
- cache.SetEx(cacheKey, accessToken, int(data.ExpiresIn-3600))
- return
- }
-
- func (officialAccount *OfficialAccount) QrcodeCreate(sceneStr string) (qrcodeUrl string, err error) {
- url := md.WxOfficialAccountRequestBaseUrl + enum.QrcodeCreate + "?access_token=" + officialAccount.AccessToken
- //post, err := utils.CurlPost(url, map[string]interface{}{
- // "action_name": "QR_LIMIT_STR_SCENE",
- // "action_info": map[string]interface{}{
- // "scene": map[string]string{
- // "scene_str": sceneStr,
- // },
- // },
- //}, nil)
- requestBody, _ := json.Marshal(map[string]interface{}{
- "action_name": "QR_STR_SCENE",
- "expire_seconds": "6000",
- "action_info": map[string]interface{}{
- "scene": map[string]string{
- "scene_str": sceneStr,
- },
- },
- })
- post, err := utils.CurlPost(url, requestBody, nil)
-
- utils.FilePutContents("wx_official_account_qrcode_create", "resp"+string(post))
- var data md.CreateQrcodeResp
- err = json.Unmarshal(post, &data)
- if err != nil {
- return
- }
- qrcodeUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + data.Ticket
- return
- }
|