京东商品

This commit is contained in:
苏尹岚
2020-06-09 18:58:04 +08:00
parent 762a41dbdd
commit 73b0253721
5 changed files with 321 additions and 8 deletions

View File

@@ -51,7 +51,7 @@ func TestOrderListAll(t *testing.T) {
}
func TestOrderPartRefundGet(t *testing.T) {
result, err := api.OrderPartRefundGet("1557459492221457830")
result, err := api.OrderPartRefundGet("2127926002950657162")
if err != nil {
t.Fatal(err)
} else {

View File

@@ -119,7 +119,7 @@ type CreateSkuParamSkus struct {
}
type CreateSkuParamAttrs struct {
// AttrValueAlias []string `json:"attrValueAlias"` //否 无 值别名,发布商品时不可设置
// 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获取 输入类型请手动输入
}
@@ -573,3 +573,46 @@ func (a *API) TransparentImageAdd(wareId int64, imageUrl string) (err error) {
})
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"`
}
//搜索sku
//https://open.jd.com/home/home#/doc/api?apiCateId=48&apiId=1227&apiName=jingdong.sku.read.searchSkuList
func (a *API) SearchSkuList(wareId int64) (list []*SearchSkuListResult, err error) {
result, err := a.AccessAPI2("jingdong.sku.read.searchSkuList", prodURL, map[string]interface{}{
"wareId": wareId,
})
if err == nil {
utils.Map2StructByJson(result["jingdong_sku_read_searchSkuList_responce"].(map[string]interface{})["page"].(map[string]interface{})["data"], &list, false)
}
return list, err
}

View File

