Files
baseapi/platformapi/jdshopapi/sku.go
2020-05-12 15:37:04 +08:00

315 lines
18 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"
"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"` // 否 无 末级类目ID
BrandID int `json:"brandId"` // 否 无 不同类目是否必填情况不同,若发布时提示[此类目要求品牌必填]则表示品牌需要必填。品牌ID获取方式通过商家授权类目接口获取。
// TemplateID int `json:"templateId"` // 否 无 发布时不可设置
TransportID int `json:"transportId"` //是 无 运费模板ID
WareStatus int `json:"wareStatus"` // 否 新增仅可以使用 1:从未上架 8:在售(上架) 商品状态1:从未上架 2:自主下架 4:系统下架 8:在售 513:从未上架 待审核 514:自主下架 待审核 516:系统下架 待审核 520:在售 待审核 1025:从未上架 审核不通过 暂时没用 1026:自主下架 审核不通过 暂时没用 1028:系统下架 审核不通过 1032:在售 审核不通过
OuterID string `json:"outerId"` // 否 无 商品外部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"` // 否 无 配送时效
// adWords // 否 无 商品广告词对象 (单品页显示的优先级低于促销广告词)
// Wrap string `json:"wrap"` //否 无 包装规格(已废弃)
// PackListing string `json:"packListing"` // 否 无 商品包装清单
Length int `json:"length"` // 否 无 商品长度,单位mm。根据类目区分 是 否必填
Width int `json:"width"` // 否 无 商品宽度,单位mm。根据类目区分 是 否必填
Height int `json:"height"` // 否 无 商品高度,单位mm。根据类目区分 是 否必填
Weight int `json:"weight"` // 否 无 商品重量,单位kg。根据类目区分 是 否必填
// Props []struct {
// AttrID string `json:"attrID"` // 否 无 属性ID
// AttrValues string `json:"attrValues"` //否 无 属性值ID数组
// } `json:"props"` // 否 无 属性列表(已废弃 请使用multiCateProps,已经按照类目限制使用3级类目修改请及时迁移到多级类目)
// Features []struct {
// Key string `json:"key"` //是 无 特殊属性key
// Value string `json:"value"` //否 无 特殊属性value
// } `json:"features"` // 否 无 商品维度的特殊属性 目前两个特殊属性 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 int `json:"jdPrice"` // 否 无 商品的京东价,人民币单元 是元
MarketPrice int `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"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
}
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"` //否 无 图片空间中的图片Id
}
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 int `json:"jdPrice"` //是 无 京东价必填 单位:元
OuterID string `json:"outerId"` //否 无 外部ID,系统不保证唯一性,如需唯一性自行保证
StockNum int `json:"stockNum"` //是 无 总库存数
// BarCode string `json:"barCode"` //否 无 SKU的条形码
// Props []struct{} `json:"props"` //否 无 SKU属性(已废弃 请使用multiCateProps已经按照类目限制使用3级类目修改请及时迁移到多级类目)
SaleAttrs []*CreateSkuParamAttrs `json:"saleAttrs"` //否 无 多级SKU属性仅当属性可以下沉时才能设置不验证必填sku维度设置后以sku上的属性为准
// Capacity string `json:"capacity"` // 否 20L 20T 容量在有特殊要求的类目下必填最多支持6位小数。
Type string `json:"type"` //"com.jd.pop.ware.ic.api.domain.sku"
Type2 string `json:"@type"`
}
type CreateSkuParamAttrs struct {
// AttrValueAlias []string `json:"attrValueAlias"` //否 无 值别名,发布商品时不可设置
AttrID string `json:"attrId"` //是 无 下沉到sku的属性ID 通过接口 jingdong.category.read.findAttrsByCategoryIdUnlimitCate 获取 features字段中attrLevel=1
AttrValues []string `json:"attrValues"` //是 无 下沉到sku属性值 单选或者多选 通过接口jingdong.category.read.findValuesByAttrIdUnlimit获取 输入类型请手动输入
}
type CreateSkuResult struct {
WareID int `json:"wareId"`
skus []struct {
SkuID int `json:"skuId"`
saleAttrs []struct {
AttrValueAlias []string `json:"attrValueAlias"`
AttrID string `json:"attrId"`
AttrValues []string `json:"attrValues"`
}
}
}
type UpdateWareParam struct {
WareID int `json:"wareId"`
Title string `json:"title"` //否 标题 商品名称 限制45个字符内
Weight int `json:"weight"` //否 无 商品重量,单位kg
}
//查询商家所有的店内分类
//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) {
wares, _ := json.Marshal(createSkuParamWare)
skus, _ := json.Marshal(createSkuParamSkus)
result, err := a.AccessAPI2("jingdong.ware.write.add", prodURL, map[string]interface{}{
"ware": string(wares),
"skus": string(skus),
})
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:"pictureId "` //上传成功的图片i
PictureURL string `json:"pictureUrl"` //上传成功的图片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=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) {
result2, _ := json.Marshal(utils.Struct2FlatMap(updateWareParam))
result, err := a.AccessAPI("jingdong.ware.write.updateWare", prodURL, map[string]interface{}{
"ware": string(result2),
})
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
}
//获取类目属性ID
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=2809&apiName=jingdong.category.read.findAttrsByCategoryIdUnlimitCate
func (a *API) FindAttrs(cid int) (err error) {
_, err = a.AccessAPI("jingdong.category.read.findAttrsByCategoryIdUnlimitCate", prodURL, map[string]interface{}{
"cid": cid,
})
return err
}
//获取类目属性值
//https://open.jd.com/home/home#/doc/api?apiCateId=62&apiId=2821&apiName=jingdong.category.read.findValuesByAttrIdUnlimit
func (a *API) FindValuesByAttrId(categoryAttrId int) (err error) {
_, err = a.AccessAPI("jingdong.category.read.findValuesByAttrIdUnlimit", prodURL, map[string]interface{}{
"categoryAttrId": categoryAttrId,
})
return 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) (err error) {
_, err = a.AccessAPI("jingdong.category.write.saveVenderAttrValue", prodURL, map[string]interface{}{
"attValue": attValue,
"attributeId": attributeId,
"categoryId": categoryId,
"indexId": indexId,
})
return 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=2980&apiName=jingdong.stock.write.updateSkuSiteStock
//siteId 门店IDvenderSource 固定传4
func (a *API) UpdateSkuSiteStock(skuId, stockNum, siteId int) (err error) {
_, err = a.AccessAPI("jingdong.stock.write.updateSkuSiteStock", prodURL, map[string]interface{}{
"skuId": skuId,
"stockNum": stockNum,
"siteId": siteId,
"venderSource": 4,
})
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, jdPrice int) (err error) {
_, err = a.AccessAPI("jingdong.price.write.updateSkuJdPrice", prodURL, map[string]interface{}{
"skuId": skuId,
"jdPrice": jdPrice,
})
return err
}