Quellcode durchsuchen

mini template send

ls vor 5 Jahren
Ursprung
Commit
4e96cdceff
2 geänderte Dateien mit 133 neuen und 4 gelöschten Zeilen
  1. 99 4
      wechat/mini.go
  2. 34 0
      wechat/structure.go

+ 99 - 4
wechat/mini.go

@@ -2,10 +2,13 @@ package wechat
 
 import (
 	"net/url"
+	"time"
+
+	"encoding/json"
 )
 
 func keyMini(appid string) string {
-	return "wechat:mini:" + appid
+	return "wechat:mini:client:" + appid
 }
 
 // NewMiniClient new mini client
@@ -20,13 +23,13 @@ func NewMiniClient(appID, appSecret string) *MiniClient {
 }
 
 // GetMiniOpenID get openid by code
-func (wc *MiniClient) GetMiniOpenID(frm FormCode) (openid string, err error) {
+func (mc *MiniClient) GetMiniOpenID(frm FormCode) (openid string, err error) {
 	uri := BaseURL + "/sns/jscode2session?"
 
 	args := url.Values{}
 	args.Add("grant_type", "authorization_code")
-	args.Add("appid", wc.AppID)
-	args.Add("secret", wc.AppSecret)
+	args.Add("appid", mc.AppID)
+	args.Add("secret", mc.AppSecret)
 	args.Add("js_code", frm.Code)
 
 	uri += args.Encode()
@@ -36,3 +39,95 @@ func (wc *MiniClient) GetMiniOpenID(frm FormCode) (openid string, err error) {
 	}
 	return
 }
+
+// getToken get token
+func (mc *MiniClient) getToken() (token string, err error) {
+	now := time.Now().Unix()
+	if mc.LastTokenTime > 0 {
+		if now-mc.LastTokenTime < TokenExpires {
+			token = mc.AccessToken
+			return
+		}
+	}
+	uri := BaseURL + "/cgi-bin/token?"
+
+	args := url.Values{}
+	args.Add("grant_type", "client_credential")
+	args.Add("appid", mc.AppID)
+	args.Add("secret", mc.AppSecret)
+
+	uri += args.Encode()
+	var res Response
+	if res, err = getJSON(uri); err == nil {
+		mc.LastTokenTime = now
+		mc.AccessToken = res.AccessToken
+		token = mc.AccessToken
+		key := keyMini(mc.AppID)
+		cache.Store(key, mc)
+	}
+	return
+}
+
+// TemplateList /cgi-bin/wxopen/template/list
+func (mc *MiniClient) TemplateList(offset, count int) (res Response, err error) {
+	uri := BaseURL + "/cgi-bin/wxopen/template/list?"
+
+	if mc.AccessToken, err = mc.getToken(); err != nil {
+		return
+	}
+	args := url.Values{}
+	args.Add("access_token", mc.AccessToken)
+
+	uri += args.Encode()
+
+	params := make(map[string]interface{})
+	params["offset"] = offset
+	params["count"] = count
+	data, err := json.Marshal(params)
+	if err != nil {
+		return
+	}
+	res, err = postJSON(uri, data)
+
+	return
+}
+
+// TemplateSend /cgi-bin/message/wxopen/template/send
+func (mc *MiniClient) TemplateSend(template MiniTemplateMessage) (res Response, err error) {
+	uri := BaseURL + "/cgi-bin/message/wxopen/template/send?"
+
+	if mc.AccessToken, err = mc.getToken(); err != nil {
+		return
+	}
+	args := url.Values{}
+	args.Add("access_token", mc.AccessToken)
+
+	uri += args.Encode()
+	data, err := json.Marshal(template)
+	if err != nil {
+		return
+	}
+	res, err = postJSON(uri, data)
+
+	return
+}
+
+// UniformSend /cgi-bin/message/wxopen/template/uniform_send
+func (mc *MiniClient) UniformSend(template MiniUniformMessage) (res Response, err error) {
+	uri := BaseURL + "/cgi-bin/message/wxopen/template/send?"
+
+	if mc.AccessToken, err = mc.getToken(); err != nil {
+		return
+	}
+	args := url.Values{}
+	args.Add("access_token", mc.AccessToken)
+
+	uri += args.Encode()
+	data, err := json.Marshal(template)
+	if err != nil {
+		return
+	}
+	res, err = postJSON(uri, data)
+
+	return
+}

+ 34 - 0
wechat/structure.go

@@ -218,6 +218,9 @@ type TemplateData struct {
 	Keyword4 *ValueColor `json:"keyword4,omitempty"`
 	Keyword5 *ValueColor `json:"keyword5,omitempty"`
 	Keyword6 *ValueColor `json:"keyword6,omitempty"`
+	Keyword7 *ValueColor `json:"keyword7,omitempty"`
+	Keyword8 *ValueColor `json:"keyword8,omitempty"`
+	Keyword9 *ValueColor `json:"keyword9,omitempty"`
 	Remark   *ValueColor `json:"remark,omitempty"`
 }
 
@@ -229,3 +232,34 @@ type TemplateMessage struct {
 	MiniProgram *MiniProgramPage `json:"miniprogram,omitempty"`
 	Data        TemplateData     `json:"data"`
 }
+
+// MiniTemplateMessage mini template message
+type MiniTemplateMessage struct {
+	ToUser     string       `json:"touser"`
+	TemplateID string       `json:"template_id"`
+	Page       string       `json:"page"`
+	FormID     string       `json:"form_id"`
+	Data       TemplateData `json:"data"`
+}
+
+type weappTemplateMessage struct {
+	TemplateID string       `json:"template_id"`
+	Page       string       `json:"page"`
+	FormID     string       `json:"form_id"`
+	Data       TemplateData `json:"data"`
+	Emphasis   string       `json:"emphasis_keyword"`
+}
+
+type mpTemplateMessage struct {
+	AppID      string          `json:"appid"`
+	TemplateID string          `json:"template_id"`
+	URL        string          `json:"url"`
+	Mini       MiniProgramPage `json:"miniprogram"`
+}
+
+// MiniUniformMessage mini uniform send
+type MiniUniformMessage struct {
+	ToUser string                `json:"touser"`
+	WeApp  *weappTemplateMessage `json:"weapp_template_msg"`
+	MP     *mpTemplateMessage    `json:"mp_template_msg"`
+}