fix version 1

This commit is contained in:
2026-09-22 21:15:34 +08:00
parent 9f86366638
commit d63d7e8b3a
277 changed files with 9959 additions and 1514 deletions

View File

@@ -3,11 +3,19 @@ package wechat
import (
"context"
"bsm/full/module/finance/wallet/internal/excode"
pb "bsm/full/module/finance/wallet/pb"
"git.apinb.com/bsm-sdk/core/printer"
"git.apinb.com/bsm-sdk/core/service"
)
// 微信JSAPI下单
func JsapiPreOrder(ctx context.Context, in *pb.WxpayJSAPIPreOrderRequest) (reply *pb.WxpayJSAPIPreOrderReply, err error) {
// 下单前必须先通过身份认证
if _, ok := service.ParseMetaCtx(ctx, nil); ok != nil {
return nil, ok
}
if err := CheckParam(in.Amount, in.AuthCode, in.UserIdentification, in.OrderNo); err != nil {
return nil, err
}
@@ -19,10 +27,15 @@ func JsapiPreOrder(ctx context.Context, in *pb.WxpayJSAPIPreOrderRequest) (reply
openid = in.UserIdentification // 用户微信唯一标识
amount = in.Amount // 订单金额
)
wx, _ := NewWechat()
wx, err := NewWechat()
if err != nil {
printer.Error(err.Error())
return nil, excode.ErrWechatInit
}
res, err := wx.GetResponse(attach, orderNo, desc, openid, amount)
if err != nil {
return nil, err
printer.Error(err.Error())
return nil, excode.ErrWechatGetResp
}
return &pb.WxpayJSAPIPreOrderReply{PrepayId: res.PrepayId}, nil
}

View File

@@ -180,7 +180,7 @@ func struct2map(in any) (map[string]string, error) {
}
func CheckParam(amount int64, auth_code string, identity string, order_no string) (err error) {
if amount == 0 {
if amount <= 0 {
return excode.ErrAmount
}
if auth_code == "" {

View File

@@ -5,6 +5,7 @@ import (
"encoding/json"
"bsm/full/module/finance/wallet/internal/config"
"bsm/full/module/finance/wallet/internal/models"
pb "bsm/full/module/finance/wallet/pb"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/printer"
@@ -12,6 +13,8 @@ import (
)
// 微信支付回调
// 完成验签与解密后,按商户订单号反查本地支付单、核对金额,
// 条件更新为支付成功并在同一事务内入账写流水。
func WxCallback(ctx context.Context, in *pb.WxCallBackRequest) (reply *pb.CallBackReply, err error) {
var notifyReq = &wechat.V3NotifyReq{}
data, err := json.Marshal(in)
@@ -23,7 +26,11 @@ func WxCallback(ctx context.Context, in *pb.WxCallBackRequest) (reply *pb.CallBa
return nil, errcode.ErrJsonUnmarshal
}
wx, _ := NewWechat()
wx, err := NewWechat()
if err != nil {
printer.Error(err.Error())
return &pb.CallBackReply{Code: "FAIL", Message: "支付客户端初始化失败"}, nil
}
pubKey := wx.Client.WxPublicKeyMap()
err = notifyReq.VerifySignByPKMap(pubKey)
if err != nil {
@@ -33,9 +40,22 @@ func WxCallback(ctx context.Context, in *pb.WxCallBackRequest) (reply *pb.CallBa
res, err := notifyReq.DecryptPayCipherText(config.Spec.WeChat.APIV3Key)
if err != nil {
printer.Error(err.Error())
return &pb.CallBackReply{Code: "FAIL", Message: "验签失败"}, err
return &pb.CallBackReply{Code: "FAIL", Message: "解密失败"}, err
}
// Todo: 业务逻辑
payResult, _ := json.Marshal(res)
return &pb.CallBackReply{Code: "SUCCESS", Message: string(payResult)}, nil
// 仅处理支付成功通知,其余状态直接应答,避免渠道重复推送
if res.TradeState != "SUCCESS" {
return &pb.CallBackReply{Code: "SUCCESS", Message: res.TradeState}, nil
}
if res.Amount == nil {
return &pb.CallBackReply{Code: "FAIL", Message: "金额缺失"}, nil
}
// 结算:金额核对 + 条件更新为成功 + 事务内入账写流水(幂等)
if err := models.SettlePaymentSuccess(res.OutTradeNo, res.TransactionId, int64(res.Amount.Total)); err != nil {
printer.Error(err.Error())
return &pb.CallBackReply{Code: "FAIL", Message: "结算失败"}, nil
}
return &pb.CallBackReply{Code: "SUCCESS", Message: "SUCCESS"}, nil
}