|
@@ -0,0 +1,80 @@
|
|
|
+package wechat
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "io/ioutil"
|
|
|
+ "kpt-tmr-group/pkg/logger/zaplog"
|
|
|
+ "kpt-tmr-group/pkg/xerr"
|
|
|
+ "net/http"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "go.uber.org/zap"
|
|
|
+)
|
|
|
+
|
|
|
+type ClientService struct {
|
|
|
+ AppID string
|
|
|
+ Secret string
|
|
|
+ authClient *http.Client
|
|
|
+}
|
|
|
+
|
|
|
+func NewClientService(appid, secret string) *ClientService {
|
|
|
+ return &ClientService{
|
|
|
+ AppID: appid,
|
|
|
+ Secret: secret,
|
|
|
+ authClient: &http.Client{
|
|
|
+ /*Transport: &http.Transport{
|
|
|
+ MaxIdleConnsPerHost: 50,
|
|
|
+ },*/
|
|
|
+ Timeout: time.Duration(5) * time.Second,
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (c *ClientService) doRequest(req *http.Request) ([]byte, error) {
|
|
|
+ resp, err := c.authClient.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("authClient.Do", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ b, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("ioutil.ReadAll", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ if resp.StatusCode != http.StatusOK {
|
|
|
+ if len(b) > 0 {
|
|
|
+ return nil, xerr.Customf("err:%v,body:%s", err, string(b))
|
|
|
+ } else {
|
|
|
+ return nil, xerr.Customf("err:%v", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return b, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *ClientService) DoGet(url string) ([]byte, error) {
|
|
|
+ req, err := http.NewRequest(http.MethodGet, url, nil)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("DoGet", err))
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ req.Header.Add("Accept", "application/json")
|
|
|
+ req.Header.Add("Content-Type", "application/json")
|
|
|
+ return c.doRequest(req)
|
|
|
+}
|
|
|
+
|
|
|
+func (c *ClientService) DoPost(url string, body interface{}) ([]byte, error) {
|
|
|
+ b, err := json.Marshal(body)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("DoPost-Marshal", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(b))
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("NewRequest", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ req.Header.Add("Accept", "application/json")
|
|
|
+ req.Header.Add("Content-Type", "application/json")
|
|
|
+ return c.doRequest(req)
|
|
|
+}
|