jdshop createsku2
This commit is contained in:
@@ -19,7 +19,5 @@ func init() {
|
||||
// api.SetCookieWithStr(`
|
||||
// thor=5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C53633AB511CD9AA7FDDF502F48AE9683E660B3FCBF8EDC500734ADE8D7CE4BAB4B2947AD7610768EA07E5A6D3B88CDA3EBB7D998FEBA0B113F040A36B044CC4B9310C7953F2DDC2DE15C56C8839EFE493FE4CD8F9CECED7EE4097AE7F83EE6D447050842AB44A715BAB2666C6BE3AB085;
|
||||
// `)
|
||||
api.SetCookieWithStr(`
|
||||
shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; cart_uuid=1bd562b37ef02371; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; user-key=b84736c7-ce29-44e0-a5dc-4cc6b5e911b3; cn=3; unpl=V2_ZzNtbUMEExdyXRIDexEIV2ILRw9KB0ccfAoTBilKWlJiVxNUclRCFnQURlRnGF8UZwQZX0JcQRBFCEdkeB5fA2AFEFlBZxBFLV0CFi9JH1c%2bbRJUQ1JKHXwPRlF8EGw1ZAMiXUNnQxF9CERXfRhdBWcGEllBX0AWdwhCVUspWzVXMxZbQF5DE0UJdlVLWwhZYQoRXkpWDhVxAEZWeB9dBGcDF11GVEsWdgpGUHopXTVk; language=zh_CN; __jdv=89149253|direct|-|none|-|1605602605135; track=46099cdb-39fb-abe6-579e-ea9536a8cf9c; pinId=WMIzMhF5BfI9awOQjAcbdQ; pin=shop_jxcs2020; unick=shop_jxcs2020; _tp=VqmxIvk3BVEJnO6UciQrRA%3D%3D; _pst=shop_jxcs2020; TrackID=1H77OBLbyGWeEsySRRboJvFjSeNZ5OFrPG-lfM2Br17rxVaH2XR5YGDIPlQMDSI4RN0pz61IcyAGth7c78hH1UU_gWWlA9MM0Y3f3Q_m_Ngc; thor=5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C58363A31D3BA94C555E4594159384163B0ACA28C3850A6FF8EB0F90614C4D03DD2B98BCD0D1FB00B023AD4547B0F5FAEE352CCC5BA26CD18E730A7C69CCB8E79DD5D13E0A079E002BA1791109476BD812F5E6329D6977FE3C8D6EAD4F3ADC91CDBBC58DD018389D605AACF66B3B5902A1; ceshi3.com=000; __jdu=1605755815875269445822; deviceid_pdj_jd=H5_DEV_92DD6F05-B71A-43D7-9790-529335C43AAC; __jdc=89149253; __jda=89149253.1605755815875269445822.1605755816.1605755816.1605764267.2; __jdb=89149253.1.1605755815875269445822|2.1605764267; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2NCIWTST4KDNCWZES6EV2TD5XDTCNE6YVKRXISVWNQHZDBO6QEKYXMXGPYGVEOCQCSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4AUHV3TOJD7MGBX53BNNP2E6MSSOORYGL5H2GYFRURR5ACFJ54GH7PTHFL22YL3C6ODFYFTWGV5UAWCX5C6J372TDCL6LDNEERERTGC3ZLDBOD6N56GYMJ3KG4FLVU4YHVQAQIWW3S2YBFMIMTF6SWAFAQ52UF5TATP7KZIQ; b-sec=S2JWP6CAFP7K44GG6BEY2DLMRHSHR25YQUFIV6U2MSDRFM72EUECXMEVQ2E3NEQXNRAQLGFZSXSFM
|
||||
`)
|
||||
api.SetCookie("thor", "5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C58EAB54F4C674330367C5A17888A4FB0BA1EA349F99E49B87787205B2F0BA715979DE02766356E7182C810344BB3A72ADD1F2C8CE8F88206E69A92C4B4F64C8A2FFA5A08FF31923DF3C659E8C9E3A4032816E7407ABE2463499AD76B83A3F78C662530B11F26052D1D195EF91E8C4A689")
|
||||
}
|
||||
|
||||
@@ -41,35 +41,35 @@ type CreateSkuParamWare struct {
|
||||
MultiCategoryID int `json:"multiCategoryId,omitempty"` //否 无 末级类目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(便于关联京东商品)
|
||||
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"` // 否 无 配送时效
|
||||
PromiseID int `json:"promiseId,omitempty"` // 否 无 配送时效
|
||||
// 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 float64 `json:"weight"` // 否 无 商品重量,单位kg。根据类目区分 是 否必填
|
||||
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"` // 否 无 商品维度的特殊属性 目前两个特殊属性 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个字符
|
||||
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"` // 否 无 商品的京东价,人民币单元 是元
|
||||
MarketPrice float64 `json:"marketPrice"` // 否 无 商品的市场价,人民币单元 是元
|
||||
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
|
||||
@@ -78,7 +78,7 @@ type CreateSkuParamWare struct {
|
||||
// FitCaseHTMLApp string `json:"fitCaseHtmlApp"` // 否 无 装修案例移动版描述,装修类目才可填写
|
||||
// FitCaseHTMLPc string `json:"fitCaseHtmlPc"` // 否 无 装修案例PC版描述,装修类目才可填写
|
||||
// SpecialServices []string `json:"specialServices"` // 否 无 特色服务,装修类目才可填写,装修类必填,最大为5,每个值最长为8个字符
|
||||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps,omitempty"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||||
}
|
||||
|
||||
type CreateSkuParamFeatures struct {
|
||||
@@ -87,10 +87,12 @@ type CreateSkuParamFeatures struct {
|
||||
}
|
||||
|
||||
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
|
||||
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 {
|
||||
@@ -106,22 +108,22 @@ type CreateSkuParamSkus struct {
|
||||
// StockNum string `json:"stockNum"` //是 无 总库存数
|
||||
// BarCode string `json:"barCode"` //否 无 SKU的条形码
|
||||
// } `json:"features"` //否 无 特殊属性
|
||||
JdPrice float64 `json:"jdPrice"` //是 无 京东价必填 单位:元
|
||||
OuterID string `json:"outerId"` //否 无 外部ID,系统不保证唯一性,如需唯一性自行保证
|
||||
StockNum int `json:"stockNum"` //是 无 总库存数
|
||||
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"` //否 无 多级SKU属性,仅当属性可以下沉时才能设置,不验证必填!sku维度设置后,以sku上的属性为准!
|
||||
SaleAttrs []*CreateSkuParamAttrs `json:"saleAttrs,omitempty"` //否 无 多级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"`
|
||||
MultiCateProps []*CreateSkuParamAttrs `json:"multiCateProps"` // 否 无 类目属性列表,类目属性中有必填项时,此字段必填;若未设置或设置错误,会有“通用属性必填”等错误提示!
|
||||
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获取 输入类型请手动输入
|
||||
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 {
|
||||
@@ -537,7 +539,7 @@ func (a *API) FindSkuById(skuId int64) (findSkuByIdParam *FindSkuByIdParam, err
|
||||
func (a *API) FindWareById(wareId int64) (err error) {
|
||||
_, err = a.AccessAPI2("jingdong.ware.read.findWareById", prodURL, map[string]interface{}{
|
||||
"wareId": wareId,
|
||||
"field": "features",
|
||||
"field": "skus,features,weight,width,height,length,images,wareStatus,categoryId,brandId,colType",
|
||||
})
|
||||
return err
|
||||
}
|
||||
@@ -627,3 +629,17 @@ func (a *API) SearchSkuList(pageNo, pageSize int) (list []*SearchSkuListResult,
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package jdshopapi
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/gif"
|
||||
@@ -104,35 +103,12 @@ func TestGetFeightMb(t *testing.T) {
|
||||
// t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
func TestAA(t *testing.T) {
|
||||
ware := &CreateSkuParamWare{
|
||||
Title: "测试商品1",
|
||||
ShopCategorys: []int{11},
|
||||
CategoryID: 13577,
|
||||
TransportID: TransportID,
|
||||
MobileDesc: "测试",
|
||||
Introduction: "测试",
|
||||
WareStatus: 8,
|
||||
OuterID: "1",
|
||||
Weight: 2300,
|
||||
Height: 100,
|
||||
Length: 100,
|
||||
Width: 100,
|
||||
JdPrice: 20,
|
||||
MarketPrice: 10,
|
||||
VenderID: 0,
|
||||
BrandID: JxBrandId,
|
||||
}
|
||||
result, _ := json.Marshal(ware)
|
||||
fmt.Println(string(result))
|
||||
}
|
||||
|
||||
func TestCreateSku(t *testing.T) {
|
||||
var images []*CreateSkuParamImages
|
||||
var skus []*CreateSkuParamSkus
|
||||
var attrs []*CreateSkuParamAttrs
|
||||
var attrs2 []*CreateSkuParamAttrs
|
||||
var attrs3 []*CreateSkuParamAttrs
|
||||
// var attrs2 []*CreateSkuParamAttrs
|
||||
// var attrs3 []*CreateSkuParamAttrs
|
||||
var features []*CreateSkuParamFeatures
|
||||
feature := &CreateSkuParamFeatures{
|
||||
Key: "is7ToReturn",
|
||||
@@ -141,85 +117,87 @@ func TestCreateSku(t *testing.T) {
|
||||
features = append(features, feature)
|
||||
// desc = "aa"
|
||||
// desc := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/111969/32/6692/171733/5ebbb9daE5bedb5b2/38350dca19e2b9d2.jpg"><br></p><p><br></p>`
|
||||
desc := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/126814/22/1326/472568/5ebb888dEa2cfb5f6/c0c81db660994246.jpg"><br></p><p><br></p>`
|
||||
// desc := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/126814/22/1326/472568/5ebb888dEa2cfb5f6/c0c81db660994246.jpg"><br></p><p><br></p>`
|
||||
ware := &CreateSkuParamWare{
|
||||
Title: "测试商品1",
|
||||
// ShopCategorys: []int{11},
|
||||
CategoryID: 13577,
|
||||
TransportID: TransportID,
|
||||
Title: "测试商品1",
|
||||
BrandID: 44259,
|
||||
ShopCategorys: []int{15602360},
|
||||
CategoryID: 12247,
|
||||
// TransportID: TransportID,
|
||||
// MobileDesc: "测试",
|
||||
// Introduction: "测试",
|
||||
WareStatus: 8,
|
||||
OuterID: "1",
|
||||
Weight: 2300,
|
||||
Height: 100,
|
||||
Length: 100,
|
||||
Width: 100,
|
||||
JdPrice: 20,
|
||||
MarketPrice: 10,
|
||||
VenderID: 0,
|
||||
BrandID: JxBrandId,
|
||||
PromiseID: JdsPromiseID,
|
||||
// WareStatus: 1,
|
||||
// OuterID: "1",
|
||||
Weight: 230,
|
||||
Height: 100,
|
||||
Length: 100,
|
||||
Width: 100,
|
||||
// JdPrice: 20,
|
||||
MarketPrice: 2300,
|
||||
VenderID: 10569615,
|
||||
// PromiseID: JdsPromiseID,
|
||||
}
|
||||
ware.Features = features
|
||||
// ware.Features = features
|
||||
ware.MobileDesc = "aa"
|
||||
ware.Introduction = desc
|
||||
ware.Introduction = "<p>aa</p>"
|
||||
image := &CreateSkuParamImages{
|
||||
ColorID: "0000000000",
|
||||
ImgIndex: 1,
|
||||
ImgURL: "jfs/t1/124185/34/1067/20460/5eb90d1aE2a81b6e4/ab451433f5e963b0.jpg",
|
||||
ImgURL: "jfs/t1/142006/30/15024/504060/5fb636d4Ef12079f7/2adad323cbcf7c52.jpg",
|
||||
// Type: "com.jd.pop.ware.ic.api.domain.image",
|
||||
// Type2: "com.jd.pop.ware.ic.api.domain.Image",
|
||||
}
|
||||
images = append(images, image)
|
||||
ware.Images = images
|
||||
sku := &CreateSkuParamSkus{
|
||||
JdPrice: 10,
|
||||
StockNum: 1,
|
||||
JdPrice: 100,
|
||||
StockNum: 100,
|
||||
Type: "com.jd.pop.ware.ic.api.domain.sku",
|
||||
Type2: "com.jd.pop.ware.ic.api.domain.Sku",
|
||||
OuterID: "1",
|
||||
}
|
||||
sku2 := &CreateSkuParamSkus{
|
||||
JdPrice: 10,
|
||||
StockNum: 1,
|
||||
Type: "com.jd.pop.ware.ic.api.domain.sku",
|
||||
Type2: "com.jd.pop.ware.ic.api.domain.Sku",
|
||||
OuterID: "2",
|
||||
}
|
||||
attr1 := &CreateSkuParamAttrs{
|
||||
AttrID: "109692",
|
||||
AttrValues: []string{"613613"},
|
||||
// OuterID: "1",
|
||||
}
|
||||
// sku2 := &CreateSkuParamSkus{
|
||||
// JdPrice: 10,
|
||||
// StockNum: 1,
|
||||
// Type: "com.jd.pop.ware.ic.api.domain.sku",
|
||||
// Type2: "com.jd.pop.ware.ic.api.domain.Sku",
|
||||
// OuterID: "2",
|
||||
// }
|
||||
// attr1 := &CreateSkuParamAttrs{
|
||||
// AttrID: "109692",
|
||||
// AttrValues: []string{"613613"},
|
||||
// }
|
||||
// attr2 := &CreateSkuParamAttrs{
|
||||
// AttrID: "109897",
|
||||
// AttrValues: []string{"613771"},
|
||||
// }
|
||||
attr3 := &CreateSkuParamAttrs{
|
||||
AttrID: "160508",
|
||||
AttrValues: []string{"0.5"},
|
||||
}
|
||||
// attr3 := &CreateSkuParamAttrs{
|
||||
// AttrID: "160508",
|
||||
// AttrValues: []string{"0.5"},
|
||||
// }
|
||||
attr4 := &CreateSkuParamAttrs{
|
||||
AttrID: "160781",
|
||||
AttrValues: []string{"5"},
|
||||
AttrID: "140190",
|
||||
AttrValues: []string{"730802"},
|
||||
}
|
||||
attr5 := &CreateSkuParamAttrs{
|
||||
AttrID: "1001027606",
|
||||
AttrValues: []string{"2440273517"},
|
||||
}
|
||||
attr6 := &CreateSkuParamAttrs{
|
||||
AttrID: "1001027606",
|
||||
AttrValues: []string{"2440272539"},
|
||||
}
|
||||
attrs = append(attrs, attr1)
|
||||
// attr5 := &CreateSkuParamAttrs{
|
||||
// AttrID: "1000022043",
|
||||
// AttrValues: []string{"2515313135"},
|
||||
// }
|
||||
// attr6 := &CreateSkuParamAttrs{
|
||||
// AttrID: "1001027606",
|
||||
// AttrValues: []string{"2440272539"},
|
||||
// }
|
||||
// attrs = append(attrs, attr1)
|
||||
// attrs = append(attrs, attr2)
|
||||
attrs = append(attrs, attr3)
|
||||
// attrs = append(attrs, attr3)
|
||||
attrs = append(attrs, attr4)
|
||||
attrs2 = append(attrs2, attr5)
|
||||
attrs3 = append(attrs3, attr6)
|
||||
// attrs2 = append(attrs2, attr5)
|
||||
// attrs3 = append(attrs3, attr6)
|
||||
ware.MultiCateProps = attrs
|
||||
sku2.SaleAttrs = attrs3
|
||||
sku.SaleAttrs = attrs2
|
||||
// sku2.SaleAttrs = attrs3
|
||||
// sku.SaleAttrs = attrs2
|
||||
skus = append(skus, sku)
|
||||
skus = append(skus, sku2)
|
||||
// skus = append(skus, sku2)
|
||||
// ware.Skus = skus
|
||||
result, err := api.CreateWare(ware, skus)
|
||||
if err != nil {
|
||||
@@ -237,7 +215,7 @@ func TestFindVendorCategories(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFindAttrs(t *testing.T) {
|
||||
result, err := api.FindAttrs(15245)
|
||||
result, err := api.FindAttrs(12247)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -245,7 +223,7 @@ func TestFindAttrs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFindValuesByAttrId(t *testing.T) {
|
||||
result, no, err := api.FindValuesByAttrId(1001038262)
|
||||
result, no, err := api.FindValuesByAttrId(1000022043)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -262,7 +240,7 @@ func TestSaveVenderAttrValue(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeleteWare(t *testing.T) {
|
||||
err := api.DeleteWare(14518369562)
|
||||
err := api.DeleteWare(10020528071531)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -360,7 +338,7 @@ func TestDeleteSku(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFindSkuById(t *testing.T) {
|
||||
result, err := api.FindSkuById(71538612626)
|
||||
result, err := api.FindSkuById(10024685331653)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -407,7 +385,7 @@ func ConvertDistanceToLogLat(lng, lat, distance, angle float64) (newLng, newLat
|
||||
}
|
||||
|
||||
func TestFindWareById(t *testing.T) {
|
||||
err := api.FindWareById(14546096098)
|
||||
err := api.FindWareById(10020528071531)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -440,21 +418,15 @@ func TestUpdateWareSaleAttrvalueAlias(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSearchSkuList(t *testing.T) {
|
||||
var jdsIDs = []int64{
|
||||
70360362787, 70360943788, 70360811895, 70360582829, 70360415481, 70360967221, 70360686708, 70360712729, 70360775271,
|
||||
result, _, err := api.SearchSkuList2([]int{10020528071531})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, v := range jdsIDs {
|
||||
api.DeleteSku(v)
|
||||
}
|
||||
// result, err := api.SearchSkuList(14518857091)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(utils.Format4Output(result, false))
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
func TestAAAAAA(t *testing.T) {
|
||||
result, _, err := api.SearchSkuList(2, 20)
|
||||
result, _, err := api.SearchSkuList(1, 20)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -792,3 +792,196 @@ func (a *API) UploadImageNew(data []byte, fileName string) (jdURL string, err er
|
||||
}
|
||||
return jdURL, err
|
||||
}
|
||||
|
||||
type WareSaveParam struct {
|
||||
AdContent string `json:"adContent"`
|
||||
AdContentURL string `json:"adContentUrl"`
|
||||
AdContentWords string `json:"adContentWords"`
|
||||
AvailableFeatures []interface{} `json:"availableFeatures"`
|
||||
BrandID int `json:"brandId"`
|
||||
CatIDLevel1 int `json:"catIdLevel1"`
|
||||
CatIDLevel2 int `json:"catIdLevel2"`
|
||||
CatIDLevel4 int `json:"catIdLevel4"`
|
||||
CategoryID int `json:"categoryId"`
|
||||
CharacteristicService []interface{} `json:"characteristicService"`
|
||||
ColType int `json:"colType,omitempty"`
|
||||
CostPrice string `json:"costPrice"`
|
||||
Delivery int `json:"delivery"`
|
||||
DeliveryID1 int `json:"deliveryId1"`
|
||||
Density string `json:"density"`
|
||||
DesignConcept string `json:"designConcept"`
|
||||
ExtendFeatures []interface{} `json:"extendFeatures"`
|
||||
Features []WareSaveSkusFea `json:"features,omitempty"`
|
||||
FitmentNote string `json:"fitmentNote"`
|
||||
FitmentNoteMobile string `json:"fitmentNoteMobile"`
|
||||
HasWareBoot bool `json:"hasWareBoot"`
|
||||
Height int `json:"height"`
|
||||
HouseInfo struct {
|
||||
Address struct {
|
||||
AreaCode int `json:"areaCode"`
|
||||
AreaName string `json:"areaName"`
|
||||
CityCode int `json:"cityCode"`
|
||||
CityName string `json:"cityName"`
|
||||
Detail string `json:"detail"`
|
||||
Img string `json:"img"`
|
||||
Lat int `json:"lat"`
|
||||
Lng int `json:"lng"`
|
||||
ProvinceCode int `json:"provinceCode"`
|
||||
ProvinceName string `json:"provinceName"`
|
||||
} `json:"address"`
|
||||
AvgPrice int `json:"avgPrice"`
|
||||
Characteristics string `json:"characteristics"`
|
||||
ExtentImgMap interface{} `json:"extentImgMap"`
|
||||
Flag int `json:"flag"`
|
||||
PresaleList []interface{} `json:"presaleList"`
|
||||
TotalPrice int `json:"totalPrice"`
|
||||
} `json:"houseInfo"`
|
||||
ImageMap struct {
|
||||
Num0000000000 []CreateSkuParamImages `json:"0000000000"`
|
||||
} `json:"imageMap"`
|
||||
ImgAgreementSelected bool `json:"imgAgreementSelected"`
|
||||
IntroductionUseFlag string `json:"introductionUseFlag"`
|
||||
Is7ToReturn int `json:"is7ToReturn"`
|
||||
IsAllChannel bool `json:"isAllChannel"`
|
||||
IsLoc int `json:"isLoc"`
|
||||
IsLocSwitch int `json:"isLocSwitch"`
|
||||
IsOperateInvoice int `json:"isOperateInvoice"`
|
||||
IsRentWare int `json:"isRentWare"`
|
||||
IsTaxCheap int `json:"isTaxCheap"`
|
||||
ItemNum string `json:"itemNum"`
|
||||
JdPrice int `json:"jdPrice"`
|
||||
LastCategoryID int `json:"lastCategoryId"`
|
||||
Length int `json:"length"`
|
||||
LocAreaID1 int `json:"locAreaId1"`
|
||||
LocMatchInfoVO struct {
|
||||
ActivitiesIllustration string `json:"activitiesIllustration"`
|
||||
ActivityAgreement int `json:"activityAgreement"`
|
||||
ActivityBegin string `json:"activityBegin"`
|
||||
ActivityEnd string `json:"activityEnd"`
|
||||
AddressID int `json:"addressId"`
|
||||
Coordinate string `json:"coordinate"`
|
||||
DetailAddress string `json:"detailAddress"`
|
||||
RegistrationField int `json:"registrationField"`
|
||||
VenderID int `json:"venderId"`
|
||||
WareID int `json:"wareId"`
|
||||
} `json:"locMatchInfoVO"`
|
||||
MainImg string `json:"mainImg"`
|
||||
MarkSource int `json:"markSource"`
|
||||
MarketPrice int `json:"marketPrice"`
|
||||
MobileDesc string `json:"mobileDesc"`
|
||||
MobileDescUseFlag string `json:"mobileDescUseFlag"`
|
||||
MobileZhuangBaID string `json:"mobileZhuangBaId"`
|
||||
MoreImage bool `json:"moreImage"`
|
||||
MultiCateProps []interface{} `json:"multiCateProps"`
|
||||
Notes string `json:"notes"`
|
||||
OptionType int `json:"optionType"`
|
||||
OutTime string `json:"outTime"`
|
||||
OuterID string `json:"outerId"`
|
||||
PackListing string `json:"packListing"`
|
||||
PayType string `json:"payType"`
|
||||
PromiseID int `json:"promiseId"`
|
||||
PromiseTemplateType int `json:"promiseTemplateType"`
|
||||
PropsSet []interface{} `json:"propsSet"`
|
||||
PutawayTime string `json:"putawayTime"`
|
||||
PwMarketingLabelVo struct {
|
||||
IsRequestSku bool `json:"isRequestSku"`
|
||||
PwBdsLabelBindVos []interface{} `json:"pwBdsLabelBindVos"`
|
||||
PwBdsProposalVos []interface{} `json:"pwBdsProposalVos"`
|
||||
RelationID int `json:"relationId"`
|
||||
} `json:"pwMarketingLabelVo"`
|
||||
QcReports interface{} `json:"qcReports"`
|
||||
Rate string `json:"rate"`
|
||||
RentSpuVO struct {
|
||||
CreateTime interface{} `json:"createTime"`
|
||||
PlotID int `json:"plotId"`
|
||||
PlotInfo interface{} `json:"plotInfo"`
|
||||
SkuList []interface{} `json:"skuList"`
|
||||
SpuBroker interface{} `json:"spuBroker"`
|
||||
SpuID int `json:"spuId"`
|
||||
SpuName string `json:"spuName"`
|
||||
StaffID int `json:"staffId"`
|
||||
UpdateTime interface{} `json:"updateTime"`
|
||||
} `json:"rentSpuVO"`
|
||||
SaleAttrs []interface{} `json:"saleAttrs"`
|
||||
Service string `json:"service"`
|
||||
ServiceDesc string `json:"serviceDesc"`
|
||||
ServiceFeeID int `json:"serviceFeeId"`
|
||||
ShopCategorys []int `json:"shopCategorys"`
|
||||
SkuJSON string `json:"skuJson"`
|
||||
Skus []WareSaveSkus `json:"skus"`
|
||||
TaxCheapContent string `json:"taxCheapContent"`
|
||||
TaxCode string `json:"taxCode"`
|
||||
TaxRate int `json:"taxRate"`
|
||||
TempID string `json:"tempId"`
|
||||
TemplateID int `json:"templateId"`
|
||||
Title string `json:"title"`
|
||||
ToUsePrice string `json:"toUsePrice"`
|
||||
TransparentImageAudit []interface{} `json:"transparentImageAudit"`
|
||||
TransparentImageMap struct {
|
||||
} `json:"transparentImageMap"`
|
||||
TransportID int `json:"transportId"`
|
||||
UpcCode string `json:"upcCode"`
|
||||
VenderID int `json:"venderId"`
|
||||
WareID int64 `json:"wareId"`
|
||||
WareLocation string `json:"wareLocation"`
|
||||
WareStatus int `json:"wareStatus"`
|
||||
WareStatusStr string `json:"wareStatusStr"`
|
||||
Weight string `json:"weight"`
|
||||
Wide int `json:"wide"`
|
||||
ZeroTaxRate int `json:"zeroTaxRate"`
|
||||
ZhuangBaID string `json:"zhuangBaId"`
|
||||
ZhuangBaIntroduction string `json:"zhuangBaIntroduction"`
|
||||
ZhuangBaMobileDesc string `json:"zhuangBaMobileDesc"`
|
||||
}
|
||||
|
||||
type WareSaveSkusFea struct {
|
||||
Cn string `json:"cn"`
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type WareSaveSkusProp struct {
|
||||
AttrID int `json:"attrId"`
|
||||
AttrValues int64 `json:"attrValues"`
|
||||
AttrValueAlias string `json:"attrValueAlias"`
|
||||
}
|
||||
|
||||
type WareSaveSkus struct {
|
||||
Props []WareSaveSkusProp `json:"props"`
|
||||
Features []interface{} `json:"features"`
|
||||
SkuID int64 `json:"skuId,omitempty"`
|
||||
JdPrice string `json:"jdPrice"`
|
||||
OuterID string `json:"outerId"`
|
||||
StockNum int `json:"stockNum"`
|
||||
RentDeposit string `json:"rentDeposit"`
|
||||
RentUnit string `json:"rentUnit"`
|
||||
RentServiceDay string `json:"rentServiceDay"`
|
||||
SkuProps []interface{} `json:"skuProps"`
|
||||
Plu string `json:"plu"`
|
||||
Capacity interface{} `json:"capacity"`
|
||||
}
|
||||
|
||||
type WareSaveResult struct {
|
||||
SkuID int64 `json:"skuId"`
|
||||
VenderID int `json:"venderId"`
|
||||
WareID int64 `json:"wareId"`
|
||||
Props []struct {
|
||||
AttrID string `json:"attrId"`
|
||||
AttrValues string `json:"attrValues"`
|
||||
AttrValueAlias string `json:"attrValueAlias"`
|
||||
} `json:"props"`
|
||||
JdPrice float64 `json:"jdPrice"`
|
||||
OuterID string `json:"outerId"`
|
||||
StockNum int `json:"stockNum"`
|
||||
}
|
||||
|
||||
//创建商品
|
||||
//https://porder.shop.jd.com/order/orderlist/allOrders
|
||||
func (a *API) WareSave(wareSaveParam *WareSaveParam) (wareSaveResult []*WareSaveResult, err error) {
|
||||
params := utils.Struct2FlatMap(wareSaveParam)
|
||||
result, err := a.AccessStorePage2("https://ware.shop.jd.com/rest/shop/ware/save", params, true)
|
||||
if err == nil {
|
||||
utils.Map2StructByJson(result["data"].(map[string]interface{})["skus"], &wareSaveResult, false)
|
||||
}
|
||||
return wareSaveResult, err
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"crypto/cipher"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -191,9 +190,9 @@ func TestUploadImageNew(t *testing.T) {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(utils.Format4Output(result, false))
|
||||
str := "京西菜市松林农贸市场.生鲜店"
|
||||
str2 := str[0:strings.Index(str, ".")] + str[strings.Index(str, ".")+1:len(str)]
|
||||
fmt.Println(str2)
|
||||
// str := "京西菜市松林农贸市场.生鲜店"
|
||||
// str2 := str[0:strings.Index(str, ".")] + str[strings.Index(str, ".")+1:len(str)]
|
||||
fmt.Println(2 % 4)
|
||||
}
|
||||
|
||||
func TestShopList(t *testing.T) {
|
||||
@@ -203,3 +202,66 @@ func TestShopList(t *testing.T) {
|
||||
}
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
func TestWareSave(t *testing.T) {
|
||||
desc := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/126814/22/1326/472568/5ebb888dEa2cfb5f6/c0c81db660994246.jpg"><br></p><p><br></p>`
|
||||
params := &WareSaveParam{
|
||||
WareID: 10020528071531,
|
||||
Height: 120,
|
||||
CategoryID: 12247,
|
||||
VenderID: 10569615,
|
||||
BrandID: 44259,
|
||||
Length: 200,
|
||||
Wide: 100,
|
||||
WareStatus: 2,
|
||||
Title: "三线肉",
|
||||
Weight: "3",
|
||||
ShopCategorys: []int{15602360},
|
||||
Notes: desc,
|
||||
Skus: []WareSaveSkus{
|
||||
WareSaveSkus{
|
||||
SkuID: 10024685331653,
|
||||
JdPrice: "15",
|
||||
StockNum: 5,
|
||||
Props: []WareSaveSkusProp{
|
||||
WareSaveSkusProp{
|
||||
AttrID: 1000022043,
|
||||
AttrValues: 2515313135,
|
||||
AttrValueAlias: "250g",
|
||||
},
|
||||
},
|
||||
},
|
||||
WareSaveSkus{
|
||||
JdPrice: "30",
|
||||
StockNum: 5,
|
||||
Props: []WareSaveSkusProp{
|
||||
WareSaveSkusProp{
|
||||
AttrID: 1000022043,
|
||||
AttrValues: 2515430634,
|
||||
AttrValueAlias: "500g",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
PromiseID: -1,
|
||||
MultiCateProps: []interface{}{},
|
||||
PropsSet: []interface{}{},
|
||||
SaleAttrs: []interface{}{},
|
||||
}
|
||||
params.ImageMap.Num0000000000 = append(params.ImageMap.Num0000000000, CreateSkuParamImages{
|
||||
ColorID: "0000000000",
|
||||
ImgIndex: 1,
|
||||
ImgURL: "jfs/t1/142006/30/15024/504060/5fb636d4Ef12079f7/2adad323cbcf7c52.jpg",
|
||||
// ImgZoneID: "0000000000",
|
||||
}, CreateSkuParamImages{
|
||||
ColorID: "0000000000",
|
||||
ImgIndex: 2,
|
||||
ImgURL: "jfs/t1/142006/30/15024/504060/5fb636d4Ef12079f7/2adad323cbcf7c52.jpg",
|
||||
// ImgZoneID: "0000000000",
|
||||
})
|
||||
result, err := api.WareSave(params)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
@@ -442,7 +442,6 @@ func (a *API) signParam(signType string, params map[string]interface{}) (sig str
|
||||
sort.Sort(sort.StringSlice(valueList))
|
||||
valueList = append(valueList, fmt.Sprintf("key=%s", a.appKey))
|
||||
sig = strings.Join(valueList, "&")
|
||||
fmt.Println("tetttttttttttttttttttttttttttttttttttttttttt", sig)
|
||||
var binSig []byte
|
||||
if signType == sigTypeSha256 {
|
||||
mac := hmac.New(sha256.New, []byte(a.appKey))
|
||||
|
||||
Reference in New Issue
Block a user