提交 4c7bd1f9 authored 作者: gukai's avatar gukai

Merge branch 'master' of https://gitlab.jxhh.com/stbz/library

* 'master' of https://gitlab.jxhh.com/stbz/library:
  国美
  国美
  阿里
......@@ -3,6 +3,7 @@ module gitlab.jxhh.com/stbz/library.git
go 1.16
require (
github.com/aliyun/aliyun-log-go-sdk v0.1.27
github.com/gogf/gf v1.16.6
github.com/kjk/betterguid v0.0.0-20170621091430-c442874ba63a
github.com/nsqio/go-nsq v1.1.0
......
package ali
import (
"context"
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"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"
"sort"
"strings"
"time"
)
type Config struct {
Wsurl string
ApiUrl string
AppKey string
AppSecret string
AccessToken string
}
type CommonRes struct {
Success bool `json:"success"`
ErrorCode string `json:"errorCode"`
ErrorMessage string `json:"errorMessage"`
}
var server *Config
const pkgName = "ali"
const WebSite = "1688"
func New(config *Config) {
server = config
return
}
func (s *Config) CreateSign(signStr string) (sign string) {
//拼接参数
appSecret := []byte(s.AppSecret)
mac := hmac.New(sha1.New, appSecret)
mac.Write([]byte(signStr))
mdStr := hex.EncodeToString(mac.Sum(nil))
sign = strings.ToUpper(mdStr)
return
}
func (s *Config) sign(method string, param g.Map) g.Map {
var keys []string
mewparam := param
for k := range mewparam {
keys = append(keys, k)
}
sort.Strings(keys)
var signStr string
for _, v := range keys {
if v != "_aop_signature" {
signStr += v
signStr += gconv.String(mewparam[v])
}
}
//拼接参数
signStr = "param2/1/" + method + "/" + s.AppKey + signStr
param["_aop_signature"] = s.CreateSign(signStr)
return param
}
func (s *Config) Post(ctx context.Context, method string, params g.Map) (str string, err error) {
Start := gtime.TimestampMilli()
allparams := s.sign(method, params)
Url := s.ApiUrl + method + "/" + s.AppKey
Request := g.Client()
Request.SetHeader("Content-Type", "application/x-www-form-urlencoded")
resp, err := Request.Timeout(time.Second*5).Post(Url, allparams)
defer func() {
_ = resp.Body.Close()
paramStr := gjson.New(params).MustToJsonString()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", Url)
if err != nil {
logs.Errorf(ctx, pkgName, logs.FormatErr, paramStr, err.Error(), gtime.TimestampMilli()-Start)
} else {
logs.Infof(ctx, pkgName, logs.FormatSuc, paramStr, str, gtime.TimestampMilli()-Start)
}
}()
str = resp.ReadAllString()
return
}
package ali
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type addressAli struct {
}
var Address = addressAli{}
type AddressParseRes struct {
Result struct {
Address string `json:"address"`
AddressCode string `json:"addressCode"`
IsDefault bool `json:"isDefault"`
Latest bool `json:"latest"`
PostCode string `json:"postCode"`
} `json:"result"`
}
type AddressGetRes struct {
Result struct {
Code string `json:"code"`
Name string `json:"name"`
ParentCode string `json:"parentCode"`
Post string `json:"post"`
Children []string `json:"children"`
} `json:"result"`
}
type AddressGetChildRes struct {
Result []struct {
Code string `json:"code"`
Name string `json:"name"`
ParentCode string `json:"parentCode"`
} `json:"result"`
}
//Parse 根据地址解析地区码
func (s *addressAli) Parse(ctx context.Context, req string) (res *AddressParseRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.parse"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"addressInfo": req,
})
_ = gjson.New(result).Scan(&res)
return
}
//Get 获取交易地址代码表详情
func (s *addressAli) Get(ctx context.Context, Code string) (res *AddressGetRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.get"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"areaCode": Code,
"webSite": WebSite,
})
_ = gjson.New(result).Scan(&res)
return
}
//GetChild 获取交易地址的下一级信息
func (s *addressAli) GetChild(ctx context.Context, Code string) (res *AddressGetChildRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.getchild"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"areaCode": Code,
"webSite": WebSite,
})
_ = gjson.New(result).Scan(&res)
return
}
package ali
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type goodsAli struct {
}
var Goods = goodsAli{}
type GoodsListReq struct {
Biztype string `json:"biztype"` //经营模式 【1:生产加工,2:经销批发,3:招商代理,4:商业服务】
BuyerProtection string `json:"buyerProtection"` //买家保障,多个值用逗号分割;【qtbh:7天包换;swtbh:15天包换】
City string `json:"city"` //所在地区- 市 示例:杭州
DeliveryTimeType string `json:"deliveryTimeType"` //发货时间;【1:24小时发货;2:48小时发货;3:72小时发货】
DescendOrder bool `json:"descendOrder"` //是否倒序;【正序: false;倒序:true】
HolidayTagId string `json:"holidayTagId"` //商品售卖类型筛选;枚举,多个值用分号分割;免费赊账:50000114
KeyWords string `json:"keyWords"` //搜索关键词
Page int `json:"page"` //页码
PageSize int `json:"pageSize"` //页面数量;最大20
AccessToken string `json:"access_token"`
}
type GoodsListRes struct {
Result struct {
*CommonRes
TotalCount int `json:"totalCount"` //总数
Result []struct {
Title string `json:"title"` //商品标题
ImgURL string `json:"imgUrl"` //商品首图
OfferID int64 `json:"offerId"` //商品id
SoldOut int `json:"soldOut"` //销量
Enable bool `json:"enable"` //是否有效
Profit string `json:"profit"` //利润空间; - :表示无 示例 300%-500%
CurrentPrice float64 `json:"currentPrice"` //分销价
OfferTags []string `json:"offerTags"` //标签数组
} `json:"result"`
} `json:"result"`
}
type GoodsInfoReq struct {
GoodsID int64 `json:"offerId"` //1688商品ID,等同于productId
NeedCpsSuggestPrice bool `json:"needCpsSuggestPrice"` //是否需要CPS建议价
NeedIntelligentInfo bool `json:"needIntelligentInfo"` //是否返回算法改写的信息,包括标题、图片和详情图片
AccessToken string `json:"access_token"`
}
type GoodsInfoRes struct {
*CommonRes
BizGroupInfos []struct {
Support bool `json:"support"`
Description string `json:"description"`
Code string `json:"code"`
} `json:"bizGroupInfos"`
ProductInfo struct {
ProductID int64 `json:"productID"`
CategoryID int `json:"categoryID"`
Subject string `json:"subject"`
Description string `json:"description"`
PictureAuth bool `json:"pictureAuth"`
Image struct {
Images []string `json:"images"`
} `json:"image"`
SkuInfos []struct {
Attributes []struct {
AttributeID int `json:"attributeID"`
AttributeValue string `json:"attributeValue"`
SkuImageURL string `json:"skuImageUrl"`
AttributeName string `json:"attributeName"`
} `json:"attributes"`
CargoNumber string `json:"cargoNumber"`
AmountOnSale int `json:"amountOnSale"`
Price float64 `json:"price"`
SkuID int64 `json:"skuId"`
SpecID string `json:"specId"`
ConsignPrice float64 `json:"consignPrice"`
ChannelPrice float64 `json:"channelPrice"`
} `json:"skuInfos"`
SaleInfo struct {
SupportOnlineTrade bool `json:"supportOnlineTrade"`
MixWholeSale bool `json:"mixWholeSale"`
PriceAuth bool `json:"priceAuth"`
PriceRanges []struct {
StartQuantity int `json:"startQuantity"`
Price float64 `json:"price"`
} `json:"priceRanges"`
AmountOnSale float64 `json:"amountOnSale"`
Unit string `json:"unit"`
MinOrderQuantity int `json:"minOrderQuantity"`
QuoteType int `json:"quoteType"`
} `json:"saleInfo"`
ShippingInfo struct {
FreightTemplateID int `json:"freightTemplateID"`
UnitWeight float64 `json:"unitWeight"`
SendGoodsAddressID int `json:"sendGoodsAddressId"`
SendGoodsAddressText string `json:"sendGoodsAddressText"`
FreightTemplate []struct {
AddressCodeText string `json:"addressCodeText"`
FromAreaCode string `json:"fromAreaCode"`
ID int `json:"id"`
ExpressSubTemplate struct {
SubTemplateDTO struct {
ChargeType int `json:"chargeType"`
IsSysTemplate bool `json:"isSysTemplate"`
ServiceType int `json:"serviceType"`
Type int `json:"type"`
} `json:"subTemplateDTO"`
RateList []struct {
IsSysRate bool `json:"isSysRate"`
ToAreaCodeText string `json:"toAreaCodeText"`
RateDTO struct {
FirstUnit int `json:"firstUnit"`
FirstUnitFee int `json:"firstUnitFee"`
NextUnit int `json:"nextUnit"`
NextUnitFee int `json:"nextUnitFee"`
} `json:"rateDTO"`
} `json:"rateList"`
} `json:"expressSubTemplate"`
LogisticsSubTemplate struct {
SubTemplateDTO struct {
ChargeType int `json:"chargeType"`
IsSysTemplate bool `json:"isSysTemplate"`
ServiceType int `json:"serviceType"`
Type int `json:"type"`
} `json:"subTemplateDTO"`
} `json:"logisticsSubTemplate"`
} `json:"freightTemplate"`
ChannelPriceFreePostage bool `json:"channelPriceFreePostage"`
ChannelPriceExcludeAreaCodes []struct {
Code string `json:"code"`
Name string `json:"name"`
} `json:"channelPriceExcludeAreaCodes"`
} `json:"shippingInfo"`
QualityLevel int `json:"qualityLevel"`
SupplierLoginID string `json:"supplierLoginId"`
CategoryName string `json:"categoryName"`
ReferencePrice string `json:"referencePrice"`
Attributes []struct {
AttributeID int `json:"attributeID"`
AttributeName string `json:"attributeName"`
Value string `json:"value"`
IsCustom bool `json:"isCustom"`
} `json:"attributes"`
Status string `json:"status"`
} `json:"productInfo"`
}
type GoodsFollowRes struct {
Code int `json:"code"`
Message int `json:"message"`
}
type GoodsGroupReq struct {
PageNo int64 `json:"pageNo"`
PageSize int64 `json:"pageSize"`
AccessToken string `json:"access_token"`
}
type GoodsGroupRes struct {
Result struct {
Result []struct {
CreateTime string `json:"createTime"`
FeedCount int `json:"feedCount"`
ID int `json:"id"`
Title string `json:"title"`
} `json:"result"`
*CommonRes
} `json:"result"`
}
type GoodsCategoryReq struct {
CategoryID int64 `json:"categoryID"`
AccessToken string `json:"access_token"`
}
type GoodsCategoryRes struct {
*CommonRes
CategoryInfo []struct {
CategoryID int `json:"categoryID"`
Name string `json:"name"`
IsLeaf bool `json:"isLeaf"`
ParentIDs []int `json:"parentIDs"`
MinOrderQuantity int `json:"minOrderQuantity"`
FeatureInfos []struct {
Key string `json:"key"`
Value string `json:"value"`
Status int `json:"status"`
Hierarchy bool `json:"hierarchy"`
} `json:"featureInfos"`
CategoryType string `json:"categoryType"`
IsSupportProcessing bool `json:"isSupportProcessing"`
} `json:"categoryInfo"`
}
//List 查询商品列表
func (goodsAli) List(ctx context.Context, req *GoodsListReq) (res *GoodsListRes, err error) {
method := "com.alibaba.p4p/alibaba.cps.op.searchCybOffers"
req.AccessToken = server.AccessToken
result, err := server.Post(ctx, method, gconv.Map(req))
_ = gjson.New(result).Scan(&res)
return
}
func (goodsAli) Info(ctx context.Context, req *GoodsInfoReq) (res *GoodsInfoRes, err error) {
method := "com.alibaba.product/alibaba.cpsMedia.productInfo"
req.AccessToken = server.AccessToken
result, err := server.Post(ctx, method, gconv.Map(req))
_ = gjson.New(result).Scan(&res)
return
}
//Follow 关注商品
func (goodsAli) Follow(ctx context.Context, GoodsID string) (res *GoodsFollowRes, err error) {
method := "com.alibaba.product/alibaba.product.follow"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"productId": GoodsID,
})
_ = gjson.New(result).Scan(&res)
return
}
//UnFollow 解除关注商品
func (goodsAli) UnFollow(ctx context.Context, GoodsID string) (res *GoodsFollowRes, err error) {
method := "com.alibaba.product/alibaba.product.unfollow.crossborder"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"productId": GoodsID,
})
_ = gjson.New(result).Scan(&res)
return
}
//Group 获取我的选品库列表
func (goodsAli) Group(ctx context.Context, req *GoodsGroupReq) (res *GoodsGroupRes, err error) {
method := "com.alibaba.p4p/alibaba.cps.op.listCybUserGroup"
req.AccessToken = server.AccessToken
result, err := server.Post(ctx, method, gconv.Map(req))
_ = gjson.New(result).Scan(&res)
return
}
func (goodsAli) Category(ctx context.Context, CategoryID interface{}) (res *GoodsCategoryRes, err error) {
method := "com.alibaba.product/alibaba.category.get"
var req = &GoodsCategoryReq{
CategoryID: gconv.Int64(CategoryID),
AccessToken: server.AccessToken,
}
result, err := server.Post(ctx, method, gconv.Map(req))
_ = gjson.New(result).Scan(&res)
return
}
差异被折叠。
差异被折叠。
package gome
import (
"context"
"errors"
"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/text/gstr"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/util/gutil"
"gitlab.jxhh.com/stbz/library.git/logs"
"time"
)
type Config struct {
ApiUrl string
AppKey string
AppSecret string
Version string
}
type Client struct {
*Config
AccessToken string
RefreshToken string
}
type CommonReq struct {
AppKey string `json:"app_key"`
Version string `json:"version"`
Method string `json:"method"`
AccessToken string `json:"access_token"`
Timestamp string `json:"timestamp"`
Param interface{} `json:"param"`
Sign string `json:"sign,omitempty"`
}
type CommonPageReq struct {
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type CommonPageRes struct {
PageSize int `json:"pageSize"`
PageNo int `json:"pageNo"`
TotalPage int `json:"totalPage"`
TotalCount int `json:"totalCount"`
}
type CommonRes struct {
Code string `json:"code"`
Message string `json:"message"`
SubCode string `json:"sub_code"`
SubMsg string `json:"sub_msg"`
}
var server *Client
const pkgName = "gome"
const CacheKey = "gome:token"
func New(config *Config) {
_ = gconv.Struct(config, &server)
return
}
func (s *Client) sign(req g.Map) string {
data := gjson.New(req)
_ = data.Remove("sign")
return gstr.ToUpper(gmd5.MustEncryptString(server.AppSecret + data.MustToJsonString() + server.AppSecret))
}
func (s *Client) post(ctx context.Context, method string, req interface{}) (str string, err error) {
Start := gtime.TimestampMilli()
allparams := &CommonReq{
AppKey: server.AppKey,
Version: server.Version,
Method: method,
AccessToken: server.AccessToken,
Timestamp: gtime.Now().String(),
Param: req,
}
allparams.Sign = s.sign(gconv.Map(allparams))
Request := g.Client()
Request.SetHeader("Content-Type", "application/json")
resp, err := Request.Timeout(time.Second*5).Post(server.ApiUrl, allparams)
defer func() {
paramStr := gjson.New(req).MustToJsonString()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", method)
if err != nil {
logs.Errorf(ctx, pkgName, logs.FormatErr, paramStr, err.Error(), gtime.TimestampMilli()-Start)
} else {
logs.Infof(ctx, pkgName, logs.FormatSuc, paramStr, str, gtime.TimestampMilli()-Start)
}
}()
str = resp.ReadAllString()
return
}
func (s *Client) requestApi(ctx context.Context, method string, req interface{}) (str string, err error) {
err = s.getAccessToken(ctx)
if err != nil {
return
}
str, err = s.post(ctx, method, req)
return
}
type accessToken struct {
AppKey string `json:"appKey"`
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresInSeconds int64 `json:"expiresInSeconds"`
CreateTime string `json:"createTime"`
}
//getAccessToken 获取token
func (s *Client) getAccessToken(ctx context.Context) (err error) {
var token *accessToken
cache, _ := g.Redis().DoVar("HGETALL", CacheKey)
if !cache.IsEmpty() {
_ = cache.Scan(&token)
if gtime.NewFromStr(token.CreateTime).Timestamp()+token.ExpiresInSeconds > gtime.Timestamp()-3600 {
s.AccessToken = token.AccessToken
return
}
return s.refreshToken(ctx, token)
}
res, err := Token.Get(ctx)
if err != nil {
return
}
if res.Code != "4000" {
err = errors.New(res.Message)
return
}
_, _ = g.Redis().Do("HMSET", append(g.Slice{CacheKey}, gutil.MapToSlice(gconv.Map(res.Data))...)...)
s.AccessToken = res.Data.AccessToken
return
}
//refreshToken 刷新token
func (s *Client) refreshToken(ctx context.Context, req *accessToken) (err error) {
if gtime.NewFromStr(req.CreateTime).Timestamp()+req.ExpiresInSeconds < gtime.Timestamp() {
_, err = g.Redis().DoVar("DEL", CacheKey)
return s.getAccessToken(ctx)
}
res, err := Token.Refresh(ctx, req.RefreshToken)
if err != nil {
return
}
if res.Code != "4000" {
err = errors.New(res.Message)
return
}
_, _ = g.Redis().Do("HMSET", append(g.Slice{CacheKey}, gutil.MapToSlice(gconv.Map(res.Data))...)...)
s.AccessToken = res.Data.AccessToken
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type addressGome struct {
}
var Address = addressGome{}
type AddressCommonRes struct {
*CommonRes
Data struct {
AreaDtoList []struct {
AreaCode string `json:"areaCode"`
AreaLevel int `json:"areaLevel"`
ParentCode string `json:"parentCode"`
AreaName string `json:"areaName"`
Status int `json:"status"`
} `json:"areaDtoList"`
} `json:"data"`
}
//Province 省
func (addressGome) Province(ctx context.Context) (res *AddressCommonRes, err error) {
method := "alamein.basic.get.province"
req := g.Map{}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
func (addressGome) City(ctx context.Context, pid string) (res *AddressCommonRes, err error) {
method := "alamein.basic.get.city"
req := g.Map{
"parentCode": pid,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
func (addressGome) County(ctx context.Context, pid string) (res *AddressCommonRes, err error) {
method := "alamein.basic.get.county"
req := g.Map{
"parentCode": pid,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
func (addressGome) Town(ctx context.Context, pid string) (res *AddressCommonRes, err error) {
method := "alamein.basic.get.town"
req := g.Map{
"parentCode": pid,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
)
type brandGome struct {
}
var Brand = brandGome{}
type BrandRes struct {
*CommonRes
Data struct {
*CommonPageRes
Result []struct {
Code string `json:"code"`
Name string `json:"name"`
} `json:"result"`
} `json:"data"`
}
//Get 品牌列表
func (brandGome) Get(ctx context.Context, req *CommonPageReq) (res *BrandRes, err error) {
method := "alemein.basic.get.brand"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type categoryGome struct {
}
var Category = categoryGome{}
type CategoryRes struct {
*CommonRes
Data []struct {
Code string `json:"code"`
Level int `json:"level"`
ParentCode string `json:"parentCode"`
Name string `json:"name"`
} `json:"data"`
}
type CategoryPropertyRes struct {
*CommonRes
Data struct {
SaleProperties []struct {
PropertyID int `json:"propertyId"`
PropertyName string `json:"propertyName"`
PropertyType string `json:"propertyType"`
Required int `json:"required"`
} `json:"saleProperties"`
PropertyGroups []struct {
GroupID int `json:"groupId"`
GroupName string `json:"groupName"`
SpecProperties []struct {
PropertyID int `json:"propertyId"`
PropertyName string `json:"propertyName"`
PropertyType string `json:"propertyType"`
} `json:"specProperties"`
} `json:"propertyGroups"`
} `json:"data"`
}
//Get 分类列表
func (categoryGome) Get(ctx context.Context, pid ...interface{}) (res *CategoryRes, err error) {
method := "alemein.basic.get.category"
req := g.Map{}
if len(pid) > 0 {
req["parentCode"] = pid[0]
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Property 获取品类商品属性
//`categoryId` 平台三级分类代码
func (goodsGome) Property(ctx context.Context, categoryId string) (res *CategoryPropertyRes, err error) {
method := "alamein.supplier.product.cat.get.property"
req := g.Map{
"categoryId": categoryId,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
差异被折叠。
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type logisticsGome struct {
}
var Logistics = logisticsGome{}
type GetLogisticsRes struct {
*CommonRes
Data struct {
LogisticsDtoList []struct {
LogisticsCode string `json:"logisticsCode"`
LogisticsName string `json:"logisticsName"`
} `json:"logisticsDtoList"`
} `json:"data"`
}
func (logisticsGome) Get(ctx context.Context) (res *GetLogisticsRes, err error) {
method := "alemein.basic.get.logistics"
req := g.Map{}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type orderGome struct {
}
var Order = orderGome{}
type CreateOrderReq struct {
OuterOrderId string `json:"outerOrderId"`
OnlinePayAmount int `json:"onlinePayAmount"`
ConsigneeInfo struct {
ReceiverName string `json:"receiverName"`
ReceiverMobile int64 `json:"receiverMobile"`
County int `json:"county"`
Town int `json:"town"`
StateName string `json:"stateName"`
CityName string `json:"cityName"`
CountyName string `json:"countyName"`
TownName string `json:"townName"`
DetailAddress string `json:"detailAddress"`
} `json:"consigneeInfo"`
SkuItems []struct {
OuterSkuItemId string `json:"outerSkuItemId"`
MchSkuId int `json:"mchSkuId"`
Quantity int `json:"quantity"`
DealPrice int `json:"dealPrice"`
MchWhseCode string `json:"mchWhseCode"`
} `json:"skuItems"`
}
type CreateOrderRes struct {
*CommonRes
Data bool `json:"data"`
}
type OrderInfoRes struct {
*CommonRes
Data struct {
OuterOrderId string `json:"outerOrderId"`
Finished string `json:"finished"`
DeliveryOrderList []struct {
DeliveryId string `json:"deliveryId"`
DeliveryStatus string `json:"deliveryStatus"`
SkuItemList []struct {
SkuItemId string `json:"skuItemId"`
OuterSkuItemId string `json:"outerSkuItemId"`
MchSkuId string `json:"mchSkuId"`
Quantity int `json:"quantity"`
} `json:"skuItemList"`
} `json:"deliveryOrderList"`
} `json:"data"`
}
type OrderStatusRes struct {
*CommonRes
Data struct {
DeliveryId string `json:"deliveryId"`
CurrentStatus string `json:"currentStatus"`
CurrentStatusTime string `json:"currentStatusTime"`
PastStatuses []struct {
Status string `json:"status"`
StatusTime string `json:"statusTime"`
} `json:"pastStatuses"`
} `json:"data"`
}
type OrderLogisticsRes struct {
*CommonRes
Data struct {
DeliveryId string `json:"deliveryId"`
CompanyCode string `json:"companyCode"`
CompanyName string `json:"companyName"`
CompanyPhone string `json:"companyPhone"`
WaybillCode string `json:"waybillCode"`
CourierName string `json:"courierName"`
CourierPhone string `json:"courierPhone"`
Tracks []struct {
TrackTime string `json:"trackTime"`
Description string `json:"description"`
} `json:"tracks"`
} `json:"data"`
}
type OrderCancelReq struct {
DeliveryId string `json:"deliveryId"`
OuterOrderId string `json:"outerOrderId"`
CancelTime string `json:"cancelTime"`
}
//Create 提交订单
func (orderGome) Create(ctx context.Context, req *CreateOrderReq) (res *CreateOrderRes, err error) {
method := "alamein.order.write.submitAndConfirm"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Info 订单详情
func (orderGome) Info(ctx context.Context, sn string) (res *OrderInfoRes, err error) {
method := "alamein.order.read.querySubmitAndConfirmResult"
var req = g.Map{
"outerOrderId": sn,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Status 订单关键状态查询
func (orderGome) Status(ctx context.Context, deliveryId string) (res *OrderStatusRes, err error) {
method := "alamein.order.read.queryKeyStatus"
var req = g.Map{
"deliveryId": deliveryId,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Logistics 物流
func (orderGome) Logistics(ctx context.Context, deliveryId string) (res *OrderLogisticsRes, err error) {
method := "alamein.order.read.queryLogisticsTrack"
var req = g.Map{
"deliveryId": deliveryId,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Cancel 支付后取消申请
func (orderGome) Cancel(ctx context.Context, req *OrderCancelReq) (res *CommonRes, err error) {
method := "alamein.order.read.queryLogisticsTrack"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type refundGome struct {
}
var Refund = refundGome{}
type ReturnCountReq struct {
DeliveryId string `json:"deliveryId"`
OuterOrderId string `json:"outerOrderId"`
SkuItemId string `json:"skuItemId"`
MchSkuId string `json:"mchSkuId"`
}
type ReturnCountRes struct {
*CommonRes
Data struct {
ReturnableQuantity int `json:"returnableQuantity"`
} `json:"data"`
}
type ServiceTypeReq struct {
DeliveryId string `json:"deliveryId"`
AddrCode string `json:"addrCode"`
SkuItemId string `json:"skuItemId"`
MchSkuId string `json:"mchSkuId"`
OuterOrderId string `json:"outerOrderId"`
}
type ServiceTypeRes struct {
*CommonRes
Data struct {
AfterServiceTypes []struct {
Code int `json:"code"`
Name string `json:"name"`
} `json:"afterServiceTypes"`
ReturnWareTypes []struct {
Code int `json:"code"`
Name string `json:"name"`
} `json:"returnWareTypes"`
} `json:"data"`
}
type RefundCreateReq struct {
AfterServiceType string `json:"afterServiceType"`
OuterAfterServiceId string `json:"outerAfterServiceId"`
SubmitTime string `json:"submitTime"`
OriginalOuterOrderId string `json:"originalOuterOrderId"`
OuterOrderId string `json:"outerOrderId"`
OriginalDeliveryId string `json:"originalDeliveryId"`
ReturnType string `json:"returnType"`
ReturnWareType string `json:"returnWareType"`
RefundAmount string `json:"refundAmount"`
PickWareInfo string `json:"pickWareInfo"`
PickWareTime string `json:"pickWareTime"`
Name string `json:"name"`
Phone string `json:"phone"`
Address string `json:"address"`
AddressCode string `json:"addressCode"`
AddressDetail string `json:"addressDetail"`
Address1 string `json:"address1"`
Address2 string `json:"address2"`
Address3 string `json:"address3"`
Address4 string `json:"address4"`
SkuItems struct {
OuterSkuItemId string `json:"outerSkuItemId"`
OriginalSkuItemId string `json:"originalSkuItemId"`
MchSkuId string `json:"mchSkuId"`
SkuQuantity string `json:"skuQuantity"`
SkuName string `json:"skuName"`
DealPrice string `json:"dealPrice"`
} `json:"skuItems"`
AfterSaleImages struct {
ImageInx string `json:"imageInx"`
ImageType string `json:"imageType"`
ImageUrl string `json:"imageUrl"`
} `json:"afterSaleImages"`
}
type RefundCreateRes struct {
*CommonRes
Data struct {
AfterServiceId string `json:"afterServiceId"`
} `json:"data"`
}
type RefundCancelReq struct {
AfterServiceType string `json:"afterServiceType"`
OutOrderId string `json:"outOrderId"`
CancelTime string `json:"cancelTime"`
CancelReasonType string `json:"cancelReasonType"`
CancelReasonDesc string `json:"cancelReasonDesc"`
}
type RefundAuditResultReq struct {
}
type RefundAuditResultRes struct {
*CommonRes
Data struct {
GomeAfterServiceId string `json:"gomeAfterServiceId"`
AuditPassed int `json:"auditPassed"`
AuditTime string `json:"auditTime"`
RejectedReasonType string `json:"rejectedReasonType"`
RejectedReasonDesc string `json:"rejectedReasonDesc"`
ReturnWareType string `json:"returnWareType"`
ServiceAddressInfo struct {
Address string `json:"address"`
Linkman string `json:"linkman"`
Phone string `json:"phone"`
} `json:"serviceAddressInfo"`
} `json:"data"`
}
type RefundSendReq struct {
AfterServiceId string `json:"afterServiceId"`
OuterOrderId string `json:"outerOrderId"`
DeliveryCompanyCode string `json:"deliveryCompanyCode"`
DeliveryCompanyName string `json:"deliveryCompanyName"`
WaybillCode string `json:"waybillCode"`
}
type RefundStatusRes struct {
*CommonRes
Data struct {
AfterServiceId string `json:"afterServiceId"`
CurrentStatus string `json:"currentStatus"`
CurrentStatusTime interface{} `json:"currentStatusTime"`
PastStatuses []struct {
Status string `json:"status"`
StatusTime string `json:"statusTime"`
} `json:"pastStatuses"`
} `json:"data"`
}
type RefundLogisticsRes struct {
*CommonRes
Data struct {
AfterServiceId string `json:"afterServiceId"`
CompanyCode string `json:"companyCode"`
CompanyName string `json:"companyName"`
CompanyPhone string `json:"companyPhone"`
WaybillCode string `json:"waybillCode"`
CourierName string `json:"courierName"`
CourierPhone string `json:"courierPhone"`
Tracks []struct {
TrackTime string `json:"trackTime"`
Description string `json:"description"`
} `json:"tracks"`
} `json:"data"`
}
//ReturnCount 商品可退货数量
func (refundGome) ReturnCount(ctx context.Context, req *ReturnCountReq) (res *ReturnCountRes, err error) {
method := "alamein.afterSale.read.queryCanReturnCount"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//ServiceType 查询可服务类型及退回方式
func (refundGome) ServiceType(ctx context.Context, req *ServiceTypeReq) (res *ServiceTypeRes, err error) {
method := "alamein.afterSale.read.queryCanServiceTypeAndReturnType"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Create 申请
func (refundGome) Create(ctx context.Context, req *RefundCreateReq) (res *RefundCreateRes, err error) {
method := "alamein.afterSale.write.submit"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Cancel 取消售后订单
func (refundGome) Cancel(ctx context.Context, req *RefundCancelReq) (res *CommonRes, err error) {
method := "alamein.afterSale.write.cancel"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
func (refundGome) AuditResult(ctx context.Context, refundSn string) (res *RefundAuditResultRes, err error) {
method := "alamein.afterSale.read.queryAuditResult"
var req = g.Map{
"afterServiceId": refundSn,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Send 顾客邮寄运单信息填写
func (refundGome) Send(ctx context.Context, req *RefundSendReq) (res *RefundSendReq, err error) {
method := "alamein.afterSale.write.deliveryByCustomer"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Status 状态查询
func (refundGome) Status(ctx context.Context, refundSn string) (res *RefundStatusRes, err error) {
method := "alamein.afterSale.read.queryKeyStatus"
var req = g.Map{
"afterServiceId": refundSn,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//Logistics 接收售后订单商品验货信息
func (refundGome) Logistics(ctx context.Context, refundSn string) (res *RefundLogisticsRes, err error) {
method := "alamein.afterSale.read.queryLogisticsTrack"
var req = g.Map{
"afterServiceId": refundSn,
}
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
)
type stockGome struct {
}
var Stock = stockGome{}
type GetWarehouseRes struct {
*CommonRes
Data struct {
*CommonPageRes
Data []struct {
MchWhseCode string `json:"mchWhseCode"`
MchWhseName string `json:"mchWhseName"`
IsNationWide int `json:"isNationWide"`
Status int `json:"status"`
LastUpateTime string `json:"lastUpateTime"`
} `json:"data"`
} `json:"data"`
}
type CoverAreaReq struct {
MchWhseCode string `json:"mchWhseCode"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type SaleAbleReq struct {
WhseSkuList []*SaleAbleItem `json:"whseSkuList"`
}
type SaleAbleItem struct {
MchWhseCode string `json:"mchWhseCode"`
MchSkuId string `json:"mchSkuId"`
}
type SaleAbleRes struct {
*CommonRes
Data []struct {
MchWhseCode string `json:"mchWhseCode"`
MchSkuId string `json:"mchSkuId"`
SaleableQty string `json:"saleableQty"`
} `json:"data"`
}
//GetWarehouse 分页查询商户仓库信息
func (stockGome) GetWarehouse(ctx context.Context, req *CommonPageReq) (res *GetWarehouseRes, err error) {
method := "alamein.stock.read.pageQueryWarehouse"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//CoverArea 分页查询仓市关系列表-按仓 todo
func (stockGome) CoverArea(ctx context.Context, req *CoverAreaReq) (res *CommonRes, err error) {
method := "alamein.stock.read.queryCoverArea"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//ForbidCoverArea todo
func (stockGome) ForbidCoverArea(ctx context.Context, req *CoverAreaReq) (res *CommonRes, err error) {
method := "alamein.stock.read.queryForbidCoverArea"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
//SaleAble 查询可卖数列表
func (stockGome) SaleAble(ctx context.Context, req *SaleAbleReq) (res *SaleAbleRes, err error) {
method := "alamein.stock.read.querySaleableQty"
result, err := server.requestApi(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
package gome
import (
"context"
"github.com/gogf/gf/encoding/gjson"
)
type tokenGome struct {
}
var Token = tokenGome{}
type GetTokenReq struct {
GrantType string `json:"grant_type"`
}
type TokenCommonRes struct {
*CommonRes
Data struct {
AppKey string `json:"appKey"`
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresInSeconds int64 `json:"expiresInSeconds"`
CreateTime string `json:"createTime"`
} `json:"data"`
}
type RefreshTokenReq struct {
GrantType string `json:"grant_type"`
RefreshToken string `json:"refresh_token"`
}
func (tokenGome) Get(ctx context.Context) (res *TokenCommonRes, err error) {
method := "token.create"
req := &GetTokenReq{GrantType: "authorization_secret"}
result, err := server.post(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
func (tokenGome) Refresh(ctx context.Context, refreshToken string) (res *TokenCommonRes, err error) {
method := "token.refresh"
req := &RefreshTokenReq{
GrantType: "authorization_code",
RefreshToken: refreshToken,
}
result, err := server.post(ctx, method, req)
if err != nil {
return
}
_ = gjson.New(result).Scan(&res)
return
}
......@@ -8,7 +8,6 @@ import (
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"gitlab.jxhh.com/stbz/library.git/logs"
"net/url"
"strings"
"time"
)
......@@ -50,16 +49,11 @@ func New(config *Config) {
}
//post 请求
func (s *client) post(ctx context.Context, method string, params g.MapStrStr) (str string, err error) {
func (s *client) post(ctx context.Context, method string, params g.Map) (str string, err error) {
Start := gtime.TimestampMilli()
postValues := url.Values{}
for k, v := range params {
postValues.Add(k, v)
}
postString := postValues.Encode()
Request := g.Client()
Request.SetHeader("Content-Type", "application/x-www-form-urlencoded")
resp, err := Request.Timeout(time.Second*5).Post(method, postString)
resp, err := Request.Timeout(time.Second*5).Post(method, params)
defer func() {
_ = resp.Body.Close()
paramStr := gjson.New(params).MustToJsonString()
......@@ -85,7 +79,7 @@ func (s *client) getSign(timeStamp string) string {
}
// requestApi 请求
func (s *client) requestApi(ctx context.Context, method string, businessParams g.MapStrStr) (str string, err error) {
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
......@@ -95,12 +89,12 @@ func (s *client) requestApi(ctx context.Context, method string, businessParams g
return
}
func (s *client) createPostRequest(ctx context.Context, businessParams g.MapStrStr) (res g.MapStrStr, err error) {
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.MapStrStr{
res = g.Map{
"token": s.AccessToken,
}
if businessParams != nil {
......
......@@ -3,6 +3,7 @@ package jingdong
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
......@@ -35,7 +36,7 @@ type GetTownRes struct {
//Parse 地址详情转换京东地址编码
func (addressJD) Parse(ctx context.Context, address string) (res *ParseRes, err error) {
method := "area/getJDAddressFromAddress"
param := map[string]string{
param := g.Map{
"address": address,
}
result, err := server.requestApi(ctx, method, param)
......@@ -50,7 +51,7 @@ func (addressJD) Parse(ctx context.Context, address string) (res *ParseRes, err
// CheckArea 验证地址有效性
func (addressJD) CheckArea(ctx context.Context, provinceId, cityId, countyId, townId interface{}) (res *CommonRes, err error) {
method := "area/checkArea"
param := map[string]string{
param := g.Map{
"provinceId": gconv.String(provinceId),
"cityId": gconv.String(cityId),
"countyId": gconv.String(countyId),
......@@ -68,7 +69,7 @@ func (addressJD) CheckArea(ctx context.Context, provinceId, cityId, countyId, to
// GetTown 查询四级地址
func (addressJD) GetTown(ctx context.Context, id interface{}) (res *GetTownRes, err error) {
method := "area/getTown"
param := map[string]string{
param := g.Map{
"id": gconv.String(id),
}
result, err := server.requestApi(ctx, method, param)
......
......@@ -2,6 +2,7 @@ package jingdong
import (
"context"
"encoding/json"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
......@@ -31,6 +32,10 @@ type CheckOnSaleRes struct {
State int `json:"state"` //1:上架,0:下架
} `json:"result"`
}
type GetStockMidRes struct {
*CommonRes
Result string `json:"result"`
}
type GetStockRes struct {
*CommonRes
......@@ -48,6 +53,11 @@ type GetStockRes struct {
} `json:"result"`
}
type CheckAreaMidRes struct {
*CommonRes
Result string `json:"result"`
}
type CheckAreaLimitRes struct {
*CommonRes
Result []struct {
......@@ -102,6 +112,7 @@ type GetCategoryRes struct {
} `json:"categorys"`
} `json:"result"`
}
type GetSkuImageRes struct {
*CommonRes //异常代码(0010:返回数据为空;1001:参数为空;1003:参数值不正确/sku数量过多,目前最大支持100个商品)
Result map[string][]struct {
......@@ -110,11 +121,12 @@ type GetSkuImageRes struct {
Path string `json:"path"` //图片路径
} `json:"result"`
}
type GetSimilarSkuRes struct {
*CommonRes
Result []struct {
Dim int `json:"dim"` //维度
SaleName string `json:"saleName"` //销售名称
Dim int `json:"dim"` //维度
SaleName string `json:"saleName"` //销售名称
SaleAttrList []struct { //商品销售标签 销售属性下可能只有一个标签,此种场景可以选择显示销售名称和标签,也可以不显示
ImagePath string `json:"imagePath"` //标签图片地址
SaleValue string `json:"saleValue"` //标签名称
......@@ -128,7 +140,7 @@ type GetSimilarSkuRes struct {
// CheckSale 商品可售验证接口
func (goodsJD) CheckSale(ctx context.Context, req *garray.Array) (res *CheckSaleRes, err error) {
method := "product/check"
param := map[string]string{
param := g.Map{
"skuIds": req.Join(","),
}
result, err := server.requestApi(ctx, method, param)
......@@ -143,7 +155,7 @@ func (goodsJD) CheckSale(ctx context.Context, req *garray.Array) (res *CheckSale
// CheckOnSale 查询商品上下架状态
func (goodsJD) CheckOnSale(ctx context.Context, req *garray.Array) (res *CheckOnSaleRes, err error) {
method := "product/skuState"
param := map[string]string{
param := g.Map{
"sku": req.Join(","),
}
result, err := server.requestApi(ctx, method, param)
......@@ -155,24 +167,34 @@ func (goodsJD) CheckOnSale(ctx context.Context, req *garray.Array) (res *CheckOn
}
//GetStock 查询商品库存
func (goodsJD) GetStock(ctx context.Context, req *garray.Array, area string) (res *GetStockRes, err error) {
func (goodsJD) GetStock(ctx context.Context, req []*SkuNums, area string) (res *GetStockRes, err error) {
method := "stock/getNewStockById"
param := map[string]string{
"skuNums": req.Join(","),
param := g.Map{
"skuNums": gjson.New(req).MustToJsonString(),
"area": area,
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
var middle *GetStockMidRes
err = gjson.New(result).Scan(&middle)
if err != nil {
return
}
err = gjson.New(middle.CommonRes).Scan(&res)
if err != nil {
return
}
err = gjson.New(middle.Result).Scan(&res.Result)
return
}
// CheckAreaLimit 查询商品区域购买限制
func (goodsJD) CheckAreaLimit(ctx context.Context, skuIds *garray.Array, provinceID, cityID, countyID, townID interface{}) (res *CheckAreaLimitRes, err error) {
method := "product/checkAreaLimit"
param := map[string]string{
param := g.Map{
"skuIds": skuIds.Join(","),
"province": gconv.String(provinceID),
"city": gconv.String(cityID),
......@@ -183,15 +205,23 @@ func (goodsJD) CheckAreaLimit(ctx context.Context, skuIds *garray.Array, provinc
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
var middle *CheckAreaMidRes
err = gjson.New(result).Scan(&middle)
if err != nil {
return
}
err = gjson.New(middle.CommonRes).Scan(&res)
if err != nil {
return
}
err = gjson.New(middle.Result).Scan(&res.Result)
return
}
//GetProductsPrice 查询商品价格
func (goodsJD) GetProductsPrice(ctx context.Context, skus *garray.Array) (res *GetProductsPriceRes, err error) {
method := "price/getSellPrice"
param := map[string]string{
param := g.Map{
"sku": skus.Join(","),
"queryExts": "marketPrice",
}
......@@ -206,7 +236,7 @@ func (goodsJD) GetProductsPrice(ctx context.Context, skus *garray.Array) (res *G
//GetDetail 查询商品详情
func (goodsJD) GetDetail(ctx context.Context, skus *garray.Array) (res *GetDetailRes, err error) {
method := "product/getDetail"
param := map[string]string{
param := g.Map{
"sku": skus.Join(","),
"queryExts": "spuId,pName,isFactoryShip,isSelf,LowestBuy,wxintroduction",
}
......@@ -221,7 +251,7 @@ func (goodsJD) GetDetail(ctx context.Context, skus *garray.Array) (res *GetDetai
//GetCategory 查询分类列表
func (goodsJD) GetCategory(ctx context.Context, pageNo, pageSize interface{}) (res *GetCategoryRes, err error) {
method := "product/getCategorys"
param := g.MapStrStr{
param := g.Map{
"pageNo": gconv.String(pageNo),
"pageSize": gconv.String(pageSize),
}
......@@ -236,22 +266,22 @@ func (goodsJD) GetCategory(ctx context.Context, pageNo, pageSize interface{}) (r
//GetSkuImage 查询商品图片
func (goodsJD) GetSkuImage(ctx context.Context, skus *garray.Array) (res *GetSkuImageRes, err error) {
method := "product/skuImage"
param := map[string]string{
param := g.Map{
"sku": skus.Join(","),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
err = json.Unmarshal([]byte(result), &res)
return
}
//GetSimilarSku 查询同类商品
func (goodsJD) GetSimilarSku(ctx context.Context, skus *garray.Array) (res *GetSimilarSkuRes, err error) {
func (goodsJD) GetSimilarSku(ctx context.Context, skus interface{}) (res *GetSimilarSkuRes, err error) {
method := "product/getSimilarSku"
param := map[string]string{
"sku": skus.Join(","),
param := g.Map{
"skuId": skus,
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
......
......@@ -4,6 +4,7 @@ import (
"context"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type msgJD struct {
......@@ -54,7 +55,7 @@ type DelPushMessages struct {
//102:专票资质审核进度消息 {"completeDate":"2019-01-09 00:19:14","pushDate":"2019-01-09 00:19:16","pins":"测试","reason":"财务审批通过","status":2,"unitName":"广州市翎唯营销策划有限公司","submitDate":"2018-09-25 15:56:47","taxpayerId":"914401055697802911","vatId":462260}
func (msgJD) GetPushMessages(ctx context.Context, id *garray.Array) (res *GetPushMessages, err error) {
method := "message/get"
param := map[string]string{
param := g.Map{
"type": id.Join(","),
}
result, err := server.requestApi(ctx, method, param)
......@@ -68,7 +69,7 @@ func (msgJD) GetPushMessages(ctx context.Context, id *garray.Array) (res *GetPus
//DeletePushMessage 删除消息
func (msgJD) DeletePushMessage(ctx context.Context, id *garray.Array) (res *DelPushMessages, err error) {
method := "message/del"
param := map[string]string{
param := g.Map{
"id": id.Join(","),
}
result, err := server.requestApi(ctx, method, param)
......
......@@ -133,7 +133,7 @@ type SkuNums struct {
// GetDelivery 物流信息
func (*orderJD) GetDelivery(ctx context.Context, OrderID string) (res *GetDeliveryRes, err error) {
method := "order/orderTrack"
param := g.MapStrStr{
param := g.Map{
"jdOrderId": OrderID,
"waybillCode": "1",
}
......@@ -148,7 +148,7 @@ func (*orderJD) GetDelivery(ctx context.Context, OrderID string) (res *GetDelive
// PlaceOrder 下单
func (orderJD) PlaceOrder(ctx context.Context, req *PlaceOrderReq) (res *PlaceOrderRes, err error) {
method := "order/submitOrder"
var param = g.MapStrStr{
var param = g.Map{
"thirdOrder": req.OrderSn,
"sku": gjson.New(req.SkuNums).MustToJsonString(),
"orderPriceSnap": gjson.New(req.PriceSnap).MustToJsonString(),
......@@ -182,7 +182,7 @@ func (orderJD) PlaceOrder(ctx context.Context, req *PlaceOrderReq) (res *PlaceOr
// ReflectOrder 反查订单
func (orderJD) ReflectOrder(ctx context.Context, thirdOrder string) (res *ReflectOrderRes, err error) {
method := "order/selectJdOrderIdByThirdOrder"
param := g.MapStrStr{
param := g.Map{
"thirdOrder": thirdOrder,
}
result, err := server.requestApi(ctx, method, param)
......@@ -196,7 +196,7 @@ func (orderJD) ReflectOrder(ctx context.Context, thirdOrder string) (res *Reflec
// GetOrderInfo 订单详情
func (orderJD) GetOrderInfo(ctx context.Context, OrderID string) (res *GetOrderRes, err error) {
method := "order/selectJdOrder"
param := g.MapStrStr{
param := g.Map{
"jdOrderId": OrderID,
}
result, err := server.requestApi(ctx, method, param)
......@@ -210,7 +210,7 @@ func (orderJD) GetOrderInfo(ctx context.Context, OrderID string) (res *GetOrderR
// GetFreight 查询运费
func (orderJD) GetFreight(ctx context.Context, sku []*SkuNums, province, city, county, town string) (res *GetFreightRes, err error) {
method := "order/getFreight"
param := g.MapStrStr{
param := g.Map{
"sku": gjson.New(sku).MustToJsonString(),
"province": province,
"city": city,
......@@ -229,7 +229,7 @@ func (orderJD) GetFreight(ctx context.Context, sku []*SkuNums, province, city, c
// ConfirmReceived 确认收货
func (orderJD) ConfirmReceived(ctx context.Context, OrderID string) (res *CommonRes, err error) {
method := "order/confirmReceived"
param := g.MapStrStr{
param := g.Map{
"jdOrderId": OrderID,
}
result, err := server.requestApi(ctx, method, param)
......
......@@ -136,14 +136,22 @@ type CodeItem struct {
type GetReturnTypeRes struct {
*CommonRes
Result []*CodeItem `json:"result"`//服务类型码:上门取件(4)、客户发货(40)、客户送货(7) 服务类型名称:上门取件、客户发货、客户送货
Result []*CodeItem `json:"result"` //服务类型码:上门取件(4)、客户发货(40)、客户送货(7) 服务类型名称:上门取件、客户发货、客户送货
}
type UpdateSendSkuReq struct {
AfsServiceId string `json:"afsServiceId"`
DeliverDate string `json:"deliverDate"`
ExpressCode string `json:"expressCode"`
ExpressCompany string `json:"expressCompany"`
FreightMoney int `json:"freightMoney"`
}
// UpdateSendSku 根据填写单号
func (refundJD) UpdateSendSku(ctx context.Context, postData string) (res *CommonRes, err error) {
func (refundJD) UpdateSendSku(ctx context.Context, req *UpdateSendSkuReq) (res *CommonRes, err error) {
method := "afterSale/updateSendSku"
param := g.MapStrStr{
"param": postData,
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
if err != nil {
......@@ -156,7 +164,7 @@ func (refundJD) UpdateSendSku(ctx context.Context, postData string) (res *Common
//AuditCancel 取消服务单
func (refundJD) AuditCancel(ctx context.Context, postData string) (res *CommonRes, err error) {
method := "afterSale/auditCancel"
param := g.MapStrStr{
param := g.Map{
"param": postData,
}
result, err := server.requestApi(ctx, method, param)
......@@ -174,7 +182,7 @@ func (refundJD) RefundCancel(ctx context.Context, id interface{}) (res *RefundCa
"serviceIdList": gconv.Ints(id),
"approveNotes": "取消售后",
}
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......@@ -188,7 +196,7 @@ func (refundJD) RefundCancel(ctx context.Context, id interface{}) (res *RefundCa
// Apply 申请售后服务(退货、换货、维修)
func (refundJD) Apply(ctx context.Context, req *ApplyReq) (res *CommonRes, err error) {
method := "afterSale/createAfsApply"
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......@@ -200,11 +208,11 @@ func (refundJD) Apply(ctx context.Context, req *ApplyReq) (res *CommonRes, err e
}
// GetServiceList 查询服务单根据客户账号和订单号分页查询服务单概要信息
func (refundJD) GetServiceList(ctx context.Context, req string) (res *GetServiceListRes, err error) {
func (refundJD) GetServiceList(ctx context.Context, OrderSn string) (res *GetServiceListRes, err error) {
method := "afterSale/getServiceListPage"
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(&GetServiceListReq{
JdOrderID: req,
JdOrderID: OrderSn,
PageIndex: 1,
PageSize: 100,
}).MustToJsonString(),
......@@ -222,7 +230,7 @@ func (refundJD) GetServiceDetail(ctx context.Context, req string) (res *GetServi
method := "afterSale/getServiceDetailInfo"
var reqJson = gjson.New("")
_ = reqJson.Set("afsServiceId", req)
param := g.MapStrStr{
param := g.Map{
"param": reqJson.MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......@@ -236,7 +244,7 @@ func (refundJD) GetServiceDetail(ctx context.Context, req string) (res *GetServi
// CheckIsSupport 查询订单商品是否允许售后
func (refundJD) CheckIsSupport(ctx context.Context, req *RefundCommonReq) (res *CheckIsSupportRes, err error) {
method := "afterSale/getAvailableNumberComp"
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......@@ -250,7 +258,7 @@ func (refundJD) CheckIsSupport(ctx context.Context, req *RefundCommonReq) (res *
// GetSupportType 查询订单商品售后类型
func (refundJD) GetSupportType(ctx context.Context, req *RefundCommonReq) (res *GetSupportTypeRes, err error) {
method := "afterSale/getCustomerExpectComp"
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......@@ -265,7 +273,7 @@ func (refundJD) GetSupportType(ctx context.Context, req *RefundCommonReq) (res *
// GetReturnType 查询支持的商品返回京东方式
func (refundJD) GetReturnType(ctx context.Context, req *RefundCommonReq) (res *GetReturnTypeRes, err error) {
method := "afterSale/getWareReturnJdComp"
param := g.MapStrStr{
param := g.Map{
"param": gjson.New(req).MustToJsonString(),
}
result, err := server.requestApi(ctx, method, param)
......
......@@ -44,7 +44,7 @@ func (s *client) getAccessToken(ctx context.Context) (err error) {
}
timeStamp := gtime.Now().String()
sign := s.getSign(timeStamp)
var params = g.MapStrStr{
var params = g.Map{
"grant_type": "access_token",
"client_id": s.AppKey,
"timestamp": timeStamp,
......@@ -80,7 +80,7 @@ func (s *client) refreshToken(ctx context.Context, req *accessToken) (err error)
_, err = g.Redis().DoVar("DEL", CacheKey)
return s.getAccessToken(ctx)
}
var params = g.MapStrStr{
var params = g.Map{
"refresh_token": req.RefreshToken,
"client_id": s.AppKey,
"client_secret": s.AppSecret,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论