package payment import ( "context" "time" "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/service" "git.apinb.com/bsm-sdk/core/vars" ) // 回调更新支付的结果和状态 // 注意:支付成功只能由渠道回调(如 Wechat.WxCallback 验签解密后)写入。 // 本接口仅允许调用方把自己名下的待支付单标记为取消/失败, // 不再接受调用方传入的成功状态,避免客户端自证支付成功。 func Callback(ctx context.Context, in *pb.CallbackRequest) (reply *pb.StatusReply, err error) { auth, ok := service.ParseMetaCtx(ctx, nil) if ok != nil { return nil, ok } if in.Identity == "" { return nil, errcode.ErrInvalidArgument } // 拒绝由调用方直接把支付单置为支付成功 if in.CallbackStatus { return nil, errcode.ErrPermissionDenied } // 仅允许「创建(0)/支付中(1)」流转到「失败(-1)」,重复调用保持幂等 err = models.MarkPaymentFailed(auth.Identity, in.Identity, in.CallbackMsg) if err != nil { return nil, err } return &pb.StatusReply{ Message: vars.OK, Timeseq: time.Now().UnixMilli(), }, nil }