package meituan_csr import ( "context" "fmt" "time" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/trace" "chengdu-lenntc/third-platform-sdk/client" "chengdu-lenntc/third-platform-sdk/util" ) // Api 调用第三方平台的api type MeituanCsrApi interface { GetLink(params PromotionLinkRequest) (*PromotionLinkResponse, error) Url(ctx context.Context, url string) string } type meituanCsrApiImpl struct { log logx.Logger client *Client } func newMeituanCsrApiImpl(log logx.Logger, client *Client) MeituanCsrApi { return &meituanCsrApiImpl{ log: log, client: client, } } func (a *meituanCsrApiImpl) GetLink(params PromotionLinkRequest) (*PromotionLinkResponse, error) { queryArgs := util.StructToMap(params) req := &client.HttpRequest{Headers: a.client.Headers, QueryArgs: queryArgs} response := new(PromotionLinkResponse) if err := a.client.HttpGet(GetLinkUrl, req, &client.HttpResponse{Result: response}); err != nil { return nil, err } return response, nil } func (a *meituanCsrApiImpl) Url(ctx context.Context, url string) string { requestId := trace.TraceIDFromContext(ctx) timestamp := time.Now().Unix() accessToken := a.generateAccessToken(timestamp) return fmt.Sprintf("%s?requestId=%s&version=%s&accessToken=%s&utmSource=%s×tamp=%d", url, requestId, "2.0", accessToken, a.client.authConfig.UtmSource, timestamp) } func (a *meituanCsrApiImpl) sign(params map[string]any) string { //kvPairs := util.MapToSliceByKeyValue(params) //sort.Strings(kvPairs) //paramStr := strings.Join(kvPairs, "") //return util.Md5String(a.SignKey + paramStr + a.SignKey) return "" } func (a *meituanCsrApiImpl) generateAccessToken(ts int64) string { //Access_token生成规则 //将媒体utmSource与时间戳(秒)拼接起来,然后使用AES加密生成。例如:utmSource为1000,时间戳1555510603,则access_token为AesEncode(10001555510603),每个token有效期为1小时 encodeStr, _ := a.client.authConfig.aes.Encode(fmt.Sprintf("%s%d", a.client.authConfig.UtmSource, ts)) return encodeStr }