jdshop createsku2

This commit is contained in:
苏尹岚
2020-11-25 09:51:15 +08:00
parent 45026edd51
commit 1794ce5334
6 changed files with 375 additions and 135 deletions

View File

@@ -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")
}

View File

@@ -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"` // 是 无 商品图片列表,发布时必须有主图(颜色为十个0index为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"` // 是 无 商品图片列表,发布时必须有主图(颜色为十个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"` // 否 无 商品的京东价,人民币单元 是元
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
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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))
}

View File

@@ -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))