677 lines
34 KiB
Go
677 lines
34 KiB
Go
package jdshopapi
|
||
|
||
import (
|
||
"encoding/base64"
|
||
"encoding/json"
|
||
"fmt"
|
||
"strings"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
type FindShopCategoriesResult struct {
|
||
CID int64 `json:"cid"` //123456 分类编号
|
||
VenderID int `json:"vender_id"` //123456 商家编号
|
||
ShopID int `json:"shop_id"` // 123456 店铺编号
|
||
ParentCID int64 `json:"parent_cid"` //123456 父分类编号
|
||
OrderNo int `json:"order_no"` //1 分类排序
|
||
Name string `json:"name"` //分类1 分类名称
|
||
IsOpen bool `json:"is_open"` //false 是否展开子分类(false,不展开;true,展开)
|
||
IsHomeShow bool `json:"is_home_show"` //false 是否在首页展示分类(false,前台不展示,true前台展示
|
||
Status int `json:"status"` // 1 状态(1:删除 1:正常)
|
||
CreateTime int64 `json:"create_time"` //1394089643000 创建时间
|
||
ModifyTime int64 `json:"modify_time"` // 修改时间。每修改一次此值都会发生变化。
|
||
}
|
||
|
||
type FindVendorCategoriesResult struct {
|
||
ID int `json:"id"`
|
||
Fid int `json:"fid"`
|
||
AliasName string `json:"aliasName"`
|
||
Lev int `json:"lev"`
|
||
IndexID int `json:"indexId"`
|
||
Status int `json:"status"`
|
||
Created int64 `json:"created"`
|
||
Name string `json:"name"`
|
||
Modified int64 `json:"modified"`
|
||
}
|
||
|
||
type CreateSkuParamWare struct {
|
||
Title string `json:"title"` //是 无 商品名称(限制50个字符以内)
|
||
CategoryID int `json:"categoryId"` //是 无 已经授权过的京东“三级”类目(通过商家授权类目接口获取)
|
||
MultiCategoryID int `json:"multiCategoryId,omitempty"` //否 无 末级类目ID
|
||
BrandID int `json:"brandId"` //否 无 不同类目是否必填情况不同,若发布时提示[此类目要求品牌必填],则表示品牌需要必填。品牌ID获取方式通过商家授权类目接口获取。
|
||
// TemplateID int `json:"templateId"` // 否 无 发布时不可设置
|
||
TransportID int `json:"transportId,omitempty"` //是 无 运费模板ID
|
||
WareStatus int `json:"wareStatus,omitempty"` // 否 新增仅可以使用 1:从未上架 8:在售(上架) 商品状态1:从未上架 2:自主下架 4:系统下架 8:在售 513:从未上架 待审核 514:自主下架 待审核 516:系统下架 待审核 520:在售 待审核 1025:从未上架 审核不通过 暂时没用 1026:自主下架 审核不通过 暂时没用 1028:系统下架 审核不通过 1032:在售 审核不通过
|
||
OuterID string `json:"outerId,omitempty"` // 否 无 商品外部ID,商家自行设置的ID(便于关联京东商品)
|
||
VenderID int `json:"venderId"`
|
||
// Is7ToReturn int `json:"is7ToReturn"` // 0 不支持,1 支持7天, 2支持90天
|
||
// ItemNum string `json:"itemNum"` // 否 无 商品货号
|
||
// BarCode string `json:"barCode"` // 否 无 商品的条形码.UPC码,SN码,PLU码统称为条形码
|
||
// WareLocation int `json:"wareLocation"` // 否 无 商品产出地区
|
||
// Delivery int `json:"delivery"` // 否 无 商品发货地
|
||
PromiseID int `json:"promiseId,omitempty"` // 否 无 配送时效
|
||
// adWords // 否 无 商品广告词对象 (单品页显示的优先级低于促销广告词)
|
||
// Wrap string `json:"wrap"` //否 无 包装规格(已废弃)
|
||
// PackListing string `json:"packListing"` // 否 无 商品包装清单
|
||
Length int `json:"length,omitempty"` // 否 无 商品长度,单位mm。根据类目区分 是 否必填
|
||
Width int `json:"width,omitempty"` // 否 无 商品宽度,单位mm。根据类目区分 是 否必填
|
||
Height int `json:"height,omitempty"` // 否 无 商品高度,单位mm。根据类目区分 是 否必填
|
||
Weight float64 `json:"weight,omitempty"` // 否 无 商品重量,单位kg。根据类目区分 是 否必填
|
||
// Props []struct {
|
||
// AttrID string `json:"attrID"` // 否 无 属性ID
|
||
// AttrValues string `json:"attrValues"` //否 无 属性值ID数组
|
||
// } `json:"props"` // 否 无 属性列表(已废弃 请使用multiCateProps,已经按照类目限制使用3级类目修改,请及时迁移到多级类目)
|
||
Features []*CreateSkuParamFeatures `json:"features,omitempty"` // 否 无 商品维度的特殊属性 目前两个特殊属性 IBS、FBP、FCS、SCF 4种商家类型【规格型号】 model和【销售单位】 unit 字段且为必填(如 个、盒、袋等)请勿填写公司名称。
|
||
Images []*CreateSkuParamImages `json:"images"` // 是 无 商品图片列表,发布时必须有主图(颜色为十个0,index为1的图片)
|
||
ShopCategorys []int `json:"shopCategorys"` // 否 无 商品店内分类(商家接口获取到的最末级的分类)
|
||
MobileDesc string `json:"mobileDesc"` // 是 无 移动版的商品介绍 长度限制10W个字符
|
||
Introduction string `json:"introduction"` // 是 无 PC版的商品介绍 长度限制10W个字符
|
||
// AfterSales string `json:"afterSales"` // 否 无 售后服务
|
||
JdPrice float64 `json:"jdPrice,omitempty"` // 否 无 商品的京东价,人民币单元 是元
|
||
MarketPrice float64 `json:"marketPrice"` // 否 无 商品的市场价,人民币单元 是元
|
||
// ZhuangBaID string `json:"zhuangBaId"` // 否 无 商品描述装吧实例ID
|
||
// IntroductionUseFlag string `json:"introductionUseFlag"` // 否 无 商品描述使用标识 ,0:使用默认的商品描述,1:使用装吧商详
|
||
// MobileZhuangBaID string `json:"mobileZhuangBaId"` // 否 无 移动版商品描述装吧实例ID
|
||
// MobileDescUseFlag string `json:"mobileDescUseFlag"` // 否 无 移动版商品描述使用标识,0:使用默认的移动商详;1:使用装吧移动版商详
|
||
// DesignConcept string `json:"designConcept"` // 否 无 商品设计理念,适用范围 是toplife类目
|
||
// FitCaseHTMLApp string `json:"fitCaseHtmlApp"` // 否 无 装修案例移动版描述,装修类目才可填写
|
||
// FitCaseHTMLPc string `json:"fitCaseHtmlPc"` // 否 无 装修案例PC版描述,装修类目才可填写
|
||
// SpecialServices []string `json:"specialServices"` // 否 无 特色服务,装修类目才可填写,装修类必填,最大为5,每个值最长为8个字符
|
||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps,omitempty"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||
}
|
||
|
||
type CreateSkuParamFeatures struct {
|
||
Key string `json:"key"` //是 无 特殊属性key
|
||
Value string `json:"value"` //否 无 特殊属性value
|
||
}
|
||
|
||
type CreateSkuParamImages struct {
|
||
ColorID string `json:"colorId"` //是 无 颜色id,颜色id和您设置的销售属性值id对应,使用接口jingdong.category.read.findValuesByAttrIdUnlimit 获取 ,如果没销售属性,则默认为10个0(主图,并且主图必填)
|
||
ImgIndex int `json:"imgIndex"` //是 无 图片顺序。index值:1N,如果index存在,则直接覆盖相应index图片
|
||
ImgURL string `json:"imgUrl"` //是 无 京东图片服务器地址,不包括前缀。例如:jfs/t2116/102/1731643157/81969/c3df941a/5670f868Nc441d4c3.jpg
|
||
ImgZoneID string `json:"imgZoneId,omitempty"` //否 无 图片空间中的图片Id
|
||
Type string `json:"type,omitempty"` //"com.jd.pop.ware.ic.api.domain.sku"
|
||
Type2 string `json:"@type,omitempty"`
|
||
}
|
||
|
||
type CreateSkuParamSkus struct {
|
||
// SkuID int `json:"skuId"` //否 无 skuID(新建商品不需要填写)
|
||
// SaleAttrs []struct {
|
||
// AttrValueAlias []string `json:"attrValueAlias"` //否 无 值别名,发布商品时不可设置
|
||
// AttrID string `json:"attrId "` // 是 无 属性ID 通过接口 jingdong.category.read.findAttrsByCategoryIdUnlimitCate 传3级分类 type=4获取
|
||
// AttrValues []string `json:"attrValues "` //是 无 销售属性值 使用接口jingdong.category.read.findValuesByAttrIdUnlimit获取
|
||
// } `json:"saleAttrs"` //是 无 SKU销售属性
|
||
// Features []struct {
|
||
// JdPrice int `json:"jdPrice"` //是 无 京东价必填 单位:元
|
||
// OuterID string `json:"outerId"` //否 无 外部ID,系统不保证唯一性,如需唯一性自行保证
|
||
// StockNum string `json:"stockNum"` //是 无 总库存数
|
||
// BarCode string `json:"barCode"` //否 无 SKU的条形码
|
||
// } `json:"features"` //否 无 特殊属性
|
||
JdPrice float64 `json:"jdPrice"` //是 无 京东价必填 单位:元
|
||
OuterID string `json:"outerId,omitempty"` //否 无 外部ID,系统不保证唯一性,如需唯一性自行保证
|
||
StockNum int `json:"stockNum"` //是 无 总库存数
|
||
// BarCode string `json:"barCode"` //否 无 SKU的条形码
|
||
// Props []struct{} `json:"props"` //否 无 SKU属性(已废弃 请使用multiCateProps,已经按照类目限制使用3级类目修改,请及时迁移到多级类目)
|
||
SaleAttrs []*CreateSkuParamAttrs `json:"saleAttrs,omitempty"` //否 无 多级SKU属性,仅当属性可以下沉时才能设置,不验证必填!sku维度设置后,以sku上的属性为准!
|
||
// Capacity string `json:"capacity"` // 否 20L 20T 容量,在有特殊要求的类目下必填!最多支持6位小数。
|
||
Type string `json:"type,omitempty"` //"com.jd.pop.ware.ic.api.domain.sku"
|
||
Type2 string `json:"@type,omitempty"`
|
||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps,omitempty"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||
}
|
||
|
||
type CreateSkuParamAttrs struct {
|
||
AttrValueAlias []string `json:"attrValueAlias,omitempty"` //否 无 值别名,发布商品时不可设置
|
||
AttrID string `json:"attrId"` //是 无 下沉到sku的属性ID 通过接口 jingdong.category.read.findAttrsByCategoryIdUnlimitCate 获取 features字段中attrLevel=1
|
||
AttrValues []string `json:"attrValues"` //是 无 下沉到sku属性值 单选或者多选 通过接口jingdong.category.read.findValuesByAttrIdUnlimit获取 输入类型请手动输入
|
||
}
|
||
|
||
type CreateSkuParam struct {
|
||
Ware *CreateSkuParamWare `json:"ware"`
|
||
Skus []*CreateSkuParamSkus `json:"skus"`
|
||
}
|
||
|
||
type CreateSkuResult struct {
|
||
WareID int64 `json:"wareId"`
|
||
Skus []struct {
|
||
WareID int64 `json:"wareId"`
|
||
SkuID int64 `json:"skuId"`
|
||
SaleAttrs []struct {
|
||
// AttrValueAlias []string `json:"attrValueAlias"`
|
||
AttrID string `json:"attrId"`
|
||
AttrValues []string `json:"attrValues"`
|
||
} `json:"saleAttrs"`
|
||
} `json:"skus"`
|
||
}
|
||
|
||
type UpdateWareParam struct {
|
||
WareID int64 `json:"wareId"`
|
||
Title string `json:"title"` //否 标题 商品名称 限制45个字符内
|
||
VenderID int64 `json:"venderId"`
|
||
PromiseID int `json:"promiseId"` // 否 无 配送时效
|
||
MobileDesc string `json:"mobileDesc"` // 是 无 移动版的商品介绍 长度限制10W个字符
|
||
Introduction string `json:"introduction"` // 是 无 PC版的商品介绍 长度限制10W个字符
|
||
Features []*CreateSkuParamFeatures `json:"features"` // 否 无 商品维度的特殊属性 目前两个特殊属性 IBS、FBP、FCS、SCF 4种商家类型【规格型号】 model和【销售单位】 unit 字段且为必填(如 个、盒、袋等)请勿填写公司名称。
|
||
ShopCategorys []int `json:"shopCategorys"` // 否 无 商品店内分类(商家接口获取到的最末级的分类)
|
||
JdPrice float64 `json:"jdPrice"` //是 无 京东价必填 单位:元
|
||
}
|
||
|
||
type QueryPictureReuslt struct {
|
||
PictureSize int `json:"picture_size"`
|
||
PictureWidth int `json:"picture_width"`
|
||
PictureURL string `json:"picture_url"`
|
||
PictureID string `json:"picture_id"`
|
||
PictureName string `json:"picture_name"`
|
||
PictureType string `json:"picture_type"`
|
||
Created int64 `json:"created"`
|
||
PictureCateID int `json:"picture_cate_id"`
|
||
PictureHeight int `json:"picture_height"`
|
||
}
|
||
|
||
type UpdateSkusParam struct {
|
||
WareID int64 `json:"wareId"`
|
||
Skus []*UpdateSkusParamSkus `json:"skus"`
|
||
}
|
||
|
||
type UpdateSkusParamSkus struct {
|
||
WareID int64 `json:"wareId,omitempty"` //是 11111111111 商品ID(必填)
|
||
SkuID int64 `json:"skuId,omitempty"` //否 11111558987 skuID(新增的sku可不填写)
|
||
SaleAttrs []*CreateSkuParamAttrs `json:"saleAttrs,omitempty"` //是 无 SKU销售属性
|
||
JdPrice float64 `json:"jdPrice,omitempty"` //是 无 京东价必填 单位:元
|
||
OuterID string `json:"outerId,omitempty"` //否 ww_4567 外部ID,系统不保证唯一性,如需唯一性自行保证
|
||
StockNum string `json:"stockNum,omitempty"` //是 10 总库存数
|
||
BarCode string `json:"barCode,omitempty"` //否 45456467777 SKU的条形码
|
||
Capacity string `json:"capacity,omitempty"` //否 20L 容量,在有特殊要求的类目下必填!最多支持6位小数。
|
||
Type string `json:"type"` //"com.jd.pop.ware.ic.api.domain.sku"
|
||
Type2 string `json:"@type"`
|
||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps,omitempty"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||
}
|
||
|
||
//查询商家所有的店内分类
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=88&apiId=2801&apiName=jingdong.vender.shopcategory.findShopCategoriesByVenderId
|
||
func (a *API) FindShopCategories() (findShopCategoriesResult []*FindShopCategoriesResult, err error) {
|
||
result, err := a.AccessAPI("jingdong.vender.shopcategory.findShopCategoriesByVenderId", prodURL, nil)
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_vender_shopcategory_findShopCategoriesByVenderId_responce"].(map[string]interface{})["shopCategoryResult"].(map[string]interface{})["shop_category_list"], &findShopCategoriesResult, false)
|
||
}
|
||
return findShopCategoriesResult, err
|
||
}
|
||
|
||
//删除店内分类
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=88&apiId=3031&apiName=jingdong.vender.shopcategory.deleteShopCategoryByVenderIdAndCid
|
||
func (a *API) DeleteShopCategory(cid int64) (uniteResp *UniteResp, err error) {
|
||
result, err := a.AccessAPI("jingdong.vender.shopcategory.deleteShopCategoryByVenderIdAndCid", prodURL, map[string]interface{}{
|
||
"cid": cid,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_vender_shopcategory_deleteShopCategoryByVenderIdAndCid_responce"].(map[string]interface{})["shopCategoryResult"], &uniteResp, false)
|
||
if !uniteResp.IsSuccess {
|
||
return nil, fmt.Errorf(uniteResp.ErrorMsgCn)
|
||
}
|
||
}
|
||
return uniteResp, err
|
||
}
|
||
|
||
//查询商家所有的类目
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=88&apiId=2727&apiName=jingdong.vender.category.getValidCategoryResultByVenderId
|
||
func (a *API) FindVendorCategories() (findVendorCategoriesResult []*FindVendorCategoriesResult, err error) {
|
||
result, err := a.AccessAPI("jingdong.vender.category.getValidCategoryResultByVenderId", prodURL, nil)
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_vender_category_getValidCategoryResultByVenderId_responce"].(map[string]interface{})["getvalidcategoryresultbyvenderid_result"].(map[string]interface{})["list"], &findVendorCategoriesResult, false)
|
||
}
|
||
return findVendorCategoriesResult, err
|
||
}
|
||
|
||
//京东商城发布商品(创建商品)
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1379&apiName=jingdong.ware.write.add
|
||
func (a *API) CreateWare(createSkuParamWare *CreateSkuParamWare, createSkuParamSkus []*CreateSkuParamSkus) (createSkuResult *CreateSkuResult, err error) {
|
||
c := &CreateSkuParam{
|
||
Ware: createSkuParamWare,
|
||
Skus: createSkuParamSkus,
|
||
}
|
||
cc, _ := json.Marshal(c)
|
||
content := string(cc)
|
||
content = strings.Replace(content, "\\u003c", "<", -1)
|
||
content = strings.Replace(content, "\\u003e", ">", -1)
|
||
content = strings.Replace(content, "\\u0026", "&", -1)
|
||
result, err := a.AccessAPI2("jingdong.ware.write.add", prodURL, map[string]interface{}{
|
||
"360buy_param_json": content,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_ware_write_add_responce"].(map[string]interface{})["ware"], &createSkuResult, false)
|
||
}
|
||
return createSkuResult, err
|
||
}
|
||
|
||
type UploadPictureResult struct {
|
||
ReturnCode int `json:"returnCode"` //返回码:1,操作成功;0,操作失败
|
||
Desc string `json:"desc"` //返回码为1时为操作成功,返回码为0时为操作失败原
|
||
PictureID string `json:"picture_id"` //上传成功的图片i
|
||
PictureURL string `json:"picture_url"` //上传成功的图片url
|
||
}
|
||
|
||
//京东商城上传图片
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=61&apiId=164&apiName=jingdong.imgzone.picture.upload
|
||
func (a *API) UploadPicture(imageData []byte, pictureCateID int, pictureName string) (uploadPictureResult *UploadPictureResult, err error) {
|
||
result, err := a.AccessAPI("jingdong.imgzone.picture.upload", prodURL, map[string]interface{}{
|
||
"image_data": base64.StdEncoding.EncodeToString(imageData),
|
||
"picture_name": pictureName,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_imgzone_picture_upload_responce"], &uploadPictureResult, false)
|
||
}
|
||
return uploadPictureResult, err
|
||
}
|
||
|
||
//京东商城查询图片
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=61&apiId=230&apiName=jingdong.imgzone.picture.query
|
||
func (a *API) QueryPicture(pictureName string) (queryPictureReuslt []*QueryPictureReuslt, err error) {
|
||
result, err := a.AccessAPI("jingdong.imgzone.picture.query", prodURL, map[string]interface{}{
|
||
"picture_name": pictureName,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_imgzone_picture_query_responce"].(map[string]interface{})["imgList"], &queryPictureReuslt, false)
|
||
}
|
||
return queryPictureReuslt, err
|
||
}
|
||
|
||
//查询运费模板
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=137&apiId=906&apiName=jingdong.ept.feight.outapi.query
|
||
func (a *API) GetFeightMb() (err error) {
|
||
_, err = a.AccessAPI("jingdong.SkuFareTemplateService.getTemplates", prodURL, nil)
|
||
return err
|
||
}
|
||
|
||
//类目属性
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=1264&apiName=jingdong.category.read.findAttrsByCategoryId
|
||
func (a *API) GetAttrsByCategoryId(currPage, pageSize int) (err error) {
|
||
_, err = a.AccessAPI("jingdong.category.read.findAttrsByCategoryId", prodURL, map[string]interface{}{
|
||
"currPage": currPage,
|
||
"pageSize": pageSize,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//修改商品基础信息
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1380&apiName=jingdong.ware.write.updateWare
|
||
func (a *API) UpdateWare(updateWareParam *UpdateWareParam) (err error) {
|
||
mapP := map[string]interface{}{
|
||
"ware": updateWareParam,
|
||
}
|
||
result3, _ := json.Marshal(mapP)
|
||
result, err := a.AccessAPI("jingdong.ware.write.updateWare", prodURL, map[string]interface{}{
|
||
"360buy_param_json": string(result3),
|
||
})
|
||
if err == nil {
|
||
if result["jingdong_ware_write_updateWare_responce"].(map[string]interface{})["success"] != "success" {
|
||
return err
|
||
}
|
||
}
|
||
return err
|
||
}
|
||
|
||
//删除商品
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1250&apiName=jingdong.ware.write.delete
|
||
func (a *API) DeleteWare(wareId int) (err error) {
|
||
_, err = a.AccessAPI("jingdong.ware.write.delete", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
})
|
||
return err
|
||
}
|
||
|
||
type FindAttrsResult struct {
|
||
ID int `json:"id"`
|
||
OrderSort int `json:"orderSort"`
|
||
InputType int `json:"inputType"`
|
||
Name string `json:"name"`
|
||
Features []struct {
|
||
Fvalue string `json:"fvalue"`
|
||
Key string `json:"key"`
|
||
} `json:"features"`
|
||
CatID int `json:"catId"`
|
||
AttributeType int `json:"attributeType"`
|
||
IsRequired bool `json:"isRequired"`
|
||
}
|
||
|
||
//获取类目属性ID
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=2809&apiName=jingdong.category.read.findAttrsByCategoryIdUnlimitCate
|
||
func (a *API) FindAttrs(cid int) (findAttrsResult []*FindAttrsResult, err error) {
|
||
result, err := a.AccessAPI("jingdong.category.read.findAttrsByCategoryIdUnlimitCate", prodURL, map[string]interface{}{
|
||
"cid": cid,
|
||
// "attributeType": 4,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_category_read_findAttrsByCategoryIdUnlimitCate_responce"].(map[string]interface{})["findattrsbycategoryidunlimitcate_result"], &findAttrsResult, false)
|
||
}
|
||
return findAttrsResult, err
|
||
}
|
||
|
||
type FindValuesByAttrIdResult struct {
|
||
ID int64 `json:"id"`
|
||
OrderSort int `json:"orderSort"`
|
||
Name string `json:"name"`
|
||
CatID int `json:"catId"`
|
||
AttID int `json:"attId"`
|
||
}
|
||
|
||
//获取类目属性值
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=2821&apiName=jingdong.category.read.findValuesByAttrIdUnlimit
|
||
func (a *API) FindValuesByAttrId(categoryAttrId int) (findValuesByAttrIdResult []*FindValuesByAttrIdResult, maxOrder int, err error) {
|
||
result, err := a.AccessAPI("jingdong.category.read.findValuesByAttrIdUnlimit", prodURL, map[string]interface{}{
|
||
"categoryAttrId": categoryAttrId,
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_category_read_findValuesByAttrIdUnlimit_responce"].(map[string]interface{})["findvaluesbyattridunlimit_result"], &findValuesByAttrIdResult, false)
|
||
}
|
||
if len(findValuesByAttrIdResult) > 0 {
|
||
maxOrder = findValuesByAttrIdResult[len(findValuesByAttrIdResult)-1].OrderSort
|
||
}
|
||
return findValuesByAttrIdResult, maxOrder, err
|
||
}
|
||
|
||
//新增类目属性值
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=1262&apiName=jingdong.category.write.saveVenderAttrValue
|
||
func (a *API) SaveVenderAttrValue(attValue string, attributeId, categoryId, indexId int) (categoryAttrId int64, err error) {
|
||
_, err = a.AccessAPI("jingdong.category.write.saveVenderAttrValue", prodURL, map[string]interface{}{
|
||
"attValue": attValue,
|
||
"attributeId": attributeId,
|
||
"categoryId": categoryId,
|
||
"indexId": indexId,
|
||
})
|
||
result, _, err := a.FindValuesByAttrId(attributeId)
|
||
for _, v := range result {
|
||
if v.OrderSort == indexId {
|
||
categoryAttrId = v.ID
|
||
}
|
||
}
|
||
return categoryAttrId, err
|
||
}
|
||
|
||
//设置sku库存
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1224&apiName=jingdong.stock.write.updateSkuStock
|
||
func (a *API) UpdateSkuStock(skuId, stockNum int) (err error) {
|
||
_, err = a.AccessAPI("jingdong.stock.write.updateSkuStock", prodURL, map[string]interface{}{
|
||
"skuId": skuId,
|
||
"stockNum": stockNum,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//修改sku京东价
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1253&apiName=jingdong.price.write.updateSkuJdPrice
|
||
//单位为元
|
||
func (a *API) UpdateSkuJdPrice(skuId int, jdPrice float64) (err error) {
|
||
_, err = a.AccessAPI("jingdong.price.write.updateSkuJdPrice", prodURL, map[string]interface{}{
|
||
"skuId": skuId,
|
||
"jdPrice": jdPrice,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//商品上下架
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1251&apiName=jingdong.ware.write.upOrDown
|
||
//opType 下架类型:1表示自主上架 2表示自主下架
|
||
func (a *API) UpOrDown(wareId int64, opType int) (err error) {
|
||
_, err = a.AccessAPI("jingdong.ware.write.upOrDown", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
"opType": opType,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//获取sku库存信息
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1239&apiName=jingdong.stock.read.findSkuStock
|
||
func (a *API) FindSkuStock(skuId int64) (err error) {
|
||
_, err = a.AccessAPI("jingdong.stock.read.findSkuStock", prodURL, map[string]interface{}{
|
||
"skuId": skuId,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//修改商品图片
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1258&apiName=jingdong.image.write.update
|
||
func (a *API) ImageUpdate(wareId int64, imgIndex int, imgUrl string) (err error) {
|
||
_, err = a.AccessAPI("jingdong.image.write.update", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
"imgIndex": imgIndex,
|
||
"imgUrl": imgUrl,
|
||
"colorId": "0000000000",
|
||
})
|
||
return err
|
||
}
|
||
|
||
type SearchWare4ValidResult struct {
|
||
PageSize int `json:"pageSize"`
|
||
Data []*SearchWare4ValidResultData `json:"data"`
|
||
PageNo int `json:"pageNo"`
|
||
TotalItem int `json:"totalItem"`
|
||
}
|
||
|
||
type SearchWare4ValidResultData struct {
|
||
WareID int64 `json:"wareId"`
|
||
WareStatus int `json:"wareStatus"`
|
||
CategoryID int `json:"categoryId"`
|
||
OnlineTime int64 `json:"onlineTime"`
|
||
OuterID string `json:"outerId"`
|
||
Title string `json:"title"`
|
||
ItemNum string `json:"itemNum"`
|
||
ColType int `json:"colType"`
|
||
}
|
||
|
||
//搜索有效商品
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1587&apiName=jingdong.ware.read.searchWare4Valid
|
||
func (a *API) SearchWare4Valid(searchKey string, pageNo, pageSize int) (searchWare4ValidResult *SearchWare4ValidResult, err error) {
|
||
param := make(map[string]interface{})
|
||
if searchKey != "" {
|
||
param["searchKey"] = searchKey
|
||
param["searchField"] = "title"
|
||
}
|
||
if pageNo != 0 {
|
||
param["pageNo"] = pageNo
|
||
}
|
||
if pageSize != 0 {
|
||
param["pageSize"] = pageSize
|
||
}
|
||
result, err := a.AccessAPI("jingdong.ware.read.searchWare4Valid", prodURL, param)
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_ware_read_searchWare4Valid_responce"].(map[string]interface{})["page"], &searchWare4ValidResult, false)
|
||
}
|
||
return searchWare4ValidResult, err
|
||
}
|
||
|
||
type UpdateSkusResult struct {
|
||
SkuID int64 `json:"skuId"`
|
||
}
|
||
|
||
//增加sku
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1383&apiName=jingdong.sku.write.updateSkus
|
||
func (a *API) UpdateSkus(updateSkusParam *UpdateSkusParam) (vendorSkuID string, err error) {
|
||
var skus []*UpdateSkusResult
|
||
data, _ := json.Marshal(updateSkusParam)
|
||
result, err := a.AccessAPI2("jingdong.sku.write.updateSkus", prodURL, map[string]interface{}{
|
||
"360buy_param_json": string(data),
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_sku_write_updateSkus_responce"].(map[string]interface{})["skuList"], &skus, false)
|
||
vendorSkuID = utils.Int64ToStr(skus[0].SkuID)
|
||
}
|
||
return vendorSkuID, err
|
||
}
|
||
|
||
//删除sku
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1323&apiName=jingdong.sku.write.deleteSku
|
||
func (a *API) DeleteSku(skuId int64) (err error) {
|
||
_, err = a.AccessAPI("jingdong.sku.write.deleteSku", prodURL, map[string]interface{}{
|
||
"skuId": skuId,
|
||
})
|
||
return err
|
||
}
|
||
|
||
type FindSkuByIdParam struct {
|
||
Status int `json:"status"`
|
||
JdPrice float64 `json:"jdPrice"`
|
||
SaleAttrs []struct {
|
||
AttrID string `json:"attrId"`
|
||
Index int `json:"index"`
|
||
AttrValueAlias []string `json:"attrValueAlias"`
|
||
AttrValues []string `json:"attrValues"`
|
||
} `json:"saleAttrs"`
|
||
SkuID int64 `json:"skuId"`
|
||
WareID int64 `json:"wareId"`
|
||
OuterID string `json:"outerId"`
|
||
}
|
||
|
||
//获取单个sku
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1223&apiName=jingdong.sku.read.findSkuById
|
||
func (a *API) FindSkuById(skuId int64) (findSkuByIdParam *FindSkuByIdParam, err error) {
|
||
result, err := a.AccessAPI2("jingdong.sku.read.findSkuById", prodURL, map[string]interface{}{
|
||
"skuId": skuId,
|
||
"field": "saleAttrs",
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_sku_read_findSkuById_responce"].(map[string]interface{})["sku"], &findSkuByIdParam, false)
|
||
}
|
||
return findSkuByIdParam, err
|
||
}
|
||
|
||
type FindWareByIdResult struct {
|
||
MultiCategoryID int `json:"multiCategoryId"`
|
||
BrandID int `json:"brandId"`
|
||
Height int `json:"height"`
|
||
Features []struct {
|
||
FeatureValue string `json:"featureValue"`
|
||
FeatureKey string `json:"featureKey"`
|
||
} `json:"features"`
|
||
OfflineTime int64 `json:"offlineTime"`
|
||
WareID int64 `json:"wareId"`
|
||
WareStatus int `json:"wareStatus"`
|
||
CategoryID int `json:"categoryId"`
|
||
Width int `json:"width"`
|
||
OnlineTime int64 `json:"onlineTime"`
|
||
Images []struct {
|
||
ImgURL string `json:"imgUrl"`
|
||
ImgID int64 `json:"imgId"`
|
||
ColorID string `json:"colorId"`
|
||
ImgIndex int `json:"imgIndex"`
|
||
} `json:"images"`
|
||
OuterID string `json:"outerId"`
|
||
Weight float64 `json:"weight"`
|
||
Title string `json:"title"`
|
||
Length int `json:"length"`
|
||
ItemNum string `json:"itemNum"`
|
||
ColType int `json:"colType"`
|
||
}
|
||
|
||
//获取单个商品
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1244&apiName=jingdong.ware.read.findWareById
|
||
func (a *API) FindWareById(wareId int64) (findWareByIdResult *FindWareByIdResult, err error) {
|
||
result, err := a.AccessAPI2("jingdong.ware.read.findWareById", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
"field": "features,weight,width,height,length,images,wareStatus,categoryId,brandId",
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_ware_read_findWareById_responce"].(map[string]interface{})["ware"], &findWareByIdResult, false)
|
||
}
|
||
return findWareByIdResult, err
|
||
}
|
||
|
||
//更新商品市场价
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1248&apiName=jingdong.price.write.updateWareMarketPrice
|
||
func (a *API) UpdateWareMarketPrice(wareId int64, marketPrice float64) (err error) {
|
||
_, err = a.AccessAPI2("jingdong.price.write.updateWareMarketPrice", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
"marketPrice": marketPrice,
|
||
})
|
||
return err
|
||
}
|
||
|
||
//获取商品下架原因
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1225&apiName=jingdong.ware.read.findOpReason
|
||
func (a *API) FindOpReason(wareId int64) (reason string, err error) {
|
||
result, err := a.AccessAPI2("jingdong.ware.read.findOpReason", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
})
|
||
if err == nil {
|
||
reason = result["jingdong_ware_read_findOpReason_responce"].(map[string]interface{})["opReason"].(map[string]interface{})["note"].(string)
|
||
}
|
||
return reason, err
|
||
}
|
||
|
||
//商品透图追加
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=2504&apiName=jingdong.transparentImage.write.add
|
||
func (a *API) TransparentImageAdd(wareId int64, imageUrl string) (err error) {
|
||
_, err = a.AccessAPI2("jingdong.transparentImage.write.add", prodURL, map[string]interface{}{
|
||
"wareId": wareId,
|
||
"colorId": "0000000000",
|
||
"imageUrl": imageUrl,
|
||
})
|
||
return err
|
||
}
|
||
|
||
type UpdateWareSaleAttrvalueAliasParam struct {
|
||
WareID int64 `json:"wareId"`
|
||
Props []*CreateSkuParamAttrs2 `json:"props"` //否 无 多级SKU属性,仅当属性可以下沉时才能设置,不验证必填!sku维度设置后,以sku上的属性为准!
|
||
}
|
||
|
||
type CreateSkuParamAttrs2 struct {
|
||
AttrValueAlias []string `json:"attrValueAlias,omitempty"` //否 无 值别名,发布商品时不可设置
|
||
AttrID string `json:"attrId"` //是 无 下沉到sku的属性ID 通过接口 jingdong.category.read.findAttrsByCategoryIdUnlimitCate 获取 features字段中attrLevel=1
|
||
AttrValues []string `json:"attrValues"` //是 无 下沉到sku属性值 单选或者多选 通过接口jingdong.category.read.findValuesByAttrIdUnlimit获取 输入类型请手动输入
|
||
Type string `json:"type"` //"com.jd.pop.ware.ic.api.domain.Prop"
|
||
Type2 string `json:"@type"`
|
||
}
|
||
|
||
//修改商品销售属性
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1381&apiName=jingdong.ware.write.updateWareSaleAttrvalueAlias
|
||
func (a *API) UpdateWareSaleAttrvalueAlias(param *UpdateWareSaleAttrvalueAliasParam) (err error) {
|
||
data, _ := json.Marshal(param)
|
||
_, err = a.AccessAPI2("jingdong.ware.write.updateWareSaleAttrvalueAlias", prodURL, map[string]interface{}{
|
||
"360buy_param_json": string(data),
|
||
})
|
||
return err
|
||
}
|
||
|
||
type SearchSkuListResult struct {
|
||
Status int `json:"status"`
|
||
JdPrice float64 `json:"jdPrice"`
|
||
SkuID int64 `json:"skuId"`
|
||
WareID int64 `json:"wareId"`
|
||
OuterID string `json:"outerId"`
|
||
SaleAttrs []struct {
|
||
AttrID string `json:"attrId"`
|
||
Index int `json:"index"`
|
||
AttrValueAlias []string `json:"attrValueAlias"`
|
||
AttrValues []string `json:"attrValues"`
|
||
} `json:"saleAttrs"`
|
||
StockNum int `json:"stockNum"`
|
||
}
|
||
|
||
//搜索sku
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1227&apiName=jingdong.sku.read.searchSkuList
|
||
func (a *API) SearchSkuList(pageNo, pageSize int) (list []*SearchSkuListResult, totalCount int, err error) {
|
||
result, err := a.AccessAPI2("jingdong.sku.read.searchSkuList", prodURL, map[string]interface{}{
|
||
"pageNo": pageNo,
|
||
"pageSize": pageSize,
|
||
"field": "jdPrice,saleAttrs,stockNum",
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_sku_read_searchSkuList_responce"].(map[string]interface{})["page"].(map[string]interface{})["data"], &list, false)
|
||
totalCount = int(utils.Interface2Int64WithDefault(result["jingdong_sku_read_searchSkuList_responce"].(map[string]interface{})["page"].(map[string]interface{})["totalItem"], 0))
|
||
}
|
||
return list, totalCount, err
|
||
}
|
||
|
||
//搜索sku
|
||
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1227&apiName=jingdong.sku.read.searchSkuList
|
||
func (a *API) SearchSkuList2(wareIDs []int) (list []*SearchSkuListResult, totalCount int, err error) {
|
||
result, err := a.AccessAPI2("jingdong.sku.read.searchSkuList", prodURL, map[string]interface{}{
|
||
"wareId": wareIDs,
|
||
"field": "jdPrice,saleAttrs,stockNum",
|
||
})
|
||
if err == nil {
|
||
utils.Map2StructByJson(result["jingdong_sku_read_searchSkuList_responce"].(map[string]interface{})["page"].(map[string]interface{})["data"], &list, false)
|
||
totalCount = int(utils.Interface2Int64WithDefault(result["jingdong_sku_read_searchSkuList_responce"].(map[string]interface{})["page"].(map[string]interface{})["totalItem"], 0))
|
||
}
|
||
return list, totalCount, err
|
||
}
|