diff --git a/platformapi/ebaiapi/order_test.go b/platformapi/ebaiapi/order_test.go index d4b0e8ce..0d80345b 100644 --- a/platformapi/ebaiapi/order_test.go +++ b/platformapi/ebaiapi/order_test.go @@ -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 { diff --git a/platformapi/jdshopapi/sku.go b/platformapi/jdshopapi/sku.go index 9234c0d7..d6b37f87 100644 --- a/platformapi/jdshopapi/sku.go +++ b/platformapi/jdshopapi/sku.go @@ -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 +} diff --git a/platformapi/jdshopapi/sku_test.go b/platformapi/jdshopapi/sku_test.go index 128f2271..e4802d80 100644 --- a/platformapi/jdshopapi/sku_test.go +++ b/platformapi/jdshopapi/sku_test.go @@ -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)) +} diff --git a/platformapi/jdshopapi/store_page.go b/platformapi/jdshopapi/store_page.go index bddebfd1..152fb892 100644 --- a/platformapi/jdshopapi/store_page.go +++ b/platformapi/jdshopapi/store_page.go @@ -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®Tag=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®Tag=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®Tag=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 +} diff --git a/platformapi/jdshopapi/store_page_test.go b/platformapi/jdshopapi/store_page_test.go index 6cce12c4..9d303b66 100644 --- a/platformapi/jdshopapi/store_page_test.go +++ b/platformapi/jdshopapi/store_page_test.go @@ -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)] }