notice
This commit is contained in:
parent
107ed2cae0
commit
bd377b5b81
|
|
@ -0,0 +1,30 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
package api.err;
|
||||||
|
|
||||||
|
import "errors/errors.proto";
|
||||||
|
option go_package = "voucher/api/err";
|
||||||
|
|
||||||
|
enum CmbErr{
|
||||||
|
option (errors.default_code) = 499;
|
||||||
|
// 未知错误,请联系平台处理
|
||||||
|
CMB_UNKNOWN = 0;
|
||||||
|
// 参数错误, 请检查公共请求参数是否正确
|
||||||
|
CMB_PARAM_FAIL = 1 [(errors.code) = 400];
|
||||||
|
// 验签失败,请检查加签密钥是否正确
|
||||||
|
CMB_VERIFY_FAIL = 2 [(errors.code) = 401];
|
||||||
|
// 业务数据解密失败 请检查加密密钥是否正确
|
||||||
|
CMB_BIZ_CONTENT_DECRYPT_FAIL = 3 [(errors.code) = 401];
|
||||||
|
// 业务数据转换失败, 请检查业务数据格式,字段类型不一致等
|
||||||
|
CMB_BIZ_CONTENT_CONVERT_FAIL = 4 [(errors.code) = 401];
|
||||||
|
// 业务参数传递有误,请检查业务参数是否正确传递
|
||||||
|
CMB_BIZ_CONTENT_FAIL = 5 [(errors.code) = 401];
|
||||||
|
|
||||||
|
// 订单不存在
|
||||||
|
CMB_ORDER_NOT_EXIST = 6 [(errors.code) = 404];
|
||||||
|
// 券商品不存在
|
||||||
|
CMB_PRODUCT_NOT_EXIST = 7 [(errors.code) = 404];
|
||||||
|
// 券商品没有去权限
|
||||||
|
CMB_PRODUCT_NOT_AUTH = 8 [(errors.code) = 401];
|
||||||
|
// 券商品不支持
|
||||||
|
CMB_PRODUCT_NOT_SUPPORTED = 9 [(errors.code) = 401];
|
||||||
|
}
|
||||||
|
|
@ -10,18 +10,6 @@ enum Err {
|
||||||
|
|
||||||
// 系统panic错误
|
// 系统panic错误
|
||||||
SYSTEM_PANIC = 0 [(errors.code) = 599];
|
SYSTEM_PANIC = 0 [(errors.code) = 599];
|
||||||
|
|
||||||
// 没权限
|
|
||||||
NOT_LOGIN = 1 [(errors.code) = 401];
|
|
||||||
|
|
||||||
// DB数据未找到
|
|
||||||
DB_NOT_FOUND = 2 [(errors.code) = 404];
|
|
||||||
|
|
||||||
// 参数错误
|
|
||||||
PARAM = 3 [(errors.code) = 400];
|
|
||||||
|
|
||||||
// 通用错误
|
|
||||||
COMMON = 4 [(errors.code) = 555];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum NotifyConsumeErr{
|
enum NotifyConsumeErr{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
package api.err;
|
||||||
|
|
||||||
|
import "errors/errors.proto";
|
||||||
|
option go_package = "voucher/api/err";
|
||||||
|
|
||||||
|
enum WechatErr{
|
||||||
|
option (errors.default_code) = 1;
|
||||||
|
// 微信失败
|
||||||
|
WECHAT_FAIL = 0 [(errors.code) = 500];
|
||||||
|
}
|
||||||
|
|
@ -68,6 +68,8 @@ message CmbOrderReply {
|
||||||
// 业务参数
|
// 业务参数
|
||||||
// 权益标识,优惠券券码,最大长度为50位
|
// 权益标识,优惠券券码,最大长度为50位
|
||||||
string codeNo = 9 [json_name = "codeNo"];
|
string codeNo = 9 [json_name = "codeNo"];
|
||||||
|
// 错误码
|
||||||
|
string thirdErrCode = 3 [json_name = "thirdErrCode"];
|
||||||
}
|
}
|
||||||
|
|
||||||
message CmbQueryRequest {
|
message CmbQueryRequest {
|
||||||
|
|
@ -86,6 +88,8 @@ message CmbQueryReply {
|
||||||
string orgNo = 12 [json_name = "orgNo"];
|
string orgNo = 12 [json_name = "orgNo"];
|
||||||
// 扩展字段
|
// 扩展字段
|
||||||
string ext = 13 [json_name = "ext"];
|
string ext = 13 [json_name = "ext"];
|
||||||
|
// 错误码
|
||||||
|
string thirdErrCode = 3 [json_name = "thirdErrCode"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -125,6 +129,9 @@ message CmbQueryProductReply {
|
||||||
string saleStartTime = 19 [json_name = "saleStartTime"];
|
string saleStartTime = 19 [json_name = "saleStartTime"];
|
||||||
// 批次结束时间,格式yyyy-mm-dd hh:mm:ss.sss
|
// 批次结束时间,格式yyyy-mm-dd hh:mm:ss.sss
|
||||||
string saleEndTime = 20 [json_name = "saleEndTime"];
|
string saleEndTime = 20 [json_name = "saleEndTime"];
|
||||||
|
|
||||||
|
// 错误码
|
||||||
|
string thirdErrCode = 21 [json_name = "thirdErrCode"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
err2 "voucher/api/err"
|
||||||
v1 "voucher/api/v1"
|
v1 "voucher/api/v1"
|
||||||
"voucher/internal/biz/bo"
|
"voucher/internal/biz/bo"
|
||||||
"voucher/internal/biz/mixrepos"
|
"voucher/internal/biz/mixrepos"
|
||||||
|
|
@ -31,38 +32,46 @@ func (s *CmbMixRepoImpl) OrderVerify(ctx context.Context, req *v1.CmbRequest) (*
|
||||||
|
|
||||||
bizStr, err := s.Verify(ctx, req)
|
bizStr, err := s.Verify(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err2.ErrorCmbVerifyFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(bizStr) == 0 {
|
if len(bizStr) == 0 {
|
||||||
return nil, errors.New("业务参数获取异常,请检查参数是否正确传递")
|
return nil, err2.ErrorCmbBizContentFail("业务参数获取异常,请检查参数是否正确传递")
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *v1.CmbOrderRequest
|
var bizContent *v1.CmbOrderRequest
|
||||||
if err = json.Unmarshal([]byte(bizStr), &resp); err != nil {
|
if err = json.Unmarshal([]byte(bizStr), &bizContent); err != nil {
|
||||||
return nil, err
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
if err = bizContent.Validate(); err != nil {
|
||||||
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return bizContent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *CmbMixRepoImpl) QueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryRequest, error) {
|
func (s *CmbMixRepoImpl) QueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryRequest, error) {
|
||||||
|
|
||||||
bizStr, err := s.Verify(ctx, req)
|
bizStr, err := s.Verify(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err2.ErrorCmbVerifyFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(bizStr) == 0 {
|
if len(bizStr) == 0 {
|
||||||
return nil, errors.New("业务参数获取异常,请检查参数是否正确传递")
|
return nil, err2.ErrorCmbBizContentFail("业务参数获取异常,请检查参数是否正确传递")
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *v1.CmbQueryRequest
|
var bizContent *v1.CmbQueryRequest
|
||||||
if err = json.Unmarshal([]byte(bizStr), &resp); err != nil {
|
if err = json.Unmarshal([]byte(bizStr), &bizContent); err != nil {
|
||||||
return nil, err
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
if err = bizContent.Validate(); err != nil {
|
||||||
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return bizContent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *CmbMixRepoImpl) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryProductRequest, error) {
|
func (s *CmbMixRepoImpl) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryProductRequest, error) {
|
||||||
|
|
@ -72,12 +81,20 @@ func (s *CmbMixRepoImpl) ProductQueryVerify(ctx context.Context, req *v1.CmbRequ
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *v1.CmbQueryProductRequest
|
if len(bizStr) == 0 {
|
||||||
if err = json.Unmarshal([]byte(bizStr), &resp); err != nil {
|
return nil, err2.ErrorCmbBizContentFail("业务参数获取异常,请检查参数是否正确传递")
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
var bizContent *v1.CmbQueryProductRequest
|
||||||
|
if err = json.Unmarshal([]byte(bizStr), &bizContent); err != nil {
|
||||||
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = bizContent.Validate(); err != nil {
|
||||||
|
return nil, err2.ErrorCmbBizContentFail(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return bizContent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *CmbMixRepoImpl) Verify(_ context.Context, req *v1.CmbRequest) (string, error) {
|
func (s *CmbMixRepoImpl) Verify(_ context.Context, req *v1.CmbRequest) (string, error) {
|
||||||
|
|
@ -86,16 +103,16 @@ func (s *CmbMixRepoImpl) Verify(_ context.Context, req *v1.CmbRequest) (string,
|
||||||
|
|
||||||
b, err := cmb.Verify(s.bc.Cmb.CmbSm2Puk, str, req.Sign)
|
b, err := cmb.Verify(s.bc.Cmb.CmbSm2Puk, str, req.Sign)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err2.ErrorCmbVerifyFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if !b {
|
if !b {
|
||||||
return "", errors.New("签名验证失败")
|
return "", err2.ErrorCmbVerifyFail("签名验证失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
bizStr, err := cmb.Decrypt(s.bc.Cmb.Sm2Prk, req.EncryptBody)
|
bizStr, err := cmb.Decrypt(s.bc.Cmb.Sm2Prk, req.EncryptBody)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err2.ErrorCmbBizContentDecryptFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return bizStr, nil
|
return bizStr, nil
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,17 @@ type Server struct {
|
||||||
func (c *Server) Validate() error {
|
func (c *Server) Validate() error {
|
||||||
|
|
||||||
if err := validator.New().Struct(c); err != nil {
|
if err := validator.New().Struct(c); err != nil {
|
||||||
|
|
||||||
for _, err = range err.(validator.ValidationErrors) {
|
for _, err = range err.(validator.ValidationErrors) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newClient(ctx context.Context, c *Server) (*core.Client, error) {
|
func newClient(ctx context.Context, c Server) (*core.Client, error) {
|
||||||
|
|
||||||
dir, err := os.Getwd()
|
dir, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -86,7 +88,7 @@ func init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetClient(ctx context.Context, c *Server) (*core.Client, error) {
|
func GetClient(ctx context.Context, c Server) (*core.Client, error) {
|
||||||
|
|
||||||
instance.mutex.Lock()
|
instance.mutex.Lock()
|
||||||
defer instance.mutex.Unlock()
|
defer instance.mutex.Unlock()
|
||||||
|
|
@ -115,7 +117,7 @@ func GetClient(ctx context.Context, c *Server) (*core.Client, error) {
|
||||||
return instance.clients[c.MchID], nil
|
return instance.clients[c.MchID], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Verify(ctx context.Context, message, signature string) error {
|
func (s Server) Verify(ctx context.Context, message, signature string) error {
|
||||||
|
|
||||||
verifier := verifiers.NewSHA256WithRSAVerifier(nil)
|
verifier := verifiers.NewSHA256WithRSAVerifier(nil)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@ import (
|
||||||
|
|
||||||
type CpnRepoImpl struct {
|
type CpnRepoImpl struct {
|
||||||
bc *conf.Bootstrap
|
bc *conf.Bootstrap
|
||||||
Server *data.Server
|
Server data.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCpnRepoImpl(bc *conf.Bootstrap) (wechatrepo.WechatCpnRepo, error) {
|
func NewCpnRepoImpl(bc *conf.Bootstrap) (wechatrepo.WechatCpnRepo, error) {
|
||||||
server := &data.Server{
|
server := data.Server{
|
||||||
MchID: bc.Wechat.MchID,
|
MchID: bc.Wechat.MchID,
|
||||||
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
|
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
|
||||||
}
|
}
|
||||||
|
|
@ -154,7 +154,7 @@ func (c *CpnRepoImpl) QueryProduct(ctx context.Context, stockCreatorMchId, stock
|
||||||
|
|
||||||
func (c *CpnRepoImpl) QueryCallback(ctx context.Context, mchId, mchCertNo string) (*cashcoupons.Callback, error) {
|
func (c *CpnRepoImpl) QueryCallback(ctx context.Context, mchId, mchCertNo string) (*cashcoupons.Callback, error) {
|
||||||
|
|
||||||
server := &data.Server{
|
server := data.Server{
|
||||||
MchID: mchId,
|
MchID: mchId,
|
||||||
MchCertificateSerialNumber: mchCertNo,
|
MchCertificateSerialNumber: mchCertNo,
|
||||||
}
|
}
|
||||||
|
|
@ -199,7 +199,7 @@ func (c *CpnRepoImpl) QueryCallback(ctx context.Context, mchId, mchCertNo string
|
||||||
|
|
||||||
func (c *CpnRepoImpl) SetCallback(ctx context.Context, mchId, mchCertNo, url string) (*cashcoupons.SetCallbackResponse, error) {
|
func (c *CpnRepoImpl) SetCallback(ctx context.Context, mchId, mchCertNo, url string) (*cashcoupons.SetCallbackResponse, error) {
|
||||||
|
|
||||||
server := &data.Server{
|
server := data.Server{
|
||||||
MchID: mchId,
|
MchID: mchId,
|
||||||
MchCertificateSerialNumber: mchCertNo,
|
MchCertificateSerialNumber: mchCertNo,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,55 @@
|
||||||
package helper
|
package helper
|
||||||
|
|
||||||
import "os"
|
import (
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
func FileExists(filePath string) bool {
|
func FileExists(filePath string) bool {
|
||||||
_, err := os.Stat(filePath)
|
_, err := os.Stat(filePath)
|
||||||
return err == nil || os.IsExist(err)
|
return err == nil || os.IsExist(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopy 深拷贝函数
|
||||||
|
func DeepCopy(src interface{}) interface{} {
|
||||||
|
if src == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
t := reflect.TypeOf(src)
|
||||||
|
v := reflect.ValueOf(src)
|
||||||
|
// 创建新的对象
|
||||||
|
dst := reflect.New(t.Elem()).Elem()
|
||||||
|
// 遍历结构体的所有字段
|
||||||
|
for i := 0; i < t.Elem().NumField(); i++ {
|
||||||
|
field := t.Elem().Field(i)
|
||||||
|
srcField := v.Elem().Field(i)
|
||||||
|
dstField := dst.Field(i)
|
||||||
|
// 处理不同类型的字段
|
||||||
|
switch field.Type.Kind() {
|
||||||
|
case reflect.Map:
|
||||||
|
// 处理映射类型
|
||||||
|
newMap := reflect.MakeMap(field.Type)
|
||||||
|
for _, key := range srcField.MapKeys() {
|
||||||
|
value := srcField.MapIndex(key)
|
||||||
|
newMap.SetMapIndex(key, value)
|
||||||
|
}
|
||||||
|
dstField.Set(newMap)
|
||||||
|
case reflect.Slice:
|
||||||
|
// 处理切片类型
|
||||||
|
newSlice := reflect.MakeSlice(field.Type, srcField.Len(), srcField.Cap())
|
||||||
|
reflect.Copy(newSlice, srcField)
|
||||||
|
dstField.Set(newSlice)
|
||||||
|
case reflect.Ptr:
|
||||||
|
// 处理指针类型
|
||||||
|
if !srcField.IsNil() {
|
||||||
|
newPtr := reflect.New(field.Type.Elem())
|
||||||
|
newPtr.Elem().Set(DeepCopy(srcField.Elem()).(reflect.Value))
|
||||||
|
dstField.Set(newPtr)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// 处理其他类型
|
||||||
|
dstField.Set(srcField)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dst.Interface()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,11 @@ package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"github.com/go-kratos/kratos/v2/errors"
|
||||||
"github.com/go-kratos/kratos/v2/log"
|
"github.com/go-kratos/kratos/v2/log"
|
||||||
"github.com/go-kratos/kratos/v2/transport/http"
|
"github.com/go-kratos/kratos/v2/transport/http"
|
||||||
"io"
|
"io"
|
||||||
|
err2 "voucher/api/err"
|
||||||
v1 "voucher/api/v1"
|
v1 "voucher/api/v1"
|
||||||
"voucher/internal/biz/bo"
|
"voucher/internal/biz/bo"
|
||||||
"voucher/internal/biz/vo"
|
"voucher/internal/biz/vo"
|
||||||
|
|
@ -21,12 +23,16 @@ func (s *VoucherService) CmbOrder(ctx http.Context) error {
|
||||||
voucherNo, err := s.cmbOrder(ctx)
|
voucherNo, err := s.cmbOrder(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("cmbOrder error: %v", err)
|
se := errors.FromError(err)
|
||||||
|
|
||||||
bizReply = &v1.CmbOrderReply{
|
bizReply = &v1.CmbOrderReply{
|
||||||
RespCode: vo.CmbResponseStatusFail.GetValue(),
|
RespCode: vo.CmbResponseStatusFail.GetValue(),
|
||||||
RespMsg: err.Error(),
|
RespMsg: err.Error(),
|
||||||
CodeNo: "",
|
CodeNo: "",
|
||||||
|
ThirdErrCode: se.Reason,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Errorf("cmbOrder error: %v", err)
|
||||||
} else {
|
} else {
|
||||||
bizReply = &v1.CmbOrderReply{
|
bizReply = &v1.CmbOrderReply{
|
||||||
RespCode: vo.CmbResponseStatusSuccess.GetValue(),
|
RespCode: vo.CmbResponseStatusSuccess.GetValue(),
|
||||||
|
|
@ -58,18 +64,18 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
|
||||||
|
|
||||||
bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err2.ErrorCmbParamFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Warnf("cmbOrder req: %v", string(bodyBytes))
|
log.Warnf("cmbOrder req: %v", string(bodyBytes))
|
||||||
|
|
||||||
var req *v1.CmbRequest
|
var req *v1.CmbRequest
|
||||||
if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
||||||
return "", err
|
return "", err2.ErrorCmbParamFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = req.Validate(); err != nil {
|
if err = req.Validate(); err != nil {
|
||||||
return "", err
|
return "", err2.ErrorCmbParamFail(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
bizContent, err := s.CmbMixRepo.OrderVerify(ctx, req)
|
bizContent, err := s.CmbMixRepo.OrderVerify(ctx, req)
|
||||||
|
|
@ -77,10 +83,6 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = bizContent.Validate(); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
boReq := &bo.OrderCreateReqBo{
|
boReq := &bo.OrderCreateReqBo{
|
||||||
OutBizNo: bizContent.TransactionId,
|
OutBizNo: bizContent.TransactionId,
|
||||||
ProductNo: bizContent.ActivityId,
|
ProductNo: bizContent.ActivityId,
|
||||||
|
|
@ -109,7 +111,13 @@ func (s *VoucherService) CmbQuery(ctx http.Context) error {
|
||||||
|
|
||||||
bizReply, err := s.cmbQuery(ctx)
|
bizReply, err := s.cmbQuery(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bizReply = &v1.CmbQueryReply{}
|
se := errors.FromError(err)
|
||||||
|
|
||||||
|
bizReply = &v1.CmbQueryReply{
|
||||||
|
ThirdErrCode: se.Reason,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Errorf("CmbQuery error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
replyBizContent, _ := json.Marshal(bizReply)
|
replyBizContent, _ := json.Marshal(bizReply)
|
||||||
|
|
@ -127,6 +135,7 @@ func (s *VoucherService) CmbQuery(ctx http.Context) error {
|
||||||
|
|
||||||
replyBytes, _ := json.Marshal(reply)
|
replyBytes, _ := json.Marshal(reply)
|
||||||
log.Warnf("cmbQuery reply: %v", string(replyBytes))
|
log.Warnf("cmbQuery reply: %v", string(replyBytes))
|
||||||
|
|
||||||
return ctx.JSON(200, reply)
|
return ctx.JSON(200, reply)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -153,10 +162,6 @@ func (s *VoucherService) cmbQuery(ctx http.Context) (*v1.CmbQueryReply, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = bizContent.Validate(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return s.VoucherBiz.CmbQuery(ctx, bizContent.CodeNo)
|
return s.VoucherBiz.CmbQuery(ctx, bizContent.CodeNo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,11 +175,15 @@ func (s *VoucherService) CmbProductQuery(ctx http.Context) error {
|
||||||
|
|
||||||
bizReply, err := s.cmbProductQuery(ctx)
|
bizReply, err := s.cmbProductQuery(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("cmbProductQuery error: %v", err)
|
se := errors.FromError(err)
|
||||||
|
|
||||||
bizReply = &v1.CmbQueryProductReply{
|
bizReply = &v1.CmbQueryProductReply{
|
||||||
RespCode: vo.CmbResponseStatusFail.GetValue(),
|
RespCode: vo.CmbResponseStatusFail.GetValue(),
|
||||||
RespMsg: err.Error(),
|
RespMsg: err.Error(),
|
||||||
|
ThirdErrCode: se.Reason,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Errorf("cmbProductQuery error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
replyBizContent, _ := json.Marshal(bizReply)
|
replyBizContent, _ := json.Marshal(bizReply)
|
||||||
|
|
@ -214,9 +223,5 @@ func (s *VoucherService) cmbProductQuery(ctx http.Context) (*v1.CmbQueryProductR
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = bizContent.Validate(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return s.VoucherBiz.CmbProductQuery(ctx, bizContent.ActivityId)
|
return s.VoucherBiz.CmbProductQuery(ctx, bizContent.ActivityId)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,45 +107,47 @@ func (s *VoucherService) DecryptBody(ctx http.Context) error {
|
||||||
|
|
||||||
func (s *VoucherService) QueryWechatVoucherNotifyUrl(ctx http.Context) error {
|
func (s *VoucherService) QueryWechatVoucherNotifyUrl(ctx http.Context) error {
|
||||||
|
|
||||||
bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
//bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
var req *v1.QueryWechatVoucherNotifyUrlRequest
|
//var req *v1.QueryWechatVoucherNotifyUrlRequest
|
||||||
if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
//if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
rep, err := s.VoucherBiz.WechatCpnRepo.QueryCallback(ctx, req.MchId, req.MchCertNo)
|
//rep, err := s.VoucherBiz.WechatCpnRepo.QueryCallback(ctx, req.MchId, req.MchCertNo)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
return ctx.JSON(200, &v1.QueryWechatVoucherNotifyUrlReply{
|
//return ctx.JSON(200, &v1.QueryWechatVoucherNotifyUrlReply{
|
||||||
Url: *rep.NotifyUrl,
|
// Url: *rep.NotifyUrl,
|
||||||
})
|
//})
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *VoucherService) SetWechatVoucherNotifyUrl(ctx http.Context) error {
|
func (s *VoucherService) SetWechatVoucherNotifyUrl(ctx http.Context) error {
|
||||||
|
|
||||||
bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
//bodyBytes, err := io.ReadAll(ctx.Request().Body)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
var req *v1.SetWechatVoucherNotifyUrlRequest
|
//var req *v1.SetWechatVoucherNotifyUrlRequest
|
||||||
if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
//if err = json.Unmarshal(bodyBytes, &req); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
rep, err := s.VoucherBiz.WechatCpnRepo.SetCallback(ctx, req.MchId, req.MchCertNo, req.Url)
|
//rep, err := s.VoucherBiz.WechatCpnRepo.SetCallback(ctx, req.MchId, req.MchCertNo, req.Url)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
return ctx.JSON(200, &v1.SetWechatVoucherNotifyUrlReply{
|
//return ctx.JSON(200, &v1.SetWechatVoucherNotifyUrlReply{
|
||||||
MchId: req.MchId,
|
// MchId: req.MchId,
|
||||||
Url: *rep.NotifyUrl,
|
// Url: *rep.NotifyUrl,
|
||||||
})
|
//})
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue