package tiktok_api import ( "errors" product_addV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_addV2/request" product_addV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_addV2/response" product_del_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_del/request" product_detail_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_detail/request" product_detail_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_detail/response" product_editV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_editV2/request" product_getCatePropertyV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_getCatePropertyV2/request" product_getCatePropertyV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_getCatePropertyV2/response" product_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request" product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response" product_setOffline_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_setOffline/request" shop_getShopCategory_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getShopCategory/request" sku_syncStock_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStock/request" sku_syncStockBatch_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStockBatch/request" ) // UpdateSkuStock // 1、支持修改普通库存,区域库存,阶梯库存 // 2、支持增量更新,当incremental=true时idempotent_id字段参数必传。例:原商品库存是10个,接口传入5个,执行成功商品库存是15个。 // 3、支持全量更新。例:原商品库存是10个,接口传入5个,执行成功商品库存是5个。 // 4、可以设置库存为0 // 5、超市小时达店铺类型,更新库存out_warehouse_id= store_id(门店id)表示更新门店商品库存。 func (a *API) UpdateSkuStock(param *sku_syncStock_request.SkuSyncStockParam) error { request := sku_syncStock_request.New() request.Param = param resp, err := request.Execute(a.accessTokenObj) if err != nil { return err } if resp.Code != RequestSuccessCode { return errors.New(resp.Msg) } return nil } // GetShopCategory 获取商品类目 // 请一定使用最小层级类目id,发布商品或更新商品。 // 接口使用注意点: // 1、第一次请求cid=0获取所有一级类目 // 2、先判断enable=true,如果enable=false表示该类目已经失效,请勿使用。 // 3、循环获取最小层级类目id方式:再判断is_leaf=true或false。is_leaf=true表示是叶子节点,最小层级类目id。is_leaf=false表示不是子节点,请求参数cid=上一次响应参数id,直到获取最小层级类目id。 func (a *API) GetShopCategory(cid int64) ([]*RetailCategoryInfo, error) { // 如果cid为0,则获取所有的分类,如果cid不为0,则获取该分类下面的所有子分类 request := shop_getShopCategory_request.New() param := request.GetParams() param.Cid = cid result, err := request.Execute(a.accessTokenObj) if err != nil { return nil, err } if result.Code != RequestSuccessCode { return nil, errors.New(result.SubMsg) } categoryAll := make([]*RetailCategoryInfo, 0, 0) for i := 0; i < len(result.Data); i++ { if result.Data[i].Enable != true { // 失效了 continue } if result.Data[i].IsLeaf == false { categoryAll = append(categoryAll, &RetailCategoryInfo{ DataItem: result.Data[i], Children: make([]*RetailCategoryInfo, 0, 0), }) parentNode, _ := a.GetShopCategory(result.Data[i].Id) categoryAll[i].Children = append(categoryAll[i].Children, parentNode...) } else { node := RetailCategoryInfo{ DataItem: result.Data[i], Children: nil, } categoryAll = append(categoryAll, &node) } } return categoryAll, nil } // GetCatePropertyV2 根据商品分类获取对应的属性列表 // 参数为最终的子节点id下面再无子节点 func (a *API) GetCatePropertyV2(categoryLeftId int64) (*product_getCatePropertyV2_response.ProductGetCatePropertyV2Response, error) { request := product_getCatePropertyV2_request.New() param := request.GetParams() param.CategoryLeafId = categoryLeftId result, err := request.Execute(a.accessTokenObj) if err != nil { return nil, err } if result.Code != RequestSuccessCode { return nil, errors.New(result.SubMsg) } return result, nil } // CreateStoreCommodity (新增总部商品) func (a *API) CreateStoreCommodity(skuParam *product_addV2_request.ProductAddV2Param) (*product_addV2_response.ProductAddV2Data, error) { request := product_addV2_request.New() request.Param = skuParam result, err := request.Execute(a.accessTokenObj) if err != nil { return nil, err } if result.Code != RequestSuccessCode { return nil, errors.New(result.SubMsg) } return result.Data, nil } // SyncStockBatch 库存批量同步 func (a *API) SyncStockBatch(param *sku_syncStockBatch_request.SkuSyncStockBatchParam) error { request := sku_syncStockBatch_request.New() request.Param = param result, err := request.Execute(a.accessTokenObj) if err != nil { return err } if result.Code != RequestSuccessCode { return errors.New(result.SubMsg) } return nil } // EditStoreCommodity 编辑商品 func (a *API) EditStoreCommodity(sku *product_editV2_request.ProductEditV2Param) error { request := product_editV2_request.New() request.Param = sku result, err := request.Execute(a.accessTokenObj) if err != nil { return err } if result.Code != RequestSuccessCode { return errors.New(result.SubMsg) } return nil } // DeleteStoreCommodity 删除商品 func (a *API) DeleteStoreCommodity(productId int64) error { request := product_del_request.New() param := request.GetParams() param.ProductId = productId param.DeleteForever = true result, err := request.Execute(a.accessTokenObj) if err != nil { return err } if result.Code != RequestSuccessCode { return errors.New(result.SubMsg) } return nil } // ProductSetOffline 商品上下架 func (a *API) ProductSetOffline(productId int64) error { request := product_setOffline_request.New() param := request.GetParams() param.ProductId = productId result, err := request.Execute(a.accessTokenObj) if err != nil { return err } if result.Code != RequestSuccessCode { return errors.New(result.SubMsg) } return nil } // GetSkuDetail 查询单个商品详情 美团商品id(19位),本地商品id func (a *API) GetSkuDetail(productId, outProductId string) (*product_detail_response.ProductDetailData, error) { request := product_detail_request.New() param := request.GetParams() param.ProductId = productId param.OutProductId = outProductId result, err := request.Execute(a.accessTokenObj) if err != nil { return nil, err } if result.Code != RequestSuccessCode { return nil, err } return result.Data, nil } // GetSkuDetailList 批量获取商品列表 func (a *API) GetSkuDetailList(param *product_listV2_request.ProductListV2Param) (*product_listV2_response.ProductListV2Data, error) { request := product_listV2_request.New() request.Param = param result, err := request.Execute(a.accessTokenObj) if err != nil { return nil, err } if result.Code != RequestSuccessCode { return nil, errors.New(result.SubMsg) } return result.Data, nil }