From d1256e2ae942a0388efb80478283cd53ebd01872 Mon Sep 17 00:00:00 2001 From: Rzy <465386466@qq.com> Date: Fri, 7 Jun 2024 14:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86rpc=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=AE=9A=E4=B9=89=E5=92=8C=E5=B7=A5=E5=85=B7=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 6 +- cmd/rpc/internal/config/config.go | 7 +- .../internal/logic/marketKeyDiscardLogic.go | 5 +- cmd/rpc/internal/logic/marketKeySendLogic.go | 5 +- cmd/rpc/internal/logic/marketQueryLogic.go | 6 +- cmd/rpc/internal/logic/po/market/market.go | 94 +++++++++++++++++++ cmd/rpc/internal/logic/po/zltx/types/base.go | 4 + cmd/rpc/internal/logic/vo/market.go | 6 +- cmd/rpc/internal/svc/serviceContext.go | 3 + cmd/rpc/pb/transfer.proto | 1 + pkg/common/market.go | 2 +- 11 files changed, 121 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index da30658..b6b188d 100755 --- a/Makefile +++ b/Makefile @@ -44,17 +44,17 @@ apirun: cd cmd/api && go run transfer.go .PHONY: apivalidate -# 运行rpc +# api有效测试 apivalidate: cd cmd/api/desc && goctl api validate --api *.api .PHONY: apiformat -# 运行rpc +# 格式化api文件 apiformat: cd cmd/api/desc && goctl api format --dir ./ .PHONY: apitodoc -# 运行rpc +# 生成api文档 apitodoc: cd cmd/api/desc && goctl api doc --dir ./ diff --git a/cmd/rpc/internal/config/config.go b/cmd/rpc/internal/config/config.go index 917fb9a..0082f74 100755 --- a/cmd/rpc/internal/config/config.go +++ b/cmd/rpc/internal/config/config.go @@ -21,8 +21,7 @@ type Config struct { DataSource string } } - - Cache cache.CacheConf - - ZLTX types.ZLTXConf + Cache cache.CacheConf + ZLTX types.ZLTXConf + Market types.MarketConf } diff --git a/cmd/rpc/internal/logic/marketKeyDiscardLogic.go b/cmd/rpc/internal/logic/marketKeyDiscardLogic.go index d901232..23c6748 100644 --- a/cmd/rpc/internal/logic/marketKeyDiscardLogic.go +++ b/cmd/rpc/internal/logic/marketKeyDiscardLogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "trasfer_middleware/pkg/common" "trasfer_middleware/cmd/rpc/internal/svc" "trasfer_middleware/cmd/rpc/pb/transfer" @@ -24,7 +25,7 @@ func NewMarketKeyDiscardLogic(ctx context.Context, svcCtx *svc.ServiceContext) * } func (l *MarketKeyDiscardLogic) MarketKeyDiscard(in *transfer.MarketKeyDiscardReq) (*transfer.MarketKeyDiscardRes, error) { - // todo: add your logic here and delete this line + res, err := l.svcCtx.Market.SetData(common.StructToMap(in)).KeyDiscard() - return &transfer.MarketKeyDiscardRes{}, nil + return res, err } diff --git a/cmd/rpc/internal/logic/marketKeySendLogic.go b/cmd/rpc/internal/logic/marketKeySendLogic.go index b9b5843..608c642 100644 --- a/cmd/rpc/internal/logic/marketKeySendLogic.go +++ b/cmd/rpc/internal/logic/marketKeySendLogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "trasfer_middleware/pkg/common" "trasfer_middleware/cmd/rpc/internal/svc" "trasfer_middleware/cmd/rpc/pb/transfer" @@ -24,7 +25,7 @@ func NewMarketKeySendLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Mar } func (l *MarketKeySendLogic) MarketKeySend(in *transfer.MarketKeySendReq) (*transfer.MarketKeySendRes, error) { - // todo: add your logic here and delete this line + res, err := l.svcCtx.Market.SetData(common.StructToMap(in)).KeySend() - return &transfer.MarketKeySendRes{}, nil + return res, err } diff --git a/cmd/rpc/internal/logic/marketQueryLogic.go b/cmd/rpc/internal/logic/marketQueryLogic.go index fef7b19..6a84c9d 100644 --- a/cmd/rpc/internal/logic/marketQueryLogic.go +++ b/cmd/rpc/internal/logic/marketQueryLogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "trasfer_middleware/pkg/common" "trasfer_middleware/cmd/rpc/internal/svc" "trasfer_middleware/cmd/rpc/pb/transfer" @@ -24,7 +25,6 @@ func NewMarketQueryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Marke } func (l *MarketQueryLogic) MarketQuery(in *transfer.MarketQueryReq) (*transfer.MarketQueryRes, error) { - // todo: add your logic here and delete this line - - return &transfer.MarketQueryRes{}, nil + res, err := l.svcCtx.Market.SetData(common.StructToMap(in)).Query() + return res, err } diff --git a/cmd/rpc/internal/logic/po/market/market.go b/cmd/rpc/internal/logic/po/market/market.go index 0274b03..7d341ec 100644 --- a/cmd/rpc/internal/logic/po/market/market.go +++ b/cmd/rpc/internal/logic/po/market/market.go @@ -1 +1,95 @@ package market + +import ( + "encoding/json" + "fmt" + "time" + "trasfer_middleware/cmd/rpc/internal/logic/po/zltx/types" + "trasfer_middleware/cmd/rpc/internal/logic/vo" + "trasfer_middleware/cmd/rpc/pb/transfer" + "trasfer_middleware/pkg/common" + "trasfer_middleware/pkg/request" +) + +type Market struct { + Conf *types.MarketConf + RequestBody map[string]string +} + +type MarketRequest struct { + *Market + RequestBody map[string]string +} + +func NewMarket(conf types.MarketConf) *Market { + + return &Market{ + Conf: &conf, + } +} + +func (r *Market) SetData(data map[string]interface{}) *MarketRequest { + //商户ID:test001 + //AppId:test001 + //平台Id:test001 + data["timestamp"] = time.Now().Unix() + privatekey := "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEJHRzQjOTOtyR01BYq7ZsMlzBljTHqGl9FPsVfbn1kIeMQcbtbYsJhiIKS4exbxMXDRp211Mw89SXU4D/awpv0hPa+rMiwWxQEzLseI3EhTl4/vDBhg/EuViEaM60IuPQtW5cheFbABTw8T+HiysQTzUj11YcPUUMKVjDAHracnPuEwNxpZOLcuCK3Sltx/9GkQ2Lqk2J1UJ0kBg9dtPcY9WwoQXe+f1Ft/clmiFA5hXL4gulNiiCp2r3WetGCu18/Ql/jtp8d32PQF5xE+zTorboR9KGgoRwn7kw9Ylo0O2OACeAoX8Zc0eLqX+8oZGC66zw81TtloZGKSb8ThPNAgMBAAECggEACmQkBzcqpFIp/U/Eoe327CR+5YKfqTQy4n2KD8lpYKkXhUa20z1KcGa6xvDZb30C9eWr0T/3GFDSonG6E84H74ShqKg/dUfqBRP/TqfUWuTz9oULHDWOAE4RcnJbARAYIaZ7AkvVdIy8j0c4pmWpEmQf3JY76aMVVV+bZDlSSOBPnjLLodb1lgs+5YuQ5aZWtrWw3Bg5n8trpkuPjKxiYgKRmGoRVBAStrafkrOhS+xM/vP1yZLBpOa3Y99Vv5YCxE34caJc5hr6HU+YfpPfxaHZ9Z6Ct+uWuimZvPhSKSGIxVfryFKKlt0BP6PDM6f7fvPB20AM/SfDCn0m7Ye6AQKBgQDrjvQov08HLSrITKQ9I5CEODRUmkZWoGFmWBZjZ1Q7W/VZ6/Q8Wxlalwy7+7HrWMbRl0D4Vc+ghyur/bW+zSxLtFwQMc50LDd2lnz8Yvm4ZsE1dSkbOxmaWt18fBD69rKdY2GnZnb6X6oR60BqbLo7T7rvQ8U1sdAAoM6xCjFFKQKBgQDVKdrinOl3Wq5dydaH7HwsO3TwQh8ebmOt+btXB/u8AwQK4nzhP1mluJkSXZQnyHJegmujaxV7ntk3tLizCknQNknp/xfOrzocxn+18zyJ2B2zoIEysP2oxrFu80QtmfTh8fD/fpDwkR2NLG2XtuUKL7TPcg2pd5dRknarbOcqBQKBgQCgHyOfUzQgN7a+Q0LdgIBrMF16KQipOAodbMGDPqkGVKM6RedW48IfT1BLtHMj/MvhiwSSCprBj0DDgAn8MjHrICX4qDKjy67EANXjJlCD5e1uLj8MEKd9wkiOpzNPtUSDMhwek8tKtJ7B4X1/GnuZd8AlhpbWwhEXbDg0Ji6JyQKBgDNZ/e0Rt/yUz+SwNwpPoipVuHoYs751AXZr7wGsXqyQXWzx2vu4czRFIDsYaBSdaU/zQ1L+/RHm1pVg6A3ZsKaELZI9bdLQy8Ma3rFKg48BjUY0qGs50CHUm/IKkKYbrK6xxkkGiIwrqV7VESG3Yb3ueDRxWXE16jIwgn4Roi6xAoGAPJsEDVj0meHQZFrUjG36TLE7kT83LogwEvhTW9vcCoVkJuT5iT17D2DbgJCHe1Kpg874EbbCVNUTOuAxJanI1lVD+qEUUKAB9bTVTOHUtENjbiX7rrHAM8sf6v9Up4X0PwG+cYp/0LvNkre30DWlo52cBLC6iqJF9VR1+lK+Aiw=" + data["app_id"] = "test001" + data["mem_id"] = "test001" + data["pos_id"] = "test001" + + sign, err := common.MarketMakeRsaSign(privatekey, data) + if err != nil { + panic(err) + } + data["sign"] = sign + //data := common.MergeMaps(common.ToMap(p), common.ToMap(r), common.ToMap(e))*/ + requestBody := make(map[string]string, len(data)) + for key, value := range data { + requestBody[key] = fmt.Sprintf("%v", value) + } + return &MarketRequest{ + Market: r, + RequestBody: requestBody, + } +} + +func (r *MarketRequest) request(url string) (*request.Response, error) { + req := request.Request{ + Method: "POST", + Url: fmt.Sprintf("%s%s", r.Conf.Host, url), + Data: r.RequestBody, + } + resp, _ := req.Send() + return &resp, nil +} + +func (r *MarketRequest) KeySend() (*transfer.MarketKeySendRes, error) { + var res transfer.MarketKeySendRes + req, err := r.request(vo.MARKET_KEY_SEND) + if err != nil { + return nil, err + } + _ = json.Unmarshal([]byte(req.Text), &res) + return &res, nil +} + +func (r *MarketRequest) KeyDiscard() (*transfer.MarketKeyDiscardRes, error) { + var res transfer.MarketKeyDiscardRes + req, err := r.request(vo.MARKET_KEY_DISCARD) + if err != nil { + return nil, err + } + _ = json.Unmarshal([]byte(req.Text), &res) + return &res, nil +} + +func (r *MarketRequest) Query() (*transfer.MarketQueryRes, error) { + var res transfer.MarketQueryRes + req, err := r.request(vo.MARKET_KEY_QUERY) + if err != nil { + return nil, err + } + _ = json.Unmarshal([]byte(req.Text), &res) + return &res, nil +} diff --git a/cmd/rpc/internal/logic/po/zltx/types/base.go b/cmd/rpc/internal/logic/po/zltx/types/base.go index a3b5458..d743ff4 100644 --- a/cmd/rpc/internal/logic/po/zltx/types/base.go +++ b/cmd/rpc/internal/logic/po/zltx/types/base.go @@ -14,6 +14,10 @@ type ZLTXConf struct { Host string } +type MarketConf struct { + Host string +} + type BaseRes struct { Code string `json:"code"` Message string `json:"message"` diff --git a/cmd/rpc/internal/logic/vo/market.go b/cmd/rpc/internal/logic/vo/market.go index 4286699..488e368 100644 --- a/cmd/rpc/internal/logic/vo/market.go +++ b/cmd/rpc/internal/logic/vo/market.go @@ -2,11 +2,11 @@ package vo const ( //券码生成 - KEY_SEND = "openApi/v1/market/key/send" + MARKET_KEY_SEND = "openApi/v1/market/key/send" //券码作废 - KEY_DISCARD = "openApi/v1/market/key/discard" + MARKET_KEY_DISCARD = "openApi/v1/market/key/discard" //券码详情 - KEY_QUERY = "openApi/v1/market/key/query" + MARKET_KEY_QUERY = "openApi/v1/market/key/query" ) diff --git a/cmd/rpc/internal/svc/serviceContext.go b/cmd/rpc/internal/svc/serviceContext.go index 74b5f26..d8c27ac 100755 --- a/cmd/rpc/internal/svc/serviceContext.go +++ b/cmd/rpc/internal/svc/serviceContext.go @@ -4,6 +4,7 @@ import ( "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" "trasfer_middleware/cmd/rpc/internal/config" + "trasfer_middleware/cmd/rpc/internal/logic/po/market" "trasfer_middleware/cmd/rpc/internal/logic/po/zltx" "trasfer_middleware/genModel" "trasfer_middleware/genModel/marketReseller" @@ -17,6 +18,7 @@ type ServiceContext struct { DbReseller *MarkerReseller ZltxOrder *zltx.ZltxOrder + Market *market.Market } func NewServiceContext(c config.Config) *ServiceContext { @@ -31,6 +33,7 @@ func NewServiceContext(c config.Config) *ServiceContext { DbWrite: DbModel(c.DB.Slave.DataSource, c), DbReseller: ResellerModel(c.DB.MarketReseller.DataSource, c), ZltxOrder: zltx.NewZltxOrder(c.ZLTX), + Market: market.NewMarket(c.Market), } } diff --git a/cmd/rpc/pb/transfer.proto b/cmd/rpc/pb/transfer.proto index 6b39049..ec2a46d 100755 --- a/cmd/rpc/pb/transfer.proto +++ b/cmd/rpc/pb/transfer.proto @@ -93,6 +93,7 @@ message MarketKeySendRes { string codeType = 6; } } + message MarketKeySendReq { string appId = 1; uint64 sign = 2; diff --git a/pkg/common/market.go b/pkg/common/market.go index 436d3f9..55e8cce 100644 --- a/pkg/common/market.go +++ b/pkg/common/market.go @@ -61,7 +61,7 @@ func VerifyRsaSign(publicKey string, data map[string]interface{}) (map[string]in } // MakeRsaSign 生成签名 -func MakeRsaSign(privateKey string, data map[string]interface{}) (string, error) { +func MarketMakeRsaSign(privateKey string, data map[string]interface{}) (string, error) { // 对 sign nonce timestamp appId 升序排序 // 使用 xx=aa&yy=bb 的字符串拼接 // 营销系统生成的私钥生成签名 RSA2加签