From f7def09458730ac5ca9390ae885ad6c3de988ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AD=90=E9=93=AD?= Date: Wed, 5 Mar 2025 15:09:23 +0800 Subject: [PATCH] cmb --- api/v1/cmb_cpn.proto | 96 +++++++++--------------------------- internal/server/http.go | 5 +- internal/service/cmb.go | 70 +++++++++----------------- internal/service/cmb_mock.go | 34 +++++++++++++ 4 files changed, 84 insertions(+), 121 deletions(-) create mode 100644 internal/service/cmb_mock.go diff --git a/api/v1/cmb_cpn.proto b/api/v1/cmb_cpn.proto index 10b67e7..8f4a8bf 100644 --- a/api/v1/cmb_cpn.proto +++ b/api/v1/cmb_cpn.proto @@ -2,12 +2,10 @@ syntax = "proto3"; package api.v1; option go_package = "voucher/api/v1;v1"; - import "validate/validate.proto"; - -message CmbOrderRequest { - // 公共参数 +message CmbRequest { + // 请求公共参数 // 合作方唯一ID,32位定长 string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}]; // 应用唯一ID,32位定长 @@ -24,7 +22,28 @@ message CmbOrderRequest { string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10}]; // 签名,具体详见签名规范 string sign = 8 [json_name = "sign", (validate.rules).string = {min_len: 10}]; +} +message CmbReply { + // 响应公共参数 + // 接口调用返回码,1000 成功,1001 失败 + string respCode = 1 [json_name = "respCode"]; + // 返回话术,失败信息落此字段 + string respMsg = 2 [json_name = "respMsg"]; + // 时间戳 yyyyMMddHHmmss + string date = 3 [json_name = "date"]; + // 合作方密钥对别名 + string keyAlias = 5 [json_name = "keyAlias"]; + // 掌上生活密钥对别名 + string cmbKeyAlias = 6 [json_name = "cmbKeyAlias"]; + // 加密报文,是否需要加密,请查看各API的说明文档 + string encryptBody = 7 [json_name = "encryptBody"]; + // 签名,具体详见签名规范 + string sign = 8 [json_name = "sign"]; +} + + +message CmbOrderRequest { // 业务参数 // 唯一流水号,需支持14天内幂等 string transactionId = 9 [json_name = "transactionId", (validate.rules).string = {min_len: 1,max_len: 50}]; @@ -38,22 +57,6 @@ message CmbOrderRequest { string timestamp = 13 [json_name = "timestamp", (validate.rules).string = {min_len: 1,max_len: 20}]; } message CmbOrderReply { - // 公共参数 - // 接口调用返回码,1000 成功,1001 失败 - string respCode = 1 [json_name = "respCode"]; - // 返回话术,失败信息落此字段 - string respMsg = 2 [json_name = "respMsg"]; - // 时间戳 yyyyMMddHHmmss - string date = 3 [json_name = "date"]; - // 合作方密钥对别名 - string keyAlias = 5 [json_name = "keyAlias"]; - // 掌上生活密钥对别名 - string cmbKeyAlias = 6 [json_name = "cmbKeyAlias"]; - // 加密报文,是否需要加密,请查看各API的说明文档 - string encryptBody = 7 [json_name = "encryptBody"]; - // 签名,具体详见签名规范 - string sign = 8 [json_name = "sign"]; - // 业务参数 // 权益标识,优惠券券码,最大长度为50位 string codeNo = 9 [json_name = "codeNo"]; @@ -61,45 +64,11 @@ message CmbOrderReply { message CmbQueryProductRequest { - // 公共参数 - // 合作方唯一ID,32位定长 - string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 应用唯一ID,32位定长 - string aid = 2 [json_name = "aid", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 时间戳 yyyyMMddHHmmss - string date = 3 [json_name = "date", (validate.rules).string = {min_len: 14}]; - // 随机字符串,保证签名不可预测,不长于32位 - string random = 4 [json_name = "random", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 合作方密钥对别名 - string keyAlias = 5 [json_name = "keyAlias", (validate.rules).string = {min_len: 2}]; - // 掌上生活密钥对别名 - string cmbKeyAlias = 6 [json_name = "cmbKeyAlias", (validate.rules).string = {min_len: 2}]; - // 加密报文,是否需要加密,请查看各API的说明文档 - string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10}]; - // 签名,具体详见签名规范 - string sign = 8 [json_name = "sign", (validate.rules).string = {min_len: 10}]; - // 业务参数 // 外部合作方权益批次号 string activityId = 9 [json_name = "activityId", (validate.rules).string = {min_len: 1,max_len: 32}]; } message CmbQueryProductReply { - // 公共参数 - // 接口调用返回码,1000 成功,1001 失败 - string respCode = 1 [json_name = "respCode"]; - // 返回话术,失败信息落此字段 - string respMsg = 2 [json_name = "respMsg"]; - // 时间戳 yyyyMMddHHmmss - string date = 3 [json_name = "date"]; - // 合作方密钥对别名 - string keyAlias = 5 [json_name = "keyAlias"]; - // 掌上生活密钥对别名 - string cmbKeyAlias = 6 [json_name = "cmbKeyAlias"]; - // 加密报文,是否需要加密,请查看各API的说明文档 - string encryptBody = 7 [json_name = "encryptBody"]; - // 签名,具体详见签名规范 - string sign = 8 [json_name = "sign"]; - // 业务参数 // 批次名称 string activityName = 9 [json_name = "activityName"]; @@ -123,25 +92,8 @@ message CmbQueryProductReply { string detail = 18 [json_name = "detail"]; } -message CmbNotifyRequest { - // 公共参数 - // 合作方唯一ID,32位定长 - string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 应用唯一ID,32位定长 - string aid = 2 [json_name = "aid", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 时间戳 yyyyMMddHHmmss - string date = 3 [json_name = "date", (validate.rules).string = {min_len: 14}]; - // 随机字符串,保证签名不可预测,不长于32位 - string random = 4 [json_name = "random", (validate.rules).string = {min_len: 1,max_len: 32}]; - // 合作方密钥对别名 - string keyAlias = 5 [json_name = "keyAlias", (validate.rules).string = {min_len: 2}]; - // 掌上生活密钥对别名 - string cmbKeyAlias = 6 [json_name = "cmbKeyAlias", (validate.rules).string = {min_len: 2}]; - // 加密报文,是否需要加密,请查看各API的说明文档 - string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10}]; - // 签名,具体详见签名规范 - string sign = 8 [json_name = "sign", (validate.rules).string = {min_len: 10}]; +message CmbNotifyRequest { // 优惠券券码,codeNo string ticket = 9 [json_name = "ticket"]; // 更新后串码状态,0:可使用,1:已使用 diff --git a/internal/server/http.go b/internal/server/http.go index 85869ec..4940964 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -36,8 +36,11 @@ func NewHTTPServer( r.POST("/v1/wechat/notify", voucherService.WechatNotify) cmb := r.Group("/cmb") + + cmb.POST("/v1/orderMock", voucherService.CmbOrderMock) cmb.POST("/v1/order", voucherService.CmbOrder) - cmb.POST("/v1/query", voucherService.CmbQuery) + + cmb.POST("/v1/product_query_mock", voucherService.CmbProductQueryMock) cmb.POST("/v1/product_query", voucherService.CmbProductQuery) return srv diff --git a/internal/service/cmb.go b/internal/service/cmb.go index 0594634..04612f0 100644 --- a/internal/service/cmb.go +++ b/internal/service/cmb.go @@ -9,36 +9,27 @@ import ( func (s *VoucherService) CmbOrder(ctx http.Context) error { - reply := &v1.CmbOrderReply{ - RespCode: "", - RespMsg: "", - Date: "", - KeyAlias: "", - CmbKeyAlias: "", - EncryptBody: "", - Sign: "", - CodeNo: "", + var req v1.CmbOrderReply + if err := ctx.BindForm(&req); err != nil { + return err } - orderNo, err := s.cmbOrder(ctx) - if err != nil { - reply.RespCode = "1001" - reply.RespMsg = err.Error() - } else { - reply.RespCode = "1000" - reply.RespMsg = "成功" - reply.CodeNo = orderNo + reply := &v1.CmbReply{ + //RespCode: "1000", + //RespMsg: "成功", + //Date: "", + //KeyAlias: "", + //CmbKeyAlias: "", + //EncryptBody: "", + //Sign: "", } - // todo 签名 - reply.Sign = "" - return ctx.JSON(200, reply) } func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { - var req v1.CmbOrderRequest + var req v1.CmbRequest if err := ctx.BindForm(&req); err != nil { return "", err } @@ -50,9 +41,9 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { // todo 签名验证 boReq := &bo.OrderCreateReqBo{ - OutBizNo: req.TransactionId, - ProductNo: req.ActivityId, - Account: req.CmbUid, + //OutBizNo: req.TransactionId, + //ProductNo: req.ActivityId, + //Account: req.CmbUid, AccountType: vo.OrderAccountTypeOpenId, } @@ -64,25 +55,8 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { return orderNo, nil } -func (s *VoucherService) CmbQuery(ctx http.Context) error { - return ctx.JSON(200, nil) -} - func (s *VoucherService) CmbProductQuery(ctx http.Context) error { - err := s.cmbProductQuery(ctx) - if err != nil { - return ctx.JSON(200, &v1.CmbOrderReply{ - RespCode: "1001", - RespMsg: err.Error(), - }) - } - - return ctx.JSON(200, nil) -} - -func (s *VoucherService) cmbProductQuery(ctx http.Context) error { - var req v1.CmbQueryProductRequest if err := ctx.BindForm(&req); err != nil { return err @@ -99,13 +73,13 @@ func (s *VoucherService) cmbProductQuery(ctx http.Context) error { // 数据构造 加签 返回 rep := &v1.CmbQueryProductReply{ - RespCode: "", - RespMsg: "", - Date: "", - KeyAlias: "", - CmbKeyAlias: "", - EncryptBody: "", - Sign: "", + //RespCode: "", + //RespMsg: "", + //Date: "", + //KeyAlias: "", + //CmbKeyAlias: "", + //EncryptBody: "", + //Sign: "", ActivityName: "", ActivityId: *q.StockId, Amount: "", diff --git a/internal/service/cmb_mock.go b/internal/service/cmb_mock.go new file mode 100644 index 0000000..c5ce010 --- /dev/null +++ b/internal/service/cmb_mock.go @@ -0,0 +1,34 @@ +package service + +import ( + "github.com/go-kratos/kratos/v2/transport/http" + v1 "voucher/api/v1" +) + +func (s *VoucherService) CmbOrderMock(ctx http.Context) error { + + var req v1.CmbOrderReply + if err := ctx.BindForm(&req); err != nil { + return err + } + + reply := &v1.CmbRequest{} + + return ctx.JSON(200, reply) +} + +func (s *VoucherService) CmbProductQueryMock(ctx http.Context) error { + + var req v1.CmbQueryProductRequest + if err := ctx.BindForm(&req); err != nil { + return err + } + + if err := req.Validate(); err != nil { + return err + } + + reply := &v1.CmbRequest{} + + return ctx.JSON(200, reply) +}