@@ -231,7 +231,7 @@ func TestFindVendorCategories(t *testing.T) {
}
func TestFindAttrs(t *testing.T) {
result, err := api.FindAttrs(13582)
result, err := api.FindAttrs(15245)
if err != nil {
t.Fatal(err)
}
@@ -239,7 +239,7 @@ func TestFindAttrs(t *testing.T) {
}
func TestFindValuesByAttrId(t *testing.T) {
result, no, err := api.FindValuesByAttrId(150390)
result, no, err := api.FindValuesByAttrId(1001038262)
if err != nil {
t.Fatal(err)
}
@@ -368,7 +368,7 @@ func TestDeleteSku(t *testing.T) {
}
func TestFindSkuById(t *testing.T) {
result, err := api.FindSkuById(69576828876)
result, err := api.FindSkuById(69948250090)
if err != nil {
t.Fatal(err)
}
@@ -427,3 +427,162 @@ func TestTransparentImageAdd(t *testing.T) {
// suffix := str[12:len(str)]
fmt.Println(str[:12])
}
func TestUpdateWareSaleAttrvalueAlias(t *testing.T) {
err := api.UpdateWareSaleAttrvalueAlias(&UpdateWareSaleAttrvalueAliasParam{
WareID: 14566414324,
Props: []*CreateSkuParamAttrs2{
&CreateSkuParamAttrs2{
AttrID: "1001038262",
AttrValues: []string{"2453826609"},
AttrValueAlias: []string{"500g 下午易缺货"},
Type: "com.jd.pop.ware.ic.api.domain.prop",
Type2: "com.jd.pop.ware.ic.api.domain.Prop",
},
},
})
if err != nil {
t.Fatal(err)
}
// t.Log(utils.Format4Output(result, false))
}
func TestSearchSkuList(t *testing.T) {
var wareIDs = []int64{
14518860227,
14518865342,
14518857791,
14518863440,
14518850181,
14518869426,
14518865836,
14518860282,
14518862865,
14518860089,
14518861773,
14518857091,
14518859794,
14518878413,
14518874243,
14518992990,
14519010404,
14519010010,
14519006838,
14519009822,
14541114008,
14542371664,
14542409106,
14542477967,
14542585438,
14542602011,
14542586377,
14542927723,
14542946611,
14542948535,
14543031285,
14543077206,
14544951705,
14546014638,
14565258994,
14565275855,
14566133342,
14566144059,
14566419305,
14566403990,
14566408956,
14567187277,
14567793468,
14567911336,
14567910034,
14567907049,
14567904981,
14567909664,
14567907786,
14568001774,
14568152611,
14568138877,
14568146252,
14568161923,
14568508881,
14568512475,
14568524772,
14568533264,
14568540322,
14568534834,
14568546936,
14568542882,
14568806841,
14576405495,
14576832607,
14576832017,
14576946037,
14576974106,
14576993226,
14579143223,
14581769973,
14581773059,
14581773646,
14581780520,
14581782920,
14581768094,
14581788365,
14581805504,
14581919920,
14581915051,
14581920950,
14581971709,
14581979302,
14581974927,
14581974739,
14581964099,
14581974639,
14581976637,
14581979946,
14581989815,
14581987337,
14581987251,
14581981273,
14581996123,
14581984285,
14581994544,
14581996576,
14582006319,
14582000952,
14582000668,
14581993998,
14581996999,
14582016736,
14582053303,
14594027838,
14594055255,
14594104816,
14594233747,
14594245738,
14594249079,
14594296303,
14594987858,
14596828148,
14600091528,
14600094614,
14600087648,
14566414324}
for _, v := range wareIDs {
result, _ := api.SearchSkuList(v)
for _, vv := range result {
api.DeleteSku(vv.SkuID)
}
}
// result, err := api.SearchSkuList(14518857091)
// if err != nil {
// t.Fatal(err)
// }
// t.Log(utils.Format4Output(result, false))
}
func TestAAAAAA(t *testing.T) {
result, err := api.SearchSkuList(14518860227)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}

View File

@@ -467,3 +467,74 @@ func (a *API) UpdateWaybill(orderId, logiId, logiNo string) (err error) {
})
return err
}
//登录
// Accept: */*
// Accept-Encoding: gzip, deflate, br
// Accept-Language: zh-CN,zh;q=0.9
// Connection: keep-alive
// Content-Length: 2129
// Content-Type: application/x-www-form-urlencoded; charset=UTF-8
// Cookie: __jdu=15913386790311275342874
// Host: passport.jd.com
// Origin: https://passport.jd.com
// Referer: https://passport.jd.com/common/loginPage?from=pop_vender&regTag=2&ReturnUrl=https%3A%2F%2Fseller.shop.jd.com%2Fseller%2Fsellerinfo%2Fseller_info.action
// User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3761.400 QQBrowser/10.6.4121.400
// X-k39sGHmW-a: w9fV4=jzG=ce4jhYrOwXaIhG4oeGSZzNBFUXMdcfztckhgq_4MHU49dkqt-U_IweW=f-hl5g7PhWWUfeT4iw7a5YxNBIMIzY89pf_Zve_6wU7tK3btorTN8PW=vySXE1WvKtB=pOxyJ5PDwWT2w_BN0PJqvqaufP9PJerFcHrtj8UImbajPUeDwEv0aEW=ixJDw_nYW1MIJqffqfT9K_mlq5i9csTufgztir-OXI-=2GwrqOqshrWm2GdV25A=d9WWV_Jl3FSqieSWqffOSP1tYGa_I1Otq-bCfrqlcWnfikSEq5_uB9TmN_hX8=aaJHSZ8_WyZcSXwUoY6WJfcya7d0PFcYDI4N4yWVh7qOJv8Zc7WkJnwGBPqUSY5QJfakSPSwhtuXnOv=a=hh8yE5zEzGptNkSV-sZXhrO9BB0Y1qSK4dWrLVBgakiZhfWuKefoiszdlwJZWKa94ehgvW4=s_aaiG4=-phkh54Gaf4gB_OOa-alhYayGVA=cUiaW-i38tc55FagvZ1FcE4yqUNtZZSEd9Wu1_aofqWZdeBUldimcy4=OtZNJUMtaV4Ei_MKHZnmECBpKpaOJcSu2YitoGJup5jol1ivaW_0aki9YN4XNcSPEWS9=dmoHrTmLa3ZwPhNzG_l5yAIwYSPKGD0sW4gieO_5GW9a_itvVhpq3SOsrzWKQ4sieSF-5BmWex=cWBNn=-gUGWVNdK=pnSEIjMghEByKe79YWS=zW_ZqFSEJeJMfNidwIhls_uOq_79z1StjBz0hU09sNMw7WP74kS92sZmcGTpw=3tUOTgw9cuO17W8GMtDX4dg14=9Q49tFTuUUnu1__=5ra91P4tHpZG8FWWBEGFWPTMfWJuf_h4KWM7dNWmWGzEiEJ3Q1T7sq7D7qSE8eiEzObuOWBGyVWtdkxyIVi=f_ht2Oo1dgW4qGtWhUidqXSPKp4WWP4=vrJOqXa0Wp2=c_7fVNBNdY1EZz==jVmoKgMt6WnESsaSc1TJhEJ9k3Zyh63Iw0T=fkMtwsrZzqhtJh7V2UNWh9SfUbJZvU3EKOTge5S=8UzKiU4yEtSPqpT9OyJ3fk3MIwJtvGalhsngq7B=f9BY04arq_4yWgffGDiywG4G5coPKYeDwPSus_4Dzp_IEP4sW_aId-JZisWZhroPI14Y2_Wl3s7EiGSNK5WEaNag7gztvG-PqxJf-zavmNZaws1IweWImnh6E1MIa_qZ7Gr7frm_I=JuuszIiaqdq5492eqDIPStdG7I7kMDjPJtfpa9jcnZfWh9cyaIZ0auuH4=hpMI4NGyJF_DwcnOweJud6WEhp-U7pJg8GiasWS=dPB=1VMtPjJnW=o=KWZu1kB6JVTZakWtj3n92GSzJ5S_8tTO4P-Oikni8GTPyEa=ckzplPaIW9it1TvIqU4GaczIquMtfJ
// X-k39sGHmW-b: a348oo
// X-k39sGHmW-c: A_MO-4hlAQAA29XveTX0-KoQbPiy3xbjIijWum-rT-EHQtuHV6skyxlsJAsDAawUIfCucinBwH8AAOfvAAAAAA==
// X-k39sGHmW-d: 0
// X-k39sGHmW-uniqueStateKey: A7ae-4hlAQAAngSz4VMCAl-Vlq71Ta_smPn9uLwC7A7bioCLfwLMadcFYPb2AawUIfGLr4YoFOgAAAAAAAAAAA==
// X-Requested-With: XMLHttpRequest
func (a *API) TryGetCookie() (cookie string, err error) {
params := map[string]interface{}{
"uuid": "15fc964c-aa54-4c2d-b718-cd3da5af9d69",
"eid": "GS2E2DOSGES5EJGLTQLTXN2FXRWYH2BLDSJ2JGEHLXBBE563VC2OAJEFTO5ZUHRDTRMWOADDAEKFTDAGZHXTULGZBM",
"fp": "b5c13ce2badacb92763e140cf2385bfc",
"_t": "_t",
"loginname": "jxcs_syl",
"nloginpwd": "RUUE/EHuNMv88DMcVoMxYix5wjvOSL2rhz1xckkkzgL/Nr4aVKcPvfYDvp9sW1AD32oJ4PM/shLiUAof0KKO3olq5+KwavGQW4UTI2SV+RjSmU830j4v0nSdMKfbszikj4z4R9A7W9HK853tlI0r5cSBuQK5KhsDJf7hWVFgV1c=",
"authcode": "3ad7a8a58e8f4122aaa522ec3e034bd3",
"pubKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21TAIfT/vexbobzH7Q8SUdP5uDPXEBKzOjx2L28y7Xs1d9v3tdPfKI2LR7PAzWBmDMn8riHrDDNpUpJnlAGUqJG9ooPn8j7YNpcxCa1iybOlc2kEhmJn5uwoanQq+CA6agNkqly2H4j6wIDAQAB",
"sa_token": "B68C442BE645754F33277E701208059080DD726A94A73F76DEC3053A838549C06EB7D3797CE1C5BBE7C2B2EF9CA7D4676F3D489984B517943EA13575FA80C7E7ACE37FCFF6F535F07B6FF67F57EA6A0581BD84EA37554047DF10ECB7C873652D89DB5CAEE8F1090FB49A29547319CF16FBF33734EFA4BF8F86849797883219C3E197A604140E904BA7E538273F59893FDF9BFD6EBA3121C9E3CD43FCF0A83781B9A15920719D6C522B442FEB4A3A8C9CC7224AA55DC3877FC1BF5C845DEA80CCFB4D0CF33C8D9563ADF38943F28CEC9013C3BA8916B81844BBA454ACF21EDC3B7364C10CF219ABE7ADFFF42E2063BC2C957642453DA5E5B1E3277AE284D508B740A66BC4913EF086ACA2540C5ABB3E36C7BF693C668DFC806D4A7EFDD347D3C6869E4B529881FE46C9414D0E8E0B2B3BA3689CFCBE5CB26921DA46FABA0098E823B687A7F94DB84900C616284D5F6E49E605BFA8FD4473FD03FACD353DFA026C205B536A0DF325AC713A5B6916A60483BD386F29FF3F28046C4B19E6EE6B18F7C299C4F873C04993A085D6D6DE63C9DFECA20332F02D31EB2BA069EB9FDD3F6C14BEB40ABF57093396EEE3C2C2D727FF8C324016E2BE7BB61F4D7E2669B081E45E24801B6760CEBFE54A188FAD77B99B63D054B55FE09C6FD0A1F7B6EF448E9BBDC4D7554386AB5A2FA0787DB95D788470D913E453AF7E98F05D14B20C342F0A3CD62B833E7AC8B75C5C23ED0FC4FC4C2F23A1FAA047DEB10A856DA39B40BC9E8FC48DF17B98B28FC6C8ED1ABB248D4863083CB04E9DAD58FED19195DC02C2378C10426377996BDA4C1D060D2132BE99C37970727983EFD266A62B498B0116124E6403B18110B868B132C747F08B6DE52FD8BDD1A757E3DC74EC36D62BDF125703CB83DAA362EB086FF567C0549C6BFD26E53EC964405375B6F0CE100B44692D671D7017E45B19B42015F96D2D173B8BDA912FC3C4C8A21528EE0C28E6D4CBB8",
"seqSid": "331828644098046192",
"useSlideAuthCode": "1",
}
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
request, _ := http.NewRequest(http.MethodPost, "https://passport.jd.com/common/loginService?nr=1&uuid=094087da-1373-40bf-bba2-63bb64026cfd&from=pop_vender&regTag=2&ReturnUrl=https://seller.shop.jd.com/seller/sellerinfo/seller_info.action&r=0.21554654723242117", strings.NewReader(utils.Map2URLValues(params).Encode()))
request.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
request.Header.Set("Host", "passport.jd.com")
request.Header.Set("Origin", "https://passport.jd.com")
request.Header.Set("Referer", "https://passport.jd.com/common/loginPage?from=pop_vender&regTag=2&ReturnUrl=https://seller.shop.jd.com/seller/sellerinfo/seller_info.action")
request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3761.400 QQBrowser/10.6.4121.400")
request.Header.Set("X-k39sGHmW-a", "ZtUfrFE109K33EiraIwE4CweB9pexmWIS9jITuItWOvk_upGBNBF7=K6nPW_O0NGwPW_at8qz0hEAaJJ405haPKUBGqUhWqrJtUeSNt7MdcGStLGWtf_hWECJasNSj5h4ke5Nh7ViE8=JnwUSsEf3tOPSKmawFcPzt_pePK6nOw5xUhOi_qIZ=M8Z=oN49KcJ0aG4tvEn-lc1O5UW9KQaZSchZakBr19ipKraXhkidpGJEKyo9UYBj5yaOdNJnTNJuMFotKPhG5OWV2Gaaifh5s1z_hG4=vZJZf_aEqcttie4tjVBXO8_=0yag7eSNwGnuYWh=vxzIzraEws4I8Y4phP4tq5Ju1_Mtc_aj1PSPWfrNEWT=usJu-y57Eaa=wgT=SPh6se4=bs_uvHSgq_4VWkSPyzhOWEJgzNSFcrryKZiFcUoAzKTYEPT96pTmPtJIUXaPhE8oasv901qgwZvI7WS=UpiuLWogw3ht_9So1g4FYkWWdq7ulJadKpSrUa3lyPrgzrJt857yqUqWNka=9QWv0Ix=KPfrWdnJ8GWt17xdUYS=w5TO7_UtzYsvf_W=hO4gqWaZW97PadSUiG1WvIJwW-JOmfJuJONtckTuMb4=YkJuYYnuKrqyS1hlFySoTqitFsWXqB49Uyn7KgWPJEiawt_yoWa9fxsZKGaEaqWIJsJVUGxVq5Wu2e4UhrMt55aFcXd=i2q646rV2kr4spMV5UJ4wPnfdq8G5EJ7Keza8UhofgWu23iVsNvjakidwzfuKFc=NZztfdttifvVE5fmWGMwK0vEdg7up6iudV_8HXTlweSj091t_kvWE14p7kBx8waWVN8Y5Fh=fkvK7N7thUnZwp3XWGerVsKjUUDWW9T_BPS9-kDDhceuhqTGagJ7t0W=c5ogO5SOSCTXZhBscUJZhymgq5hgz9dXO1nlh5BXfLJfaWWja-T9K8iGhkhusPSdWGT90wSgiXnrLzMt-Fjg8h5Fjr-g8g_sqQJh-=_Xqr4t2GTmEWf0y3SrLPupl17uIPi3e32=KqS9d-B9Yg4ywHaEWVvgef8Nhk7j21S_8rru2_3us-SN7q4XfGqW7_SZwGWVWWaPhPJZ4-J3JEor-YSNq_WO06aOfNWm1pJZqU-=8Hr9vQiF1ziPWkaZwaarcGuUw7VmJAS=O14yaWvX8GaG5Xogz1iE0WT9fk4ybFaZ8BruMFhqJk1Ii6x=KGJmWX6ai6T=OKJ7KHmP7rMIhEjg5UvI7m4=-e_iwBMKokSIwHo2a-nufWxsKr_fqGWVqUJa_G4sqeBjaKOYqri4NgoPh8r_KcvoUfiU85qZlcT6SoaupZ7d2cx=jK-rciat1_4PJGWly1blhWhuvUSyKeZXVHE_WGoP8UWZh9WawYnA7WfPfuUE01ar1vSVceWsIqAjW-JZEP4t5etEa_JlUP3p8r3fJWatvPJl3F")
request.Header.Set("X-k39sGHmW-b", "-9kt3q0")
request.Header.Set("X-k39sGHmW-c", "A_MO-4hlAQAA29XveTX0-KoQbPiy3xbjIijWum-rT-EHQtuHV6skyxlsJAsDAawUIfCucinBwH8AAOfvAAAAAA==")
request.Header.Set("X-k39sGHmW-d", "0")
request.Header.Set("X-k39sGHmW-uniqueStateKey", "A7ae-4hlAQAAngSz4VMCAl-Vlq71Ta_smPn9uLwC7A7bioCLfwLMadcFYPb2AawUIfGLr4YoFOgAAAAAAAAAAA==")
request.Header.Set("X-Requested-With", "XMLHttpRequest")
c := &http.Cookie{
Name: "alc",
Value: "RinKQBiRr1QceieVnkF+Uw==",
}
c2 := &http.Cookie{
Name: "_t",
Value: "DplFmazbesu5rn1NUKhLBe8yV7ia5OQcE7GXyFv3QCw=",
}
request.AddCookie(c)
request.AddCookie(c2)
return request
},
a.config,
func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
fmt.Println(utils.Format4Output(response.Cookies(), false))
return errLevel, err
})
return cookie, err
}
func (a *API) JdSSO() (err error) {
_, err = a.AccessStorePage("https://sso.jd.com/setCookie?t=https://seller.shop.jd.com/seller/sellerinfo/seller_info.action&callback=https://seller.shop.jd.com/seller/sellerinfo/seller_info.action", nil, false)
return err
}

View File

@@ -1,6 +1,8 @@
package jdshopapi
import (
"crypto/aes"
"encoding/base64"
"fmt"
"io/ioutil"
"net/http"
@@ -91,7 +93,45 @@ func TestUpdateWaybill(t *testing.T) {
// t.Log(utils.Format4Output(result, false))
}
func TestAAAAAA(t *testing.T) {
str := "2020-06-02 16:00-17:00"
fmt.Println(str[:strings.LastIndex(str, "-")])
func TestTryGetCookie(t *testing.T) {
result, err := api.TryGetCookie()
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestAAADS(t *testing.T) {
var s float64 = 200
fmt.Println(strings.TrimRight(fmt.Sprintf("%.2f", s), "0."))
}
func DecryptDESECB(d, key []byte) string {
data, err := base64.StdEncoding.DecodeString(string(d))
if err != nil {
return ""
}
block, err := aes.NewCipher(key)
if err != nil {
return ""
}
bs := block.BlockSize()
if len(data)%bs != 0 {
return ""
}
out := make([]byte, len(data))
dst := out
for len(data) > 0 {
block.Decrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
out = PKCS5UnPadding(out)
return string(out)
}
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}