Browse Source

update response func

Ken 4 days ago
parent
commit
cb41e34b35
5 changed files with 81 additions and 33 deletions
  1. 18 0
      io.go
  2. 8 7
      wechat/client.go
  3. 26 6
      wechat/mini.go
  4. 24 20
      wechat/request.go
  5. 5 0
      wechat/response.go

+ 18 - 0
io.go

@@ -0,0 +1,18 @@
+package myth
+
+import (
+	"bytes"
+	"encoding/json"
+)
+
+// AnyToReader Any to bytes.Reader
+func AnyToReader(s any) (r *bytes.Reader, err error) {
+	var bs []byte
+	bs, err = json.Marshal(s)
+	if err != nil {
+		return
+	}
+
+	r = bytes.NewReader(bs)
+	return
+}

+ 8 - 7
wechat/client.go

@@ -361,15 +361,16 @@ func (wc Client) CreateMenu(menu FormMenu) (err error) {
 	if err != nil {
 		return
 	}
-	jq, e := msg.JSONQuery()
-	if e != nil {
-		err = e
+
+	var res ResponseMsg
+	err = msg.JSON(&res)
+	if err != nil {
 		return
 	}
-	code, _ := jq.Int(`errcode`)
-	errmsg, _ := jq.String(`errmsg`)
-	if code != ErrReqOk {
-		err = errors.New(errmsg)
+
+	if !res.Ok() {
+		err = errors.New(res.ErrMsg)
+		return
 	}
 
 	return

+ 26 - 6
wechat/mini.go

@@ -2,6 +2,7 @@ package wechat
 
 import (
 	"encoding/json"
+	"errors"
 	"fmt"
 	"net/url"
 	"time"
@@ -188,7 +189,7 @@ func (mc *MiniClient) GetPhoneInfo(frm FormCode) (res MiniPhoneInfo, err error)
 }
 
 // TemplateSend /cgi-bin/message/wxopen/template/send
-func (mc *MiniClient) TemplateSend(template MiniTemplateMessage) (jq *myth.JSONQuery, err error) {
+func (mc *MiniClient) TemplateSend(template MiniTemplateMessage) (res TemplateResponse, err error) {
 	uri := BaseURL + "/cgi-bin/message/wxopen/template/send?"
 
 	if mc.AccessToken, err = mc.getToken(); err != nil {
@@ -201,14 +202,24 @@ func (mc *MiniClient) TemplateSend(template MiniTemplateMessage) (jq *myth.JSONQ
 
 	var msg myth.HTTPMessage
 	msg, err = postJSON(uri, template)
-	if err == nil {
-		jq, err = msg.JSONQuery()
+	if err != nil {
+		return
 	}
+	err = msg.JSON(&res)
+	if err != nil {
+		return
+	}
+
+	if !res.Ok() {
+		err = errors.New(res.ErrMsg)
+		return
+	}
+
 	return
 }
 
 // UniformSend /cgi-bin/message/wxopen/template/uniform_send
-func (mc *MiniClient) UniformSend(template MiniUniformMessage) (jq *myth.JSONQuery, err error) {
+func (mc *MiniClient) UniformSend(template MiniUniformMessage) (res TemplateResponse, err error) {
 	uri := BaseURL + "/cgi-bin/message/wxopen/template/uniform_send?"
 
 	if mc.AccessToken, err = mc.getToken(); err != nil {
@@ -221,8 +232,17 @@ func (mc *MiniClient) UniformSend(template MiniUniformMessage) (jq *myth.JSONQue
 
 	var msg myth.HTTPMessage
 	msg, err = postJSON(uri, template)
-	if err == nil {
-		jq, err = msg.JSONQuery()
+	if err != nil {
+		return
+	}
+	err = msg.JSON(&res)
+	if err != nil {
+		return
+	}
+
+	if !res.Ok() {
+		err = errors.New(res.ErrMsg)
+		return
 	}
 
 	return

+ 24 - 20
wechat/request.go

@@ -11,28 +11,32 @@ import (
 )
 
 func checkJSONError(msg myth.HTTPMessage) (jq *myth.JSONQuery, err error) {
-	if msg.StatusCode == 200 {
-		jq, err = msg.JSONQuery()
-		if err != nil {
-			return
-		}
-		code := int(0)
-		code, err = jq.Int(`errcode`)
-		if code == ErrReqOk {
-			err = nil
-			return
-		}
-		if err == nil {
-			var msg string
-			msg, err = jq.String("errmsg")
-			if err != nil {
-				return
-			}
-			err = errors.New(msg)
-		}
-	} else {
+	if msg.StatusCode != 200 {
 		err = errors.New(`HTTP StatusCode not 200`)
+		return
+	}
+
+	jq, err = msg.JSONQuery()
+	if err != nil {
+		return
+	}
+	code := int(0)
+	code, err = jq.Int(`errcode`)
+	if err != nil {
+		return
 	}
+
+	if code == ErrReqOk {
+		return
+	}
+
+	var m string
+	m, err = jq.String("errmsg")
+	if err != nil {
+		return
+	}
+
+	err = errors.New(m)
 	return
 }
 

+ 5 - 0
wechat/response.go

@@ -11,6 +11,11 @@ var (
 	memcache sync.Map
 )
 
+// Ok 是否返回成功
+func (s *ResponseMsg) Ok() bool {
+	return s.ErrCode == ErrReqOk
+}
+
 // ToXML reply message to xml
 func (m ReplyMessage) ToXML() (data []byte, err error) {
 	return xml.Marshal(m)