This commit is contained in:
李子铭 2025-03-08 13:39:00 +08:00
parent 549f24da52
commit d382acfd2d
11 changed files with 96 additions and 31 deletions

View File

@ -7,21 +7,21 @@ import "validate/validate.proto";
message CmbRequest {
//
// ID32
string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}];
string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 100}];
// ID32
string aid = 2 [json_name = "aid", (validate.rules).string = {min_len: 1,max_len: 32}];
string aid = 2 [json_name = "aid", (validate.rules).string = {min_len: 1,max_len: 100}];
// 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 random = 4 [json_name = "random", (validate.rules).string = {min_len: 1,max_len: 50}];
//
string keyAlias = 5 [json_name = "keyAlias", (validate.rules).string = {min_len: 2}];
string keyAlias = 5 [json_name = "keyAlias", (validate.rules).string = {min_len: 2,max_len: 50}];
//
string cmbKeyAlias = 6 [json_name = "cmbKeyAlias", (validate.rules).string = {min_len: 2}];
string cmbKeyAlias = 6 [json_name = "cmbKeyAlias", (validate.rules).string = {min_len: 2,max_len: 50}];
// API的说明文档
string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10}];
string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10,max_len: 20000}];
//
string sign = 8 [json_name = "sign", (validate.rules).string = {min_len: 10}];
string sign = 8 [json_name = "sign", (validate.rules).string = {min_len: 10,max_len: 5000}];
}
message CmbReply {
@ -50,13 +50,13 @@ message CmbOrderRequest {
//
string activityId = 10 [json_name = "activityId", (validate.rules).string = {min_len: 1,max_len: 32}];
// openId
string cmbUid = 11 [json_name = "cmbUid", (validate.rules).string = {min_len: 1,max_len: 100}];
string cmbUid = 11 [json_name = "cmbUid", (validate.rules).string = {min_len: 1,max_len: 50}];
// id
string appId = 14 [json_name = "appId", (validate.rules).string = {min_len: 1,max_len: 50}];
string appId = 14 [json_name = "appId", (validate.rules).string = {min_len: 1,max_len: 20}];
// 0-1-openId
string cmbUidType = 12 [json_name = "cmbUidType", (validate.rules).string = {min_len: 1,max_len: 10}];
// 13
string timestamp = 13 [json_name = "timestamp", (validate.rules).string = {min_len: 1,max_len: 20}];
string timestamp = 13 [json_name = "timestamp", (validate.rules).string = {min_len: 1,max_len: 14}];
}
message CmbOrderReply {
// 1000 1001
@ -130,3 +130,11 @@ message CmbNotifyReply {
//
string respMsg = 2 [json_name = "respMsg"];
}
message EncryptBody {
string encryptBody = 1 [json_name = "encryptBody"];
}
message DecryptBody {
string decryptBody = 1 [json_name = "decryptBody"];
}

View File

@ -8,7 +8,7 @@ server:
data:
db:
driver: mysql
source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/merketing?parseTime=True&loc=Local
source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local
maxIdle: 5 #最大的空闲连接数
maxOpen: 100 #最大连接数0表示不受限制
maxLifetime: 5s #连接复用的最大生命周期

View File

@ -15,4 +15,5 @@ type CmbMixRepo interface {
GetRequest(_ context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error)
GetResponse(ctx context.Context, reqBo *bo.CmbResponseBo) (*v1.CmbReply, error)
Request(ctx context.Context, req *v1.CmbRequest, uri string) (*v1.CmbReply, error)
Decrypt(_ context.Context, encryptBody string) (string, error)
}

View File

@ -221,3 +221,13 @@ func (s *CmbMixRepoImpl) Request(ctx context.Context, req *v1.CmbRequest, uri st
return response, nil
}
func (s *CmbMixRepoImpl) Decrypt(_ context.Context, encryptBody string) (string, error) {
encryptBody, err := cmb.Decrypt(s.bc.Cmb.Sm2Prk, encryptBody)
if err != nil {
return "", err
}
return encryptBody, nil
}

View File

@ -18,8 +18,8 @@ type OrderRepoImpl struct {
}
// NewOrderRepoImpl .
func NewOrderRepoImpl() repo.OrderRepo {
return &OrderRepoImpl{}
func NewOrderRepoImpl(db *data.Db) repo.OrderRepo {
return &OrderRepoImpl{db: db}
}
func (p *OrderRepoImpl) DB(ctx context.Context) *gorm.DB {

View File

@ -19,8 +19,8 @@ type OrderNotifyRepoImpl struct {
}
// NewOrderNotifyRepoImpl .
func NewOrderNotifyRepoImpl() repo.OrderNotifyRepo {
return &OrderNotifyRepoImpl{}
func NewOrderNotifyRepoImpl(db *data.Db) repo.OrderNotifyRepo {
return &OrderNotifyRepoImpl{db: db}
}
func (p *OrderNotifyRepoImpl) DB(ctx context.Context) *gorm.DB {

View File

@ -19,8 +19,8 @@ type OrderWechatRepoImpl struct {
}
// NewOrderWechatRepoImpl .
func NewOrderWechatRepoImpl() repo.OrderWechatRepo {
return &OrderWechatRepoImpl{}
func NewOrderWechatRepoImpl(db *data.Db) repo.OrderWechatRepo {
return &OrderWechatRepoImpl{db: db}
}
func (p *OrderWechatRepoImpl) DB(ctx context.Context) *gorm.DB {

View File

@ -16,8 +16,8 @@ type ProductRepoImpl struct {
}
// NewProductRepoImpl .
func NewProductRepoImpl() repo.ProductRepo {
return &ProductRepoImpl{}
func NewProductRepoImpl(db *data.Db) repo.ProductRepo {
return &ProductRepoImpl{db: db}
}
func (p *ProductRepoImpl) DB(ctx context.Context) *gorm.DB {

View File

@ -19,8 +19,8 @@ type WechatNotifyRegisterTagRepoImpl struct {
}
// NewWechatNotifyRegisterTagRepoImpl .
func NewWechatNotifyRegisterTagRepoImpl() repo.WechatNotifyRegisterTagRepo {
return &WechatNotifyRegisterTagRepoImpl{}
func NewWechatNotifyRegisterTagRepoImpl(db *data.Db) repo.WechatNotifyRegisterTagRepo {
return &WechatNotifyRegisterTagRepoImpl{db: db}
}
func (p *WechatNotifyRegisterTagRepoImpl) DB(ctx context.Context) *gorm.DB {

View File

@ -45,6 +45,8 @@ func NewHTTPServer(
cmb.POST("/v1/product/QueryMock", voucherService.CmbProductQueryMock)
cmb.POST("/v1/product/query", voucherService.CmbProductQuery)
cmb.POST("/v1/decryptBody", voucherService.DecryptBody)
return srv
}

View File

@ -4,6 +4,7 @@ import (
"encoding/json"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/transport/http"
"io"
v1 "voucher/api/v1"
"voucher/internal/biz/bo"
"voucher/internal/biz/vo"
@ -20,10 +21,11 @@ func (s *VoucherService) CmbOrder(ctx http.Context) error {
orderNo, err := s.cmbOrder(ctx)
if err != nil {
log.Errorf("cmbOrder error: %v", err)
bizReply = &v1.CmbOrderReply{
RespCode: vo.CmbResponseStatusFail.GetValue(),
RespMsg: err.Error(),
CodeNo: orderNo,
CodeNo: "",
}
} else {
bizReply = &v1.CmbOrderReply{
@ -36,13 +38,14 @@ func (s *VoucherService) CmbOrder(ctx http.Context) error {
replyBizContent, _ := json.Marshal(bizReply)
xx := &bo.CmbResponseBo{
RespCode: vo.CmbResponseStatusSuccess.GetValue(),
RespMsg: err.Error(),
RespMsg: "成功",
BizContent: string(replyBizContent),
}
reply, err = s.CmbMixRepo.GetResponse(ctx, xx)
if err != nil {
log.Errorf("cmbOrder CmbMixRepo GetResponse error: %v", err)
return ctx.JSON(400, err)
}
return ctx.JSON(200, reply)
@ -51,11 +54,17 @@ func (s *VoucherService) CmbOrder(ctx http.Context) error {
func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
var req *v1.CmbRequest
if err := ctx.BindForm(&req); err != nil {
bodyBytes, err := io.ReadAll(ctx.Request().Body)
if err != nil {
return "", err
}
if err := req.Validate(); err != nil {
if err = json.Unmarshal(bodyBytes, &req); err != nil {
return "", err
}
if err = req.Validate(); err != nil {
return "", err
}
@ -103,6 +112,7 @@ func (s *VoucherService) CmbQuery(ctx http.Context) error {
reply, err = s.CmbMixRepo.GetResponse(ctx, xx)
if err != nil {
log.Errorf("cmbProductQuery CmbMixRepo GetResponse error: %v", err)
return ctx.JSON(400, err)
}
return ctx.JSON(200, reply)
@ -110,12 +120,17 @@ func (s *VoucherService) CmbQuery(ctx http.Context) error {
func (s *VoucherService) cmbQuery(ctx http.Context) (*v1.CmbQueryReply, error) {
var req *v1.CmbRequest
if err := ctx.BindForm(&req); err != nil {
bodyBytes, err := io.ReadAll(ctx.Request().Body)
if err != nil {
return nil, err
}
if err := req.Validate(); err != nil {
var req *v1.CmbRequest
if err = json.Unmarshal(bodyBytes, &req); err != nil {
return nil, err
}
if err = req.Validate(); err != nil {
return nil, err
}
@ -137,6 +152,7 @@ func (s *VoucherService) CmbProductQuery(ctx http.Context) error {
bizReply, err := s.cmbProductQuery(ctx)
if err != nil {
log.Errorf("cmbProductQuery error: %v", err)
bizReply = &v1.CmbQueryProductReply{
RespCode: vo.CmbResponseStatusFail.GetValue(),
RespMsg: err.Error(),
@ -153,6 +169,7 @@ func (s *VoucherService) CmbProductQuery(ctx http.Context) error {
reply, err = s.CmbMixRepo.GetResponse(ctx, xx)
if err != nil {
log.Errorf("cmbProductQuery CmbMixRepo GetResponse error: %v", err)
return ctx.JSON(400, err)
}
return ctx.JSON(200, reply)
@ -160,12 +177,17 @@ func (s *VoucherService) CmbProductQuery(ctx http.Context) error {
func (s *VoucherService) cmbProductQuery(ctx http.Context) (*v1.CmbQueryProductReply, error) {
var req *v1.CmbRequest
if err := ctx.BindForm(&req); err != nil {
bodyBytes, err := io.ReadAll(ctx.Request().Body)
if err != nil {
return nil, err
}
if err := req.Validate(); err != nil {
var req *v1.CmbRequest
if err = json.Unmarshal(bodyBytes, &req); err != nil {
return nil, err
}
if err = req.Validate(); err != nil {
return nil, err
}
@ -176,3 +198,25 @@ func (s *VoucherService) cmbProductQuery(ctx http.Context) (*v1.CmbQueryProductR
return s.VoucherBiz.CmbProductQuery(ctx, bizContent.ActivityId)
}
func (s *VoucherService) DecryptBody(ctx http.Context) error {
bodyBytes, err := io.ReadAll(ctx.Request().Body)
if err != nil {
return err
}
var req *v1.EncryptBody
if err = json.Unmarshal(bodyBytes, &req); err != nil {
return err
}
decryptBody, err := s.CmbMixRepo.Decrypt(ctx, req.EncryptBody)
if err != nil {
return err
}
return ctx.JSON(200, &v1.DecryptBody{
DecryptBody: decryptBody,
})
}