提交 255d9542 authored 作者: 张立波's avatar 张立波

云众

上级 38abac8c
......@@ -18,7 +18,8 @@ const (
Itao = 15 //淘特
Hdh = 16 //会订货
TmNew = 17 //新版天猫
AliNew = 18//精选1688
AliNew = 18 //精选1688
Yunzmall = 19
)
var (
......
package yunzmall
import (
"context"
"fmt"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/crypto/gmd5"
"github.com/gogf/gf/crypto/gsha1"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/text/gregex"
"github.com/gogf/gf/text/gstr"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/util/grand"
"sort"
"time"
)
type Client struct {
AppKey string
AppSecret string
AccessToken string
DB int
}
var server *Client
const Url = "https://supply.yunzmall.com/supplyapi"
const pkgName = "yunzmall"
const CacheKey = "yunzmall:token"
func New(req *Client) {
server = req
if server.DB == 0 {
server.DB = 10
}
}
// post 请求
func post(ctx context.Context, method string, params g.Map, xToken ...interface{}) (str string, err error) {
Start := gtime.TimestampMilli()
Request := g.Client().ContentJson()
var AppNonce = grand.S(16)
var AppTimestamp = gtime.TimestampStr()
Request.SetHeader("App-Nonce-Str", grand.S(16))
Request.SetHeader("App-Timestamp", gtime.TimestampStr())
if len(xToken) == 0 {
var token string
token, err = Token.Access(ctx)
if err != nil {
return
}
Request.SetHeader("x-token", token)
}
AppSign, err := sign(AppNonce, AppTimestamp, params)
if err != nil {
return
}
Request.SetHeader("App-Sign", AppSign)
resp, err := Request.
Timeout(time.Second*5).
Post(Url+method, params)
//resp.RawDump()
defer func() {
_ = resp.Close()
paramStr := gjson.New(params).MustToJsonString()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", method)
if err != nil {
g.Log().Ctx(ctx).Cat(pkgName).Cat("error").Infof("参数【%v】错误【%v】响应时间【%v ms】", paramStr, err.Error(), gtime.TimestampMilli()-Start)
} else {
g.Log().Ctx(ctx).Cat(pkgName).Infof("参数【%v】响应【%v】响应时间【%v ms】", paramStr, str, gtime.TimestampMilli()-Start)
}
}()
if err != nil {
return
}
str = resp.ReadAllString()
return
}
func sign(nonce string, timestamp string, param g.Map) (res string, err error) {
var keys []string
keys = append(keys, "App-Nonce-Str")
keys = append(keys, "App-Timestamp")
mewparam := gjson.New(param).Map()
mewparam["App-Timestamp"] = timestamp
mewparam["App-Nonce-Str"] = nonce
for k := range mewparam {
keys = append(keys, k)
}
sort.Strings(keys)
var array = garray.New()
for _, v := range keys {
array.Append(fmt.Sprintf("%s=%s", v, gconv.String(mewparam[v])))
}
array.Append(fmt.Sprintf("%s=%s", "appKey", server.AppKey))
array.Append(fmt.Sprintf("%s=%s", "appSecret", server.AppSecret))
var str = array.Join("&")
str, err = gregex.ReplaceString(`\s`, "", str)
if err != nil {
return
}
str = gsha1.Encrypt(str)
str = gmd5.MustEncryptString(str)
res = gstr.ToUpper(str)
return
}
type CommonRes struct {
Code int `json:"code"`
Msg string `json:"msg"`
}
package yunzmall
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type goodsLogic struct {
}
var Goods = goodsLogic{}
type GoodsCursorListReq struct {
Cursor int `json:"cursor,omitempty"` //游标
PageSize int `json:"pageSize"` //每页个数
}
type GoodsCursorListRes struct {
CommonRes
Data struct {
List []struct {
Id int `json:"id"`
Title string `json:"title"`
ImageUrl string `json:"image_url"`
Source int `json:"source"`
Category1Id int `json:"category_1_id"`
Category2Id int `json:"category_2_id"`
Category3Id int `json:"category_3_id"`
BrandId int `json:"brand_id"`
AgreementPrice int `json:"agreement_price"`
GuidePrice int `json:"guide_price"`
ActivityPrice int `json:"activity_price"`
MarketPrice int `json:"market_price"`
SalePrice int `json:"sale_price"`
CostPrice int `json:"cost_price"`
OriginRate float64 `json:"origin_rate"`
ActivityRate float64 `json:"activity_rate"`
MarketRate int `json:"market_rate"`
Profit int `json:"profit"`
ProfitRate float64 `json:"profit_rate"`
IsDisplay int `json:"is_display"`
IsRecommend int `json:"is_recommend"`
IsNew int `json:"is_new"`
IsHot int `json:"is_hot"`
Stock int `json:"stock"`
Sales int `json:"sales"`
Unit string `json:"unit"`
IsPromotion int `json:"is_promotion"`
MinPrice int `json:"min_price"`
MaxPrice int `json:"max_price"`
CreatedAt int `json:"created_at"`
SupplierId int `json:"supplier_id"`
GatherSupplierId int `json:"gather_supplier_id"`
FreightType int `json:"freight_type"`
RecommendBrandStr string `json:"recommend_brand_str"`
RecommendCategoryStr string `json:"recommend_category_str"`
SupplierName string `json:"supplier_name"`
UpdatedAt int `json:"updated_at"`
Sort int `json:"sort"`
IsPlugin int `json:"is_plugin"`
Level1Price int `json:"level_1_price"`
Level2Price int `json:"level_2_price"`
Level3Price int `json:"level_3_price"`
Level4Price int `json:"level_4_price"`
Level5Price int `json:"level_5_price"`
Level6Price int `json:"level_6_price"`
Level7Price int `json:"level_7_price"`
Level8Price int `json:"level_8_price"`
Level9Price int `json:"level_9_price"`
Level10Price int `json:"level_10_price"`
Level1Profit int `json:"level_1_profit"`
Level2Profit int `json:"level_2_profit"`
Level3Profit int `json:"level_3_profit"`
Level4Profit int `json:"level_4_profit"`
Level5Profit int `json:"level_5_profit"`
Level6Profit int `json:"level_6_profit"`
Level7Profit int `json:"level_7_profit"`
Level8Profit int `json:"level_8_profit"`
Level9Profit int `json:"level_9_profit"`
Level10Profit int `json:"level_10_profit"`
Barcode string `json:"barcode"`
ImportApps string `json:"import_apps"`
IsBill int `json:"is_bill"`
SingleOption int `json:"single_option"`
SmallShopIdString string `json:"small_shop_id_string"`
SupplyLine string `json:"supply_line"`
IsVideoShop int `json:"is_video_shop"`
} `json:"list"`
Total int `json:"total"`
Cursor int `json:"cursor"`
PageSize int `json:"pageSize"`
} `json:"data"`
}
// CursorList 选品列表API(全量,cursor)
func (s goodsLogic) CursorList(ctx context.Context, req GoodsCursorListReq) (res *GoodsCursorListRes, err error) {
var method = "/app/product/storage/cursorList"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type GoodsDetailItem struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
Title string `json:"title"`
OriginPrice int `json:"origin_price"`
GuidePrice int `json:"guide_price"`
Price int `json:"price"`
CostPrice int `json:"cost_price"`
ActivityPrice int `json:"activity_price"`
MinBuyQty int `json:"min_buy_qty"`
Stock int `json:"stock"`
Sales int `json:"sales"`
FeedbackRate int `json:"feedback_rate"`
Sn string `json:"sn"`
Code string `json:"code"`
IsNew int `json:"is_new"`
IsRecommend int `json:"is_recommend"`
IsHot int `json:"is_hot"`
IsPromotion int `json:"is_promotion"`
IsDisplay int `json:"is_display"`
IsDisplayMsg string `json:"is_display_msg"`
StatusLock int `json:"status_lock"`
SingleOption int `json:"single_option"`
Desc string `json:"desc"`
ImageUrl string `json:"image_url"`
VideoUrl string `json:"video_url"`
Unit string `json:"unit"`
Barcode string `json:"barcode"`
Long int `json:"long"`
Wide int `json:"wide"`
High int `json:"high"`
Volume int `json:"volume"`
Freight int `json:"freight"`
FreightType int `json:"freight_type"`
MaxPrice int `json:"maxPrice"`
MinPrice int `json:"minPrice"`
MaxCostPrice int `json:"maxCostPrice"`
MinCostPrice int `json:"minCostPrice"`
MaxOriginPrice int `json:"maxOriginPrice"`
MinOriginPrice int `json:"minOriginPrice"`
Gallery []struct {
Type int `json:"type"`
Src string `json:"src"`
} `json:"gallery"`
Qualifications interface{} `json:"qualifications"`
DetailImages string `json:"detail_images"`
Attrs []struct {
Name string `json:"name"`
Value string `json:"value"`
} `json:"attrs"`
BrandId int `json:"brand_id"`
SupplierId int `json:"supplier_id"`
GatherSupplyId int `json:"gather_supply_id"`
Category1Id int `json:"category1_id"`
Category2Id int `json:"category2_id"`
Category3Id int `json:"category3_id"`
FreightTemplateId int `json:"freight_template_id"`
Source int `json:"source"`
Sort int `json:"sort"`
SourceGoodsId int `json:"source_goods_id"`
SourceGoodsIdString string `json:"source_goods_id_string"`
LocationId int `json:"location_id"`
Freeze int `json:"freeze"`
ShopLevel int `json:"shop_level"`
DesLevel int `json:"des_level"`
ExpressLevel int `json:"express_level"`
Level int `json:"level"`
ChildTitle string `json:"child_title"`
BillPosition int `json:"bill_position"`
IsBill int `json:"is_bill"`
Md5 string `json:"md5"`
TaxCode string `json:"tax_code"`
TaxProductName string `json:"tax_product_name"`
TaxShortName string `json:"tax_short_name"`
TaxOption string `json:"tax_option"`
TaxUnit string `json:"tax_unit"`
FavorablePolicy string `json:"favorable_policy"`
IsFavorablePolicy int `json:"is_favorable_policy"`
FreeOfTax int `json:"free_of_tax"`
ShortCode string `json:"short_code"`
TaxMeasurePrice int `json:"tax_measure_price"`
TaxRate int `json:"tax_rate"`
IsTaxLogo int `json:"is_tax_logo"`
IsPlugin int `json:"is_plugin"`
PluginId int `json:"plugin_id"`
IsSingleOrder int `json:"is_single_order"`
SupplierSourceId int `json:"supplier_source_id"`
SupplierSourceCategoryId int `json:"supplier_source_category_id"`
ProfitRate int `json:"profit_rate"`
JushuitanBind int `json:"jushuitan_bind"`
JushuitanDistributorSupplierName string `json:"jushuitan_distributor_supplier_name"`
JushuitanDistributorCoId string `json:"jushuitan_distributor_co_id"`
JushuitanUploadStatus int `json:"jushuitan_upload_status"`
SupplyLine string `json:"supply_line"`
IsSupplyLine int `json:"is_supply_line"`
IsVideoShop int `json:"is_video_shop"`
ShopName string `json:"shop_name"`
Skus []struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
Title string `json:"title"`
Price int `json:"price"`
CostPrice int `json:"cost_price"`
OriginPrice int `json:"origin_price"`
GuidePrice int `json:"guide_price"`
ActivityPrice int `json:"activity_price"`
Stock int `json:"stock"`
Weight int `json:"weight"`
IsDisplay int `json:"is_display"`
ProductId int `json:"product_id"`
SupplierId int `json:"supplier_id"`
Code string `json:"code"`
Sn string `json:"sn"`
Barcode string `json:"barcode"`
ImageUrl string `json:"image_url"`
Options []struct {
SpecName string `json:"spec_name"`
SpecItemName string `json:"spec_item_name"`
} `json:"options"`
OriginalSkuId int `json:"original_sku_id"`
SpecId string `json:"specId"`
Describe string `json:"describe"`
TaxCode string `json:"tax_code"`
TaxProductName string `json:"tax_product_name"`
TaxShortName string `json:"tax_short_name"`
TaxOption string `json:"tax_option"`
TaxUnit string `json:"tax_unit"`
FavorablePolicy string `json:"favorable_policy"`
IsFavorablePolicy int `json:"is_favorable_policy"`
FreeOfTax int `json:"free_of_tax"`
ShortCode string `json:"short_code"`
TaxMeasurePrice int `json:"tax_measure_price"`
TaxRate int `json:"tax_rate"`
IsTaxLogo int `json:"is_tax_logo"`
ProfitRate int `json:"profit_rate"`
JushuitanBind int `json:"jushuitan_bind"`
JushuitanUploadStatus int `json:"jushuitan_upload_status"`
Number int `json:"number"`
} `json:"skus"`
Supplier struct {
Id int `json:"id"`
Name string `json:"name"`
IsSelfSupport int `json:"is_self_support"`
} `json:"supplier"`
GatherSupply struct {
Id int `json:"id"`
Name string `json:"name"`
Key string `json:"key"`
CategoryId int `json:"category_id"`
} `json:"gather_supply"`
AliProduct struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
ProductId int `json:"product_id"`
SkuId int `json:"sku_id"`
AliSkuId string `json:"ali_sku_id"`
AliProductId int `json:"ali_product_id"`
AutoPay int `json:"auto_pay"`
ShopId string `json:"shop_id"`
} `json:"ali_product"`
ProductVerify struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
ProductId int `json:"product_id"`
SupplierId int `json:"supplier_id"`
Status int `json:"status"`
IsDisplay int `json:"is_display"`
} `json:"product_verify"`
Brand struct {
Id int `json:"id"`
Name string `json:"name"`
} `json:"brand"`
Category1 struct {
Id int `json:"id"`
Name string `json:"name"`
Image string `json:"image"`
Level int `json:"level"`
ParentId int `json:"parent_id"`
} `json:"category_1"`
Category2 struct {
Id int `json:"id"`
Name string `json:"name"`
Image string `json:"image"`
Level int `json:"level"`
ParentId int `json:"parent_id"`
} `json:"category_2"`
Category3 struct {
Id int `json:"id"`
Name string `json:"name"`
Image string `json:"image"`
Level int `json:"level"`
ParentId int `json:"parent_id"`
} `json:"category_3"`
AgreementPrice int `json:"agreement_price"`
MarketPrice int `json:"market_price"`
SalePrice int `json:"sale_price"`
}
type GoodsDetailRes struct {
CommonRes
Data struct {
List []GoodsDetailItem `json:"list"`
} `json:"data"`
}
// Detail 商品详情
func (s goodsLogic) Detail(ctx context.Context, req interface{}) (res *GoodsDetailRes, err error) {
var method = "/app/product/storage/detailList"
result, err := post(ctx, method, g.Map{
"ids": gconv.Ints(req),
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type GoodsListReq struct {
Title string `json:"title,omitempty"` //商品名称
IsDisplay int `json:"is_display,omitempty"` //0下架1上架
RangeType string `json:"range_type,omitempty"` //筛选类型:agreement_price 协议价格 origin_rate常规利润率 activity_price 营销价格 guide_price 指导价格 activity_rate 营销利润率
RangeTypeFrom int `json:"range_type.from,omitempty"` //区间开始
RangeTo int `json:"range.to,omitempty"` //区间结束
CategoryID1 int `json:"category_1_id,omitempty"` //一级分类id
CategoryID2 int `json:"category_2_id,omitempty"` //二级分类id
CategoryID3 int `json:"category_3_id,omitempty"` //三级分类id
FreightType int `json:"freight_type,omitempty"` //运费类型1包邮2不包邮
Source int `json:"source,omitempty"` // 0中台自营 1云仓(云仓) 2京东 6阿里 7天猫 8苏宁 11华南一仓 98中台云仓 99永源 100YZH 101中台供应链 102跨境 103DWD 108YHZ新版
SupplierName string `json:"supplier_name,omitempty"` //供应商名称
SupplierID int `json:"supplier_id,omitempty"` //供应商ID
Type int `json:"type,omitempty"` // created_at:最新上架agreement_price:协议价格, guide_price指导价 activity_price营销价格 origin_rate常规利率 activity_rate营销利率
Sort bool `json:"sort,omitempty"` // false 倒叙 true正序
Page int `json:"page"` // 请求页数
PageSize int `json:"pageSize"` // 每页个数(最大值50)
IsNew int `json:"is_new,omitempty"` // 新品:1是0否
IsHot int `json:"is_hot,omitempty"` // 热卖:1是0否
IsPromotion int `json:"is_promotion,omitempty"` // 促销:1是0否
IsImport int `json:"is_import,omitempty"` // 是否导入(当前配置是否导入过):1是2否
}
type GoodsListRes struct {
CommonRes
Data struct {
List []struct {
Id int `json:"id"`
Title string `json:"title"`
ImageUrl string `json:"image_url"`
Source int `json:"source"`
Category1Id int `json:"category_1_id"`
Category2Id int `json:"category_2_id"`
Category3Id int `json:"category_3_id"`
BrandId int `json:"brand_id"`
AgreementPrice int `json:"agreement_price"`
GuidePrice int `json:"guide_price"`
ActivityPrice int `json:"activity_price"`
MarketPrice int `json:"market_price"`
SalePrice int `json:"sale_price"`
CostPrice int `json:"cost_price"`
OriginRate int `json:"origin_rate"`
ActivityRate int `json:"activity_rate"`
MarketRate int `json:"market_rate"`
Profit int `json:"profit"`
ProfitRate float64 `json:"profit_rate"`
IsDisplay int `json:"is_display"`
IsRecommend int `json:"is_recommend"`
IsNew int `json:"is_new"`
IsHot int `json:"is_hot"`
Stock int `json:"stock"`
Sales int `json:"sales"`
Unit string `json:"unit"`
IsPromotion int `json:"is_promotion"`
MinPrice int `json:"min_price"`
MaxPrice int `json:"max_price"`
CreatedAt int `json:"created_at"`
SupplierId int `json:"supplier_id"`
GatherSupplierId int `json:"gather_supplier_id"`
FreightType int `json:"freight_type"`
RecommendBrandStr string `json:"recommend_brand_str"`
RecommendCategoryStr string `json:"recommend_category_str"`
SupplierName string `json:"supplier_name"`
UpdatedAt int `json:"updated_at"`
Sort int `json:"sort"`
IsPlugin int `json:"is_plugin"`
Level1Price int `json:"level_1_price"`
Level2Price int `json:"level_2_price"`
Level3Price int `json:"level_3_price"`
Level4Price int `json:"level_4_price"`
Level5Price int `json:"level_5_price"`
Level6Price int `json:"level_6_price"`
Level7Price int `json:"level_7_price"`
Level8Price int `json:"level_8_price"`
Level9Price int `json:"level_9_price"`
Level10Price int `json:"level_10_price"`
Level1Profit int `json:"level_1_profit"`
Level2Profit int `json:"level_2_profit"`
Level3Profit int `json:"level_3_profit"`
Level4Profit int `json:"level_4_profit"`
Level5Profit int `json:"level_5_profit"`
Level6Profit int `json:"level_6_profit"`
Level7Profit int `json:"level_7_profit"`
Level8Profit int `json:"level_8_profit"`
Level9Profit int `json:"level_9_profit"`
Level10Profit int `json:"level_10_profit"`
Barcode string `json:"barcode"`
ImportApps string `json:"import_apps"`
IsBill int `json:"is_bill"`
SingleOption int `json:"single_option"`
SmallShopIdString string `json:"small_shop_id_string"`
SupplyLine string `json:"supply_line"`
IsVideoShop int `json:"is_video_shop"`
} `json:"list"`
Total int `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
NextUrl string `json:"next_url"`
SeverRatio int `json:"sever_ratio"`
} `json:"data"`
}
// List 商品列表
func (s goodsLogic) List(ctx context.Context, req GoodsListReq) (res *GoodsListRes, err error) {
var method = "/app/product/storage/list"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
package yunzmall
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type orderLogic struct {
}
var Order = orderLogic{}
type OrderAddress struct {
Area string `json:"area"`
City string `json:"city"`
Consignee string `json:"consignee"`
Description string `json:"description"`
Phone string `json:"phone"`
Province string `json:"province"`
Street string `json:"street"`
}
type OrderSpu struct {
Number int `json:"number"`
Sku int `json:"sku"`
}
type OrderBeforeReq struct {
Address OrderAddress `json:"address"`
Spu []OrderSpu `json:"spu"`
}
type OrderBeforeRes struct {
CommonRes
Data struct {
Desc string `json:"desc"`
Freight string `json:"freight"`
} `json:"data"`
}
// Before 前置校验
func (s orderLogic) Before(ctx context.Context, req OrderBeforeReq) (res *OrderBeforeRes, err error) {
var method = "/app/order/beforeCheck"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type OrderCreateReq struct {
OrderSn string `json:"order_sn"`
Spu []*OrderSpu `json:"spu"`
Address OrderAddress `json:"address"`
}
type OrderCreateRes struct {
CommonRes
Data struct {
Orders []struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
OrderSn int64 `json:"order_sn"`
ThirdOrderSn string `json:"third_order_sn"`
GatherSupplySn string `json:"gather_supply_sn"`
GatherSupplyMsg string `json:"gather_supply_msg"`
GatherSupplyType int `json:"gather_supply_type"`
Key string `json:"key"`
Title string `json:"title"`
Status int `json:"status"`
Amount int `json:"amount"`
RefundAmount int `json:"refund_amount"`
ItemAmount int `json:"item_amount"`
SupplyAmount int `json:"supply_amount"`
CostAmount int `json:"cost_amount"`
Freight int `json:"freight"`
ServiceFee int `json:"service_fee"`
GoodsCount int `json:"goods_count"`
SendStatus int `json:"send_status"`
RefundStatus int `json:"refund_status"`
Remark string `json:"remark"`
Note string `json:"note"`
TechnicalServicesFee int `json:"technical_services_fee"`
PaidAt interface{} `json:"paid_at"`
SentAt interface{} `json:"sent_at"`
ReceivedAt interface{} `json:"received_at"`
ClosedAt interface{} `json:"closed_at"`
UserId int `json:"user_id"`
SupplierId int `json:"supplier_id"`
GatherSupplyId int `json:"gather_supply_id"`
ApplicationId int `json:"application_id"`
TradeId int `json:"trade_id"`
PayTypeId int `json:"pay_type_id"`
PayInfoId int `json:"pay_info_id"`
ShippingMethodId int `json:"shipping_method_id"`
ShippingAddressId int `json:"shipping_address_id"`
SendTypeId int `json:"send_type_id"`
CommentStatus int `json:"comment_status"`
CanRefund int `json:"can_refund"`
Lock int `json:"lock"`
IsConnection int `json:"is_connection"`
AmountDetail struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems []struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems interface{} `json:"amount_items"`
} `json:"amount_items"`
} `json:"amount_detail"`
OrderItems []struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
Key string `json:"key"`
Title string `json:"title"`
SkuTitle string `json:"sku_title"`
Unit string `json:"unit"`
Qty int `json:"qty"`
Amount int `json:"amount"`
RefundAmount int `json:"refund_amount"`
DiscountAmount int `json:"discount_amount"`
DeductionAmount int `json:"deduction_amount"`
CostAmount int `json:"cost_amount"`
PaymentAmount int `json:"payment_amount"`
SupplyAmount int `json:"supply_amount"`
ImageUrl string `json:"image_url"`
SendStatus int `json:"send_status"`
RefundStatus int `json:"refund_status"`
TradeId int `json:"trade_id"`
SupplierId int `json:"supplier_id"`
UserId int `json:"user_id"`
OrderId int `json:"order_id"`
ProductId int `json:"product_id"`
SkuId int `json:"sku_id"`
OriginalSkuId int `json:"original_sku_id"`
CanRefund int `json:"can_refund"`
CommentStatus int `json:"comment_status"`
AmountDetail struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems []struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems []interface{} `json:"amount_items"`
} `json:"amount_items"`
} `json:"amount_detail"`
Options []struct {
SpecName string `json:"spec_name"`
SpecItemName string `json:"spec_item_name"`
} `json:"options"`
Sku struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
Title string `json:"title"`
Price int `json:"price"`
CostPrice int `json:"cost_price"`
OriginPrice int `json:"origin_price"`
GuidePrice int `json:"guide_price"`
ActivityPrice int `json:"activity_price"`
Stock int `json:"stock"`
Weight int `json:"weight"`
IsDisplay int `json:"is_display"`
ProductId int `json:"product_id"`
SupplierId int `json:"supplier_id"`
Code string `json:"code"`
Sn string `json:"sn"`
Barcode string `json:"barcode"`
ImageUrl string `json:"image_url"`
Options interface{} `json:"options"`
OriginalSkuId int `json:"original_sku_id"`
Describe string `json:"describe"`
TaxCode string `json:"tax_code"`
TaxProductName string `json:"tax_product_name"`
TaxShortName string `json:"tax_short_name"`
TaxOption string `json:"tax_option"`
TaxUnit string `json:"tax_unit"`
FavorablePolicy string `json:"favorable_policy"`
IsFavorablePolicy int `json:"is_favorable_policy"`
FreeOfTax int `json:"free_of_tax"`
ShortCode string `json:"short_code"`
TaxMeasurePrice int `json:"tax_measure_price"`
TaxRate int `json:"tax_rate"`
IsTaxLogo int `json:"is_tax_logo"`
} `json:"sku"`
Product struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
Title string `json:"title"`
OriginPrice int `json:"origin_price"`
GuidePrice int `json:"guide_price"`
Price int `json:"price"`
CostPrice int `json:"cost_price"`
ActivityPrice int `json:"activity_price"`
MinBuyQty int `json:"min_buy_qty"`
Stock int `json:"stock"`
Sales int `json:"sales"`
FeedbackRate int `json:"feedback_rate"`
Sn string `json:"sn"`
Code string `json:"code"`
IsNew int `json:"is_new"`
IsRecommend int `json:"is_recommend"`
IsHot int `json:"is_hot"`
IsPromotion int `json:"is_promotion"`
IsDisplay int `json:"is_display"`
StatusLock int `json:"status_lock"`
SingleOption int `json:"single_option"`
Desc string `json:"desc"`
ImageUrl string `json:"image_url"`
VideoUrl string `json:"video_url"`
Unit string `json:"unit"`
Barcode string `json:"barcode"`
Long int `json:"long"`
Wide int `json:"wide"`
High int `json:"high"`
Volume int `json:"volume"`
Freight int `json:"freight"`
FreightType int `json:"freight_type"`
MaxPrice int `json:"maxPrice"`
MinPrice int `json:"minPrice"`
MaxCostPrice int `json:"maxCostPrice"`
MinCostPrice int `json:"minCostPrice"`
MaxOriginPrice int `json:"maxOriginPrice"`
MinOriginPrice int `json:"minOriginPrice"`
Gallery interface{} `json:"gallery"`
Qualifications interface{} `json:"qualifications"`
DetailImages string `json:"detail_images"`
Attrs interface{} `json:"attrs"`
Supplier struct {
Id int `json:"id"`
Name string `json:"name"`
} `json:"supplier"`
GatherSupply struct {
Id int `json:"id"`
Name string `json:"name"`
Key string `json:"key"`
CategoryId int `json:"category_id"`
} `json:"gather_supply"`
AliProduct struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
ProductId int `json:"product_id"`
SkuId int `json:"sku_id"`
AliSkuId string `json:"ali_sku_id"`
AliProductId int `json:"ali_product_id"`
ShopId string `json:"shop_id"`
} `json:"ali_product"`
BrandId int `json:"brand_id"`
Brand struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
Name string `json:"name"`
} `json:"brand"`
SupplierId int `json:"supplier_id"`
GatherSupplyId int `json:"gather_supply_id"`
Category1Id int `json:"category1_id"`
Category2Id int `json:"category2_id"`
Category3Id int `json:"category3_id"`
FreightTemplateId int `json:"freight_template_id"`
Source int `json:"source"`
Sort int `json:"sort"`
SourceGoodsId int `json:"source_goods_id"`
LocationId int `json:"location_id"`
Freeze int `json:"freeze"`
ShopLevel int `json:"shop_level"`
DesLevel int `json:"des_level"`
ExpressLevel int `json:"express_level"`
Level int `json:"level"`
ChildTitle string `json:"child_title"`
BillPosition int `json:"bill_position"`
Md5 string `json:"md5"`
TaxCode string `json:"tax_code"`
TaxProductName string `json:"tax_product_name"`
TaxShortName string `json:"tax_short_name"`
TaxOption string `json:"tax_option"`
TaxUnit string `json:"tax_unit"`
FavorablePolicy string `json:"favorable_policy"`
IsFavorablePolicy int `json:"is_favorable_policy"`
FreeOfTax int `json:"free_of_tax"`
ShortCode string `json:"short_code"`
TaxMeasurePrice int `json:"tax_measure_price"`
TaxRate int `json:"tax_rate"`
IsTaxLogo int `json:"is_tax_logo"`
ProductVerify struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
ProductId int `json:"product_id"`
SupplierId int `json:"supplier_id"`
Status int `json:"status"`
IsDisplay int `json:"is_display"`
} `json:"product_verify"`
IsPlugin int `json:"is_plugin"`
IsSingleOrder int `json:"is_single_order"`
SupplierSourceId int `json:"supplier_source_id"`
SupplierSourceCategoryId int `json:"supplier_source_category_id"`
} `json:"product"`
AfterSales struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
AfterSaleSn string `json:"after_sale_sn"`
UserId int `json:"user_id"`
Amount int `json:"amount"`
TechnicalServicesFee int `json:"technical_services_fee"`
Freight int `json:"freight"`
PracticalAmount int `json:"practical_amount"`
ReasonType int `json:"reason_type"`
Reason string `json:"reason"`
Description string `json:"description"`
OrderId int `json:"order_id"`
OrderItemId int `json:"order_item_id"`
SkuId int `json:"sku_id"`
ProductId int `json:"product_id"`
ShippingAddressId int `json:"shipping_address_id"`
IsReceived int `json:"is_received"`
PayMethod int `json:"pay_method"`
ReturnOrderExpressId int `json:"return_order_express_id"`
Status int `json:"status"`
Type int `json:"type"`
DetailImages interface{} `json:"detail_images"`
Logs interface{} `json:"logs"`
AfterSalesAudit struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
AfterSalesId int `json:"after_sales_id"`
AdminId int `json:"admin_id"`
ReasonType int `json:"reason_type"`
Reason string `json:"reason"`
Status int `json:"status"`
Cause string `json:"cause"`
StatusName string `json:"status_name"`
RefundName string `json:"refund_name"`
} `json:"after_sales_audit"`
ReturnOrderExpress struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
AfterSalesId int `json:"after_sales_id"`
CompanyName string `json:"company_name"`
CompanyCode string `json:"company_code"`
ExpressNo string `json:"express_no"`
} `json:"return_order_express"`
RefundReasonName string `json:"refund_reason_name"`
SuccessAt interface{} `json:"success_at"`
StatusName string `json:"status_name"`
} `json:"after_sales"`
} `json:"order_items"`
OrderExpress struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
OrderId int `json:"order_id"`
CompanyCode string `json:"company_code"`
ExpressNo string `json:"express_no"`
OrderItems interface{} `json:"order_items"`
IsEmpty int `json:"is_empty"`
FinalSend int `json:"final_send"`
} `json:"order_express"`
ShippingAddress struct {
Id int `json:"id"`
Realname string `json:"realname"`
Mobile string `json:"mobile"`
CountryId int `json:"country_id"`
ProvinceId int `json:"province_id"`
CityId int `json:"city_id"`
CountyId int `json:"county_id"`
TownId int `json:"town_id"`
Province string `json:"province"`
City string `json:"city"`
County string `json:"county"`
Town string `json:"town"`
Detail string `json:"detail"`
Lng string `json:"lng"`
Lat string `json:"lat"`
} `json:"shipping_address"`
OrderBill struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
Type int `json:"type"`
AccountType int `json:"account_type"`
PersonName string `json:"person_name"`
Mobile string `json:"mobile"`
CompanyName string `json:"company_name"`
CompanyCode string `json:"company_code"`
Email string `json:"email"`
SignAddress string `json:"sign_address"`
SignMobile string `json:"sign_mobile"`
OpeningBank string `json:"opening_bank"`
BankAccount string `json:"bank_account"`
DetailType int `json:"detail_type"`
Amount int `json:"amount"`
AddressId int `json:"address_id"`
Applicant string `json:"applicant"`
OrderId int `json:"order_id"`
BillId int `json:"bill_id"`
Status int `json:"status"`
Drawer int `json:"drawer"`
} `json:"order_bill"`
TechnologyFeeBill struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
OrderId int `json:"order_id"`
BillId int `json:"bill_id"`
Amount int `json:"amount"`
Status int `json:"status"`
} `json:"technology_fee_bill"`
IsUpdateShippingAddress int `json:"is_update_shipping_address"`
IsCps int `json:"is_cps"`
} `json:"Orders"`
} `json:"data"`
}
// Create 下单
func (s orderLogic) Create(ctx context.Context, req OrderCreateReq) (res *OrderCreateRes, err error) {
var method = "/app/order"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type OrderAvailableReq struct {
Spu []*OrderSpu `json:"spu"`
Address OrderAddress `json:"address"`
}
type OrderAvailableRes struct {
Code int `json:"code"`
Data struct {
Available []int `json:"available"`
Ban []int `json:"ban"`
} `json:"data"`
Msg string `json:"msg"`
}
// Available 可售检测
func (s orderLogic) Available(ctx context.Context, req OrderAvailableReq) (res *OrderAvailableRes, err error) {
var method = "/app/order/availableCheck"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type OrderDetailRes struct {
CommonRes
Data struct {
Read struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
OrderSn int64 `json:"order_sn"`
Status int `json:"status"`
StatusName string `json:"status_name"`
Title string `json:"title"`
Freight int `json:"freight"`
Amount int `json:"amount"`
ItemAmount int `json:"item_amount"`
TechnicalServicesFee int `json:"technical_services_fee"`
Remark string `json:"remark"`
Note string `json:"note"`
GoodsCount int `json:"goods_count"`
UserId int `json:"user_id"`
ShippingAddressId int `json:"shipping_address_id"`
ShippingMethod string `json:"shipping_method"`
ShippingMethodId int `json:"shipping_method_id"`
CommentStatus int `json:"comment_status"`
OrderItems []struct {
Id int `json:"id"`
OrderId int `json:"order_id"`
Title string `json:"title"`
SkuTitle string `json:"sku_title"`
Unit string `json:"unit"`
Qty int `json:"qty"`
Amount int `json:"amount"`
Price int `json:"price"`
ImageUrl string `json:"image_url"`
ProductId int `json:"product_id"`
SupplyAmount int `json:"supply_amount"`
SkuId int `json:"sku_id"`
OrderExpressId int `json:"order_express_id"`
CommentStatus int `json:"comment_status"`
Options []struct {
SpecName string `json:"spec_name"`
SpecItemName string `json:"spec_item_name"`
} `json:"options"`
} `json:"order_items"`
OrderExpress []interface{} `json:"order_express"`
ShippingAddress struct {
Id int `json:"id"`
Realname string `json:"realname"`
Mobile string `json:"mobile"`
CountryId int `json:"country_id"`
ProvinceId int `json:"province_id"`
CityId int `json:"city_id"`
CountyId int `json:"county_id"`
TownId int `json:"town_id"`
Province string `json:"province"`
City string `json:"city"`
County string `json:"county"`
Town string `json:"town"`
Detail string `json:"detail"`
Lng string `json:"lng"`
Lat string `json:"lat"`
} `json:"shipping_address"`
User struct {
Id int `json:"id"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
Mobile string `json:"mobile"`
Avatar string `json:"avatar"`
Username string `json:"username"`
Nickname string `json:"nickname"`
Status int `json:"status"`
Uuid string `json:"uuid"`
LevelId int `json:"level_id"`
ParentId int `json:"parent_id"`
QrCode string `json:"qr_code"`
InviteCode string `json:"invite_code"`
WxUsername string `json:"wx_username"`
UserLevel struct {
Id int `json:"id"`
CreatedAt interface{} `json:"created_at"`
UpdatedAt interface{} `json:"updated_at"`
Discount int `json:"discount"`
Name string `json:"name"`
} `json:"user_level"`
} `json:"user"`
AmountDetail struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems []struct {
Title string `json:"title"`
Amount int `json:"amount"`
Qty int `json:"qty"`
Desc string `json:"desc"`
AmountItems interface{} `json:"amount_items"`
} `json:"amount_items"`
} `json:"amount_detail"`
PaidAt int `json:"paid_at"`
SentAt interface{} `json:"sent_at"`
ReceivedAt interface{} `json:"received_at"`
ClosedAt interface{} `json:"closed_at"`
Button []struct {
Title string `json:"title"`
Url string `json:"url"`
} `json:"button"`
} `json:"read"`
} `json:"data"`
}
func (s orderLogic) Detail(ctx context.Context, req string) (res *OrderDetailRes, err error) {
var method = "/app/order/orderDetail"
result, err := post(ctx, method, g.Map{
"order_sn": req,
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
package yunzmall
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type refundLogic struct {
}
var Refund = refundLogic{}
type RefundBeforeRes struct {
CommonRes
Data map[string]string `json:"data"`
}
func (s refundLogic) Before(ctx context.Context, req string) (res *RefundBeforeRes, err error) {
var method = "/app/afterSales/getAfterSalesTypeNameMap"
result, err := post(ctx, method, g.Map{
"order_item_id": req,
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type RefundDetailRes struct {
CommonRes
Data struct {
Id int `json:"id"`
Contacts string `json:"contacts"`
Tel string `json:"tel"`
Plane string `json:"plane"`
Country string `json:"country"`
Province int `json:"province"`
City int `json:"city"`
District int `json:"district"`
Address string `json:"address"`
AddressType []string `json:"address_type"`
IsDefault int `json:"is_default"`
SupplierId int `json:"supplier_id"`
ProvinceName struct {
Id int `json:"id"`
ParentId int `json:"parent_id"`
Name string `json:"name"`
Level int `json:"level"`
} `json:"province_name"`
CityName struct {
Id int `json:"id"`
ParentId int `json:"parent_id"`
Name string `json:"name"`
Level int `json:"level"`
} `json:"city_name"`
DistrictName struct {
Id int `json:"id"`
ParentId int `json:"parent_id"`
Name string `json:"name"`
Level int `json:"level"`
} `json:"district_name"`
Supplier struct {
Id int `json:"id"`
Name string `json:"name"`
Supplier string `json:"supplier"`
} `json:"supplier"`
} `json:"data"`
}
// Detail 详情
func (s refundLogic) Detail(ctx context.Context, req string) (res *RefundDetailRes, err error) {
var method = "/app/supplier/findShopAddressByOrderId"
result, err := post(ctx, method, g.Map{
"after_sales_id": req,
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
// Reason 售后原因
func (s refundLogic) Reason(ctx context.Context, afterSaleType, isReceived int) (res *RefundDetailRes, err error) {
var method = "/app/afterSales/reason/list"
result, err := post(ctx, method, g.Map{
"after_sale_type": afterSaleType,
"is_received": isReceived,
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
type RefundCreateReq struct {
OrderId int `json:"order_id,omitempty"` //订单id
ThirdOrderSn string `json:"third_order_sn,omitempty"` //采购端订单号
OrderItemId int `json:"order_item_id"` //子订单id
ReasonType int `json:"reason_type"` //售后原因
Description string `json:"description"` //描述
Reason string `json:"reason"` //售后原因是 其他的的时候填写
RefundType int `json:"refund_type"` //退款还是退货退款
IsReceived int `json:"is_received"` //是否收到货 1是0否
DetailImages []string `json:"detail_images,omitempty"` //图片凭证
RefundWay int `json:"refund_way,omitempty"` //退款方式
Num int `json:"num"` //退款商品个数
BarterSkuId int `json:"barter_sku_id,omitempty"` //换货中台规格id
BarterNum int `json:"barter_num,omitempty"` //换货数量
}
type RefundCreateRes struct {
CommonRes
Data int `json:"data"`
}
// Create 申请售后
func (s refundLogic) Create(ctx context.Context, req RefundCreateReq) (res *RefundCreateRes, err error) {
var method = "/app/afterSales/create"
result, err := post(ctx, method, gconv.Map(req))
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
package yunzmall
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type storageLogic struct {
}
var Storage = storageLogic{}
// Add 添加选品库商品
func (s storageLogic) Add(ctx context.Context, req interface{}) (res *CommonRes, err error) {
var method = "/app/product/storage/addStorage"
result, err := post(ctx, method, g.Map{
"ids": gconv.Ints(req),
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
// Delete 删除选品库商品
func (s storageLogic) Delete(ctx context.Context, req interface{}) (res *CommonRes, err error) {
var method = "/app/product/storage/deleteStorage"
result, err := post(ctx, method, g.Map{
"ids": gconv.Ints(req),
})
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
return
}
package yunzmall
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/errors/gerror"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
)
type tokenLogic struct {
}
var Token = tokenLogic{}
type TokenGetRes struct {
Code int `json:"code"`
Data struct {
Token string `json:"token"`
ExpiresAt int64 `json:"expiresAt"`
} `json:"data"`
Msg string `json:"msg"`
}
func (s tokenLogic) Get(ctx context.Context) (res *TokenGetRes, err error) {
var method = "/app/application/getToken"
result, err := post(ctx, method, g.Map{
"app_key": server.AppKey,
"app_secret": server.AppSecret,
}, true)
if err != nil {
return
}
err = gjson.New(result).Scan(&res)
if err != nil {
return
}
return
}
func (s tokenLogic) Refresh(ctx context.Context) (res string, err error) {
var conn = g.Redis().Conn()
defer func() {
_ = conn.Close()
}()
_, _ = conn.DoVar("SELECT", server.DB)
var result *TokenGetRes
result, err = s.Get(ctx)
if err != nil {
err = gerror.New("获取token失败")
return
}
if result.Code != 0 {
err = gerror.New("获取token失败")
return
}
res = result.Data.Token
_, _ = conn.Do("HMSET", CacheKey, "Token", result.Data.Token, "ExpiresAt", result.Data.ExpiresAt)
return
}
type TokenCacheRes struct {
Token string
ExpiresAt int64
}
func (s tokenLogic) Access(ctx context.Context) (res string, err error) {
var conn = g.Redis().Conn()
defer func() {
_ = conn.Close()
}()
_, _ = conn.DoVar("SELECT", server.DB)
cache, _ := conn.DoVar("HGETALL", CacheKey)
g.Log().Line(true).Info(cache.String())
if cache.IsEmpty() {
return s.Refresh(ctx)
}
var cacheRes *TokenCacheRes
_ = gjson.New(cache).Scan(&cacheRes)
if cacheRes.ExpiresAt < gtime.TimestampMilli() {
return s.Refresh(ctx)
}
res = cacheRes.Token
return
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论