123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package lic
- import (
- "bytes"
- "context"
- "encoding/xml"
- "fmt"
- "net/http"
- "time"
- model "go-common/app/job/main/tv/model/pgc"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- const (
- _normalCode = "0000"
- )
- func (d *Dao) callLic(c context.Context, url string, xmlBody string) (result *model.Document, err error) {
- var resp []byte
- result = &model.Document{}
- req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer([]byte(xmlBody)))
- if err != nil {
- log.Error("http.NewRequest err - %v", err)
- return
- }
- req.Header.Add("Content-Type", "text/xml; charset=utf-8")
- if resp, err = d.client.Raw(c, req); err != nil {
- log.Error("ClientGet error[%v]", err)
- return
- }
- if err = xml.Unmarshal(resp, result); err != nil {
- log.Error("XML Unmarshal %s, Error %v", string(resp), err)
- return
- }
- if result == nil || result.Response == nil {
- err = errors.Wrap(err, "Response Empty Error")
- return
- }
- if result.Response.ResponseCode != _normalCode {
- err = fmt.Errorf("Response Code Error %s", result.Response.ResponseCode)
- return
- }
- if result.Response.ErrorList != nil && result.Response.ErrorList.Error != nil {
- log.Warn("Response Error %v", result.Response.ErrorList.Error)
- }
- return
- }
- // CallRetry retries the xml call
- func (d *Dao) CallRetry(c context.Context, url string, xmlBody string) (result *model.Document, err error) {
- log.Info("callLic URL: %s, Body %s", url, xmlBody)
- for i := 0; i < 3; i++ {
- result, err = d.callLic(c, url, xmlBody)
- if err == nil {
- break
- }
- time.Sleep(10 * time.Second) // 5 seconds gap for each retrial
- }
- return
- }
|