github.com/bububa/oceanengine/marketing-api@v0.0.0-20210315120513-0b953137f7a6/core/client.go (about) 1 package core 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 8 "github.com/bububa/oceanengine/marketing-api/core/internal/debug" 9 "github.com/bububa/oceanengine/marketing-api/model" 10 ) 11 12 type SDKClient struct { 13 AppID string 14 Secret string 15 debug bool 16 sandbox bool 17 } 18 19 func NewSDKClient(appID string, secret string) *SDKClient { 20 return &SDKClient{ 21 AppID: appID, 22 Secret: secret, 23 } 24 } 25 26 func (c *SDKClient) SetDebug(debug bool) { 27 c.debug = debug 28 } 29 30 func (c *SDKClient) UseSandbox() { 31 c.sandbox = true 32 } 33 34 func (c *SDKClient) DisableSandbox() { 35 c.sandbox = false 36 } 37 38 func (c *SDKClient) Post(gw string, req model.PostRequest, resp model.Response, accessToken string) error { 39 var reqBytes []byte 40 if req != nil { 41 reqBytes = req.Encode() 42 } 43 reqUrl := fmt.Sprintf("%s%s", BASE_URL, gw) 44 debug.PrintPostJSONRequest(reqUrl, reqBytes, c.debug) 45 httpReq, err := http.NewRequest("POST", reqUrl, bytes.NewReader(reqBytes)) 46 httpReq.Header.Add("Content-Type", "application/json") 47 if accessToken != "" { 48 httpReq.Header.Add("Access-Token", accessToken) 49 } 50 if c.sandbox { 51 httpReq.Header.Add("X-Debug-Mode", "1") 52 } 53 if err != nil { 54 return err 55 } 56 57 httpResp, err := http.DefaultClient.Do(httpReq) 58 if err != nil { 59 return err 60 } 61 defer httpResp.Body.Close() 62 err = debug.DecodeJSONHttpResponse(httpResp.Body, resp, c.debug) 63 if err != nil { 64 debug.PrintError(err, c.debug) 65 return err 66 } 67 if resp.IsError() { 68 return resp 69 } 70 return nil 71 } 72 73 func (c *SDKClient) Get(gw string, req model.GetRequest, resp model.Response, accessToken string) error { 74 var reqQuery string 75 if req != nil { 76 reqQuery = req.Encode() 77 } 78 reqUrl := fmt.Sprintf("%s%s?%s", BASE_URL, gw, reqQuery) 79 debug.PrintGetRequest(reqUrl, c.debug) 80 httpReq, err := http.NewRequest("GET", reqUrl, nil) 81 if accessToken != "" { 82 httpReq.Header.Add("Access-Token", accessToken) 83 } 84 if c.sandbox { 85 httpReq.Header.Add("X-Debug-Mode", "1") 86 } 87 if err != nil { 88 return err 89 } 90 91 httpResp, err := http.DefaultClient.Do(httpReq) 92 if err != nil { 93 return err 94 } 95 defer httpResp.Body.Close() 96 err = debug.DecodeJSONHttpResponse(httpResp.Body, resp, c.debug) 97 if err != nil { 98 debug.PrintError(err, c.debug) 99 return err 100 } 101 if resp.IsError() { 102 return resp 103 } 104 return nil 105 }