fix: 排队激活未评估停复机、孤儿套餐重复激活与微信查单订单不存在反复重查
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m26s

- 排队激活与首次实名激活任务的处理器注入停复机服务:原来传 nil,激活后不重新评估停复机,付款或实名后要等下一轮轮询才复机(生产同样存在)
- 孤儿套餐扫描跳过载体未实名的"实名即生效"套餐:激活服务会直接跳过,原来每 10 秒重复提交一次激活任务
- 微信 v2 查单返回 ORDERNOTEXIST 时按"渠道无此订单"处理:代理充值支付单过期后关闭,不再当作结果未知每几分钟重查

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
邹进
2026-10-27 11:07:17 +09:00
parent c9e5d65590
commit d2b0d2f534
6 changed files with 47 additions and 1 deletions

View File

@@ -309,7 +309,8 @@ func (h *Handler) registerPackageActivationHandlers() {
h.redis,
h.asynqClient,
h.workerResult.Services.ActivationService,
nil,
// 激活成功后须重新评估停复机(客户付款或实名后及时复机);与轮询调度中的激活处理器注入同一服务。
h.workerResult.Services.StopResumeService,
h.logger,
)

View File

@@ -6,6 +6,7 @@ import (
"crypto/md5"
"crypto/subtle"
"encoding/xml"
stderrors "errors"
"fmt"
"io"
"net"
@@ -41,6 +42,10 @@ type PaymentV2Service struct {
}
// NewPaymentV2Service 创建微信支付 v2 服务
// ErrOrderNotExist 表示微信明确返回订单不存在(v2 err_code=ORDERNOTEXIST)。
var ErrOrderNotExist = stderrors.New("微信订单不存在")
func NewPaymentV2Service(appID, mchID, apiKey, notifyURL string, logger *zap.Logger) *PaymentV2Service {
return &PaymentV2Service{
appID: appID,
@@ -297,6 +302,11 @@ func (s *PaymentV2Service) QueryOrder(ctx context.Context, orderNo string) (*Ord
s.logger.Error("解析微信 v2 查单响应失败", zap.String("order_no", orderNo), zap.Error(err))
return nil, errors.New(errors.CodeWechatPayFailed, "查询微信支付订单失败")
}
if resp.ReturnCode == "SUCCESS" && resp.ResultCode != "SUCCESS" && resp.ErrCode == "ORDERNOTEXIST" {
// 微信明确表示没有这笔订单:返回专门的错误,由调用方按"渠道无此订单"处理,不当作结果未知反复重查。
s.logger.Warn("微信 v2 查单:订单不存在", zap.String("order_no", orderNo))
return nil, ErrOrderNotExist
}
if resp.ReturnCode != "SUCCESS" || resp.ResultCode != "SUCCESS" {
s.logger.Error("微信 v2 查单失败", zap.String("order_no", orderNo), zap.String("return_code", resp.ReturnCode),
zap.String("return_msg", resp.ReturnMsg), zap.String("result_code", resp.ResultCode), zap.String("err_code", resp.ErrCode), zap.String("err_code_des", resp.ErrCodeDes))