This commit is contained in:
李子铭 2025-03-05 15:09:23 +08:00
parent 6ac3b3a4cd
commit f7def09458
4 changed files with 84 additions and 121 deletions

View File

@ -2,12 +2,10 @@ syntax = "proto3";
package api.v1; package api.v1;
option go_package = "voucher/api/v1;v1"; option go_package = "voucher/api/v1;v1";
import "validate/validate.proto"; import "validate/validate.proto";
message CmbRequest {
message CmbOrderRequest { //
//
// ID32 // 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: 32}];
// ID32 // ID32
@ -24,7 +22,28 @@ message CmbOrderRequest {
string encryptBody = 7 [json_name = "encryptBody", (validate.rules).string = {min_len: 10}]; 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 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 // 14
string transactionId = 9 [json_name = "transactionId", (validate.rules).string = {min_len: 1,max_len: 50}]; 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}]; string timestamp = 13 [json_name = "timestamp", (validate.rules).string = {min_len: 1,max_len: 20}];
} }
message CmbOrderReply { 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 // 50
string codeNo = 9 [json_name = "codeNo"]; string codeNo = 9 [json_name = "codeNo"];
@ -61,45 +64,11 @@ message CmbOrderReply {
message CmbQueryProductRequest { message CmbQueryProductRequest {
//
// ID32
string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}];
// ID32
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}]; string activityId = 9 [json_name = "activityId", (validate.rules).string = {min_len: 1,max_len: 32}];
} }
message CmbQueryProductReply { 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"]; string activityName = 9 [json_name = "activityName"];
@ -123,25 +92,8 @@ message CmbQueryProductReply {
string detail = 18 [json_name = "detail"]; string detail = 18 [json_name = "detail"];
} }
message CmbNotifyRequest {
//
// ID32
string mid = 1 [json_name = "mid", (validate.rules).string = {min_len: 1,max_len: 32}];
// ID32
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 // codeNo
string ticket = 9 [json_name = "ticket"]; string ticket = 9 [json_name = "ticket"];
// 0使1使 // 0使1使

View File

@ -36,8 +36,11 @@ func NewHTTPServer(
r.POST("/v1/wechat/notify", voucherService.WechatNotify) r.POST("/v1/wechat/notify", voucherService.WechatNotify)
cmb := r.Group("/cmb") cmb := r.Group("/cmb")
cmb.POST("/v1/orderMock", voucherService.CmbOrderMock)
cmb.POST("/v1/order", voucherService.CmbOrder) 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) cmb.POST("/v1/product_query", voucherService.CmbProductQuery)
return srv return srv

View File

@ -9,36 +9,27 @@ import (
func (s *VoucherService) CmbOrder(ctx http.Context) error { func (s *VoucherService) CmbOrder(ctx http.Context) error {
reply := &v1.CmbOrderReply{ var req v1.CmbOrderReply
RespCode: "", if err := ctx.BindForm(&req); err != nil {
RespMsg: "", return err
Date: "",
KeyAlias: "",
CmbKeyAlias: "",
EncryptBody: "",
Sign: "",
CodeNo: "",
} }
orderNo, err := s.cmbOrder(ctx) reply := &v1.CmbReply{
if err != nil { //RespCode: "1000",
reply.RespCode = "1001" //RespMsg: "成功",
reply.RespMsg = err.Error() //Date: "",
} else { //KeyAlias: "",
reply.RespCode = "1000" //CmbKeyAlias: "",
reply.RespMsg = "成功" //EncryptBody: "",
reply.CodeNo = orderNo //Sign: "",
} }
// todo 签名
reply.Sign = ""
return ctx.JSON(200, reply) return ctx.JSON(200, reply)
} }
func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
var req v1.CmbOrderRequest var req v1.CmbRequest
if err := ctx.BindForm(&req); err != nil { if err := ctx.BindForm(&req); err != nil {
return "", err return "", err
} }
@ -50,9 +41,9 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
// todo 签名验证 // todo 签名验证
boReq := &bo.OrderCreateReqBo{ boReq := &bo.OrderCreateReqBo{
OutBizNo: req.TransactionId, //OutBizNo: req.TransactionId,
ProductNo: req.ActivityId, //ProductNo: req.ActivityId,
Account: req.CmbUid, //Account: req.CmbUid,
AccountType: vo.OrderAccountTypeOpenId, AccountType: vo.OrderAccountTypeOpenId,
} }
@ -64,25 +55,8 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
return orderNo, nil return orderNo, nil
} }
func (s *VoucherService) CmbQuery(ctx http.Context) error {
return ctx.JSON(200, nil)
}
func (s *VoucherService) CmbProductQuery(ctx http.Context) error { 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 var req v1.CmbQueryProductRequest
if err := ctx.BindForm(&req); err != nil { if err := ctx.BindForm(&req); err != nil {
return err return err
@ -99,13 +73,13 @@ func (s *VoucherService) cmbProductQuery(ctx http.Context) error {
// 数据构造 加签 返回 // 数据构造 加签 返回
rep := &v1.CmbQueryProductReply{ rep := &v1.CmbQueryProductReply{
RespCode: "", //RespCode: "",
RespMsg: "", //RespMsg: "",
Date: "", //Date: "",
KeyAlias: "", //KeyAlias: "",
CmbKeyAlias: "", //CmbKeyAlias: "",
EncryptBody: "", //EncryptBody: "",
Sign: "", //Sign: "",
ActivityName: "", ActivityName: "",
ActivityId: *q.StockId, ActivityId: *q.StockId,
Amount: "", Amount: "",

View File

@ -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)
}