Files
baseapi/platformapi/jdshopapi/sku.go
2025-11-21 09:09:09 +08:00

677 lines
34 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"` // 是 无 商品图片列表,发布时必须有主图(颜色为十个0index为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
}