From c4f6462945ff2fc1f27ee9961a832c648192a339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 12 Sep 2025 16:23:59 +0800 Subject: [PATCH] 1 --- platformapi/ebaiapi/callback.go | 6 +- platformapi/ebaiapi/invoice.go | 114 ++++++++++++++++++++++++++ platformapi/ebaiapi/shop_sku.go | 3 + platformapi/ebaiapi/shop_sku_test.go | 2 +- platformapi/mtwmapi/bill_list_test.go | 7 +- platformapi/mtwmapi/im_test.go | 12 +-- platformapi/mtwmapi/invoice.go | 1 - platformapi/mtwmapi/mtwmapi.go | 3 +- platformapi/mtwmapi/mtwmapi_test.go | 4 +- platformapi/mtwmapi/retail.go | 47 +++++++++++ platformapi/mtwmapi/retail_test.go | 6 ++ 11 files changed, 189 insertions(+), 16 deletions(-) create mode 100644 platformapi/ebaiapi/invoice.go diff --git a/platformapi/ebaiapi/callback.go b/platformapi/ebaiapi/callback.go index 8944facb..f0296077 100644 --- a/platformapi/ebaiapi/callback.go +++ b/platformapi/ebaiapi/callback.go @@ -22,8 +22,10 @@ const ( CmdShopUnbindMsg = "shop.unbind.msg" //IM消息回调通知 - CmdImMessageSendEvent = "im.message.send.event" //用户/骑手消息通知 - CmdImMessageReadEvent = "im.message.read.event" //用户/骑手已读通知 + CmdImMessageSendEvent = "im.message.send.event" // 用户/骑手消息通知 + CmdImMessageReadEvent = "im.message.read.event" // 用户/骑手已读通知 + CmdImInvoicApply = "invoice.apply.push" // 用户发送发票申请 + CmdImInvoicEmail = "invoice.email.push" // 发票用户重发邮件 ) diff --git a/platformapi/ebaiapi/invoice.go b/platformapi/ebaiapi/invoice.go new file mode 100644 index 00000000..5c678faf --- /dev/null +++ b/platformapi/ebaiapi/invoice.go @@ -0,0 +1,114 @@ +package ebaiapi + +import ( + "fmt" + "git.rosy.net.cn/baseapi/utils" +) + +// UploadInvoice 上传发票回复 +func (a *API) UploadInvoice(baiduShopId, applicationNo, fileUrl string) (*UploadInvoiceResult, error) { + param := &UpdateInvoice{ + BaiduShopId: baiduShopId, + ShopId: "", + RequestList: nil, + } + requestList := make([]ApplicationList, 0, 0) + requestList = append(requestList, ApplicationList{ + ApplicationNo: applicationNo, + Status: "", + InvoiceList: nil, + FileUrl: fileUrl, + InvoiceClass: "", + InvoiceCode: "", + InvoiceDate: "", + InvoiceMaterial: "", + InvoiceNo: "", + Memo: "", + LineList: nil, + MachineCode: "", + SellerInfo: SellerInfo{}, + TaxAmount: "", + ValidationCode: "", + }) + param.RequestList = requestList + + data, err := a.AccessAPI("invoice.apply.batchUpdate", utils.Struct2Map(param, "", false)) + if err != nil { + return nil, err + } + if data.ErrNo != 0 { + return nil, fmt.Errorf(data.Error) + } + result := &UploadInvoiceResult{} + if err = utils.UnmarshalUseNumber(utils.MustMarshal(data.Data), result); err != nil { + return nil, err + } + return result, nil +} + +type UploadInvoiceResult struct { + SuccessfulApplicationNoList []string `json:"successful_application_no_list"` + FailedApplicationNoList []string `json:"failed_application_no_list"` +} + +// UpdateInvoice 申请 +type UpdateInvoice struct { + BaiduShopId string `json:"baidu_shop_id"` + ShopId string `json:"shop_id"` + RequestList []ApplicationList `json:"request_list"` +} + +type ApplicationList struct { + ApplicationNo string `json:"application_no"` + Status string `json:"status"` + InvoiceList []InvoiceList `json:"buyer_title"` + FileUrl string `json:"file_url"` + InvoiceClass string `json:"invoice_class"` + InvoiceCode string `json:"invoice_code"` + InvoiceDate string `json:"invoice_date"` + InvoiceMaterial string `json:"invoice_material"` + InvoiceNo string `json:"invoice_no"` + Memo string `json:"memo"` + LineList []LineList `json:"line_list"` + MachineCode string `json:"machine_code"` + SellerInfo SellerInfo `json:"seller_info"` + TaxAmount string `json:"tax_amount"` + ValidationCode string `json:"validation_code"` +} + +type InvoiceList struct { + AmountWithTax float64 `json:"amount_with_tax"` + AmountWithoutTax float64 `json:"amount_without_tax"` + BuyerTitle struct { + BankAccount string `json:"bank_account"` + BankName string `json:"bank_name"` + RegisterAddress string `json:"register_address"` + RegisterPhone string `json:"register_phone"` + TaxPayerNum string `json:"tax_payer_num"` + TitleName string `json:"title_name"` + TitleType string `json:"title_type"` + } +} + +type LineList struct { + AmountWithoutTax float64 `json:"amount_without_tax"` + CargoName string `json:"cargo_name"` + CargoNo string `json:"cargo_no"` + Quantity int `json:"quantity"` + Specification string `json:"specification"` + TaxAmount int `json:"tax_amount"` + TaxRate float64 `json:"tax_rate"` + Unit string `json:"unit"` + UnitPrice float64 `json:"unit_price"` +} +type SellerInfo struct { + BankAccount string `json:"bank_account"` + BankName string `json:"bank_name"` + Checker string `json:"checker"` + Clerk string `json:"clerk"` + Name string `json:"name"` + Payee string `json:"payee"` + RegisterAddress string `json:"register_address"` + RegisterPhone string `json:"register_phone"` + TaxPayerNum string `json:"tax_payer_num"` +} diff --git a/platformapi/ebaiapi/shop_sku.go b/platformapi/ebaiapi/shop_sku.go index 85ac0869..5438ab4f 100644 --- a/platformapi/ebaiapi/shop_sku.go +++ b/platformapi/ebaiapi/shop_sku.go @@ -2,6 +2,7 @@ package ebaiapi import ( "fmt" + "git.rosy.net.cn/jx-callback/globals" "regexp" "strings" @@ -327,6 +328,7 @@ func (a *API) SkuCreate(trackInfo, shopID string, customSkuID int64, params map[ KeyShopID: shopID, KeyCustomSkuID: customSkuID, } + globals.SugarLogger.Debugf("----SkuCreate,params1 -- : %s", utils.Format4Output(params, false)) if params["upc"] == nil { defParams["upc"] = "upc-" + utils.Int2Str(int(customSkuID)) } @@ -337,6 +339,7 @@ func (a *API) SkuCreate(trackInfo, shopID string, customSkuID int64, params map[ defParams["brand_name"] = "无" // 很狗血的是,你还必须填个无才行。。。 }*/ params = utils.MergeMaps(params, defParams) + globals.SugarLogger.Debugf("----SkuCreate,params2 -- : %s", utils.Format4Output(params, false)) result, err := a.AccessAPI2("sku.create", params, trackInfo) if err == nil && result.Data != nil { return utils.Interface2Int64WithDefault(result.Data.(map[string]interface{})[KeySkuID], 0), nil diff --git a/platformapi/ebaiapi/shop_sku_test.go b/platformapi/ebaiapi/shop_sku_test.go index 4ff7be34..074cba4a 100644 --- a/platformapi/ebaiapi/shop_sku_test.go +++ b/platformapi/ebaiapi/shop_sku_test.go @@ -328,7 +328,7 @@ func TestDeleteStoreSku(t *testing.T) { } func TestDeleteSku(t *testing.T) { - shopId := "669283" + shopId := "667410" param1 := &SkuListParams{ Page: 1, PageSize: 100, diff --git a/platformapi/mtwmapi/bill_list_test.go b/platformapi/mtwmapi/bill_list_test.go index a4749a9b..ab00432c 100644 --- a/platformapi/mtwmapi/bill_list_test.go +++ b/platformapi/mtwmapi/bill_list_test.go @@ -1,6 +1,7 @@ package mtwmapi import ( + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "testing" "time" @@ -8,7 +9,7 @@ import ( func TestBillList(t *testing.T) { now := time.Now() - from := time.Date(now.Year(), now.Month(), now.Day()-2, 0, 0, 0, 0, time.Local) + from := time.Date(now.Year(), now.Month(), now.Day()-5, 0, 0, 0, 0, time.Local) to := time.Date(now.Year(), now.Month(), now.Day()-2, 23, 59, 59, 59, time.Local) param := &Bill{ AppPoiCode: "4418003", @@ -19,13 +20,13 @@ func TestBillList(t *testing.T) { AccessToken: api.token, } - _, _, _, err := api.GetStoreBillList(param) + _, fine, _, err := api.GetStoreBillList(param) if err != nil { globals.SugarLogger.Debugf("err := %v", err) return } - //globals.SugarLogger.Debugf("settleId := %d", settleId) + globals.SugarLogger.Debugf("settleId := %s", utils.Format4Output(fine, false)) //for _, v := range data { // globals.SugarLogger.Debugf("OrderId : %s , TimingFee : %d , DeliveryFee : %d , PlatformSettlement : %d ", v.OrderId, v.TimingFee, v.DeliveryFee, v.PlatformSettlement) //} diff --git a/platformapi/mtwmapi/im_test.go b/platformapi/mtwmapi/im_test.go index 56590c4b..6dc1aa41 100644 --- a/platformapi/mtwmapi/im_test.go +++ b/platformapi/mtwmapi/im_test.go @@ -77,14 +77,14 @@ func TestRdbSet(t *testing.T) { func TestSendMsg(t *testing.T) { data := PushContentReq{ AppID: 589, - AppPoiCode: "7290541", - MsgID: 1729566539763500, - MsgContent: "cqH27xu/6vS+eqmykE39nA==", + AppPoiCode: "29066882", + MsgID: 175758059520401, + MsgContent: "v+JsErdWUcxwSLVPfXgw7+0chcSyHbInTQOgcOGGLaGnb92NO9Iut8rgpGDQbvYYjjPzX7XCcEud/ECwcZskl+HoQF6Qa+La1++qGurBov0=", MsgSource: 1, - MsgType: 1, + MsgType: 2, Cts: int(time.Now().Unix()), - OrderID: 3801305470340611516, - OpenUserID: 9548822498, + OrderID: 0, + OpenUserID: 9020915181, } dataMar, err := json.Marshal(data) fmt.Println(string(dataMar)) diff --git a/platformapi/mtwmapi/invoice.go b/platformapi/mtwmapi/invoice.go index 654a6850..62fbf2bd 100644 --- a/platformapi/mtwmapi/invoice.go +++ b/platformapi/mtwmapi/invoice.go @@ -48,7 +48,6 @@ func (a *API) UploadInvoice(orderId, invoiceUrl, invoiceId, taskId string) (err for _, v := range resp.(map[string]interface{})["error_list"].([]interface{}) { errMsg = append(errMsg, v.(map[string]interface{})["msg"].(string)) } - } return fmt.Errorf("%s", strings.Join(errMsg, ",")) } diff --git a/platformapi/mtwmapi/mtwmapi.go b/platformapi/mtwmapi/mtwmapi.go index 0ad49fff..813645ac 100644 --- a/platformapi/mtwmapi/mtwmapi.go +++ b/platformapi/mtwmapi/mtwmapi.go @@ -5,6 +5,7 @@ import ( "crypto/md5" "fmt" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/globals" "mime/multipart" "net/http" "net/url" @@ -149,7 +150,7 @@ func (a *API) AccessAPI2(cmd string, isGet bool, bizParams map[string]interface{ } signURL := a.genURL(cmd) + "?" params[signKey] = a.signParams(signURL, params) - //globals.SugarLogger.Debugf("test mtCancelAct cmd=%s sig=%s", cmd, utils.Format4Output(params, false)) + globals.SugarLogger.Debugf("-----sing := %s", params[signKey].(string)) err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { var request *http.Request diff --git a/platformapi/mtwmapi/mtwmapi_test.go b/platformapi/mtwmapi/mtwmapi_test.go index 0a53087a..cea237b3 100644 --- a/platformapi/mtwmapi/mtwmapi_test.go +++ b/platformapi/mtwmapi/mtwmapi_test.go @@ -20,10 +20,10 @@ func init() { baseapi.Init(sugarLogger) // 菜市 - //api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "") + api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "") // 果园 - api = New("4123", "df2c88338b85f830cebce2a9eab56628", "", "") + //api = New("4123", "df2c88338b85f830cebce2a9eab56628", "", "") //商超 //api = New("5873", "41c479790a76f86326f89e8048964739", "", "token_nld07Y5m8rEQZJMMrvZGmA") diff --git a/platformapi/mtwmapi/retail.go b/platformapi/mtwmapi/retail.go index b951fcd1..5dd5fe1a 100644 --- a/platformapi/mtwmapi/retail.go +++ b/platformapi/mtwmapi/retail.go @@ -1,6 +1,7 @@ package mtwmapi import ( + "encoding/json" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "regexp" @@ -471,6 +472,52 @@ type CategoryAttrValueListResult struct { Value string `json:"value"` } +// RetailProductRules 根据末级美团分类ID获取图片发布规则 +func (a *API) RetailProductRules(tagID int64) (*ProductRulesObj, error) { + result, err := a.AccessAPI2("retail/product/rules", true, map[string]interface{}{ + "tag_id": tagID, + }, "success_map", "") + if err != nil { + return nil, err + } + + rules := &ProductRulesObj{} + if result != nil { + resultByte, _ := json.Marshal(result) + err = utils.UnmarshalUseNumber(resultByte, rules) + if err != nil { + return nil, err + } + } + return rules, err +} + +type ProductRulesObj struct { + StructRules []struct { + RuleId int `json:"rule_id"` + RuleName string `json:"rule_name"` + ValueList []struct { + IsByDefault bool `json:"is_by_default"` + ValueId int `json:"value_id"` + ValueName string `json:"value_name"` + } `json:"value_list"` + } `json:"struct_rules"` + UnstructRules struct { + QualificationPicturesRule struct { + IsQualificationPicturesNeed int `json:"is_qualification_pictures_need"` + } `json:"qualification_pictures_rule"` + SpecialPicturesRules []struct { + IsDisplayed int `json:"is_displayed"` + IsRequired int `json:"is_required"` + NumLimit int `json:"num_limit"` + SpecialPictureDescription string `json:"special_picture_description"` + SpecialPictureExample string `json:"special_picture_example"` + SpecialPictureTitle string `json:"special_picture_title"` + SpecialPictureType int `json:"special_picture_type"` + } `json:"special_pictures_rules"` + } `json:"unstruct_rules"` +} + //category/attr/value/list 查询特殊属性的属性值列表 //https://open-shangou.meituan.com/home/docDetail/387 func (a *API) CategoryAttrValueList(attr_id int64, keyword string) (categoryAttrValueListResult []*CategoryAttrValueListResult, err error) { diff --git a/platformapi/mtwmapi/retail_test.go b/platformapi/mtwmapi/retail_test.go index c6417dd7..99c30413 100644 --- a/platformapi/mtwmapi/retail_test.go +++ b/platformapi/mtwmapi/retail_test.go @@ -462,3 +462,9 @@ func TestDeleteCat(t *testing.T) { } } + +func TestRetailProductRules(t *testing.T) { + result, err := api.RetailProductRules(200002538) + t.Log(utils.Format4Output(result, false)) + t.Log(err) +}