package jingdong import ( "context" "github.com/gogf/gf/crypto/gmd5" "github.com/gogf/gf/encoding/gjson" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gtime" "github.com/gogf/gf/util/gconv" "gitlab.jxhh.com/stbz/library.git/logs" "strings" "time" ) type Config struct { ApiUrl string BasePathUrl string GetTokenUrl string RefreshTokenUrl string AppKey string AppSecret string UserName string PassWord string Mobile string Email string SubmitState string CompanyName string } type CommonRes struct { Success bool `json:"success"` ResultCode string `json:"resultCode"` ResultMessage string `json:"resultMessage"` } type client struct { *Config AccessToken string } type InvoiceType string const EI InvoiceType = "4" //电子发票 const VAT InvoiceType = "2" //增值税发票 var server *client const CacheKey = "jingdong:token" const pkgName = "jingdong" func New(config *Config) { _ = gconv.Scan(config, &server) return } //post 请求 func (s *client) post(ctx context.Context, method string, params g.Map) (str string, err error) { Start := gtime.TimestampMilli() Request := g.Client() Request.SetHeader("Content-Type", "application/x-www-form-urlencoded") resp, err := Request.Timeout(time.Second*5).Post(method, params) defer func() { _ = resp.Body.Close() paramStr := gjson.New(params).MustToJsonString() ctx = context.WithValue(ctx, "Method", "POST") ctx = context.WithValue(ctx, "URI", method) if err != nil { logs.Errorf(ctx, logs.FormatErr, paramStr, err.Error(), gtime.TimestampMilli()-Start) } else { logs.Infof(ctx, pkgName, logs.FormatSuc, paramStr, str, gtime.TimestampMilli()-Start) } }() if err != nil { return } str = resp.ReadAllString() return } //getSign 签名 func (s *client) getSign(timeStamp string) string { var str = s.AppSecret + timeStamp + s.AppKey + s.UserName return strings.ToUpper(gmd5.MustEncrypt(str + gmd5.MustEncrypt(s.PassWord) + "access_token" + s.AppSecret)) } // requestApi 请求 func (s *client) requestApi(ctx context.Context, method string, businessParams g.Map) (str string, err error) { params, err := s.createPostRequest(ctx, businessParams) if err != nil { return } urlMethod := s.ApiUrl + method str, err = s.post(ctx, urlMethod, params) return } func (s *client) createPostRequest(ctx context.Context, businessParams g.Map) (res g.Map, err error) { err = s.getAccessToken(ctx) if err != nil { return } res = g.Map{ "token": s.AccessToken, } if businessParams != nil { for k, v := range businessParams { res[k] = v } } return }