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  }