This commit is contained in:
@@ -285,6 +285,27 @@ func (h *ClientWalletHandler) CreateRecharge(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
rechargeNo := generateClientRechargeNo()
|
||||
|
||||
// 先初始化微信支付实例并创建预支付订单,确认支付通道可用
|
||||
// 避免先写入充值记录后支付初始化失败,导致产生孤儿记录
|
||||
cache := wechat.NewRedisCache(h.redis)
|
||||
paymentApp, err := wechat.NewPaymentAppFromConfig(config, appID, cache, h.logger)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.CodeWechatPayFailed, err, "初始化微信支付实例失败")
|
||||
}
|
||||
paymentService := wechat.NewPaymentService(paymentApp, h.logger)
|
||||
payResult, err := paymentService.CreateJSAPIOrder(
|
||||
resolved.SkipPermissionCtx,
|
||||
rechargeNo,
|
||||
"资产钱包充值",
|
||||
openID,
|
||||
int(req.Amount),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 支付通道确认可用后,再创建充值记录
|
||||
recharge := &model.AssetRechargeRecord{
|
||||
UserID: resolved.CustomerID,
|
||||
AssetWalletID: wallet.ID,
|
||||
@@ -304,23 +325,6 @@ func (h *ClientWalletHandler) CreateRecharge(c *fiber.Ctx) error {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "创建充值记录失败")
|
||||
}
|
||||
|
||||
cache := wechat.NewRedisCache(h.redis)
|
||||
paymentApp, err := wechat.NewPaymentAppFromConfig(config, appID, cache, h.logger)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.CodeWechatPayFailed, err, "初始化微信支付实例失败")
|
||||
}
|
||||
paymentService := wechat.NewPaymentService(paymentApp, h.logger)
|
||||
payResult, err := paymentService.CreateJSAPIOrder(
|
||||
resolved.SkipPermissionCtx,
|
||||
recharge.RechargeNo,
|
||||
"资产钱包充值",
|
||||
openID,
|
||||
int(req.Amount),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
payConfig := buildClientRechargePayConfig(appID, payResult)
|
||||
resp := &dto.ClientRechargeResponse{
|
||||
Recharge: dto.ClientRechargeResult{
|
||||
|
||||
Reference in New Issue
Block a user