From 4ef94185af0c3f00ae1dc933bb099bde26894df8 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 16 九月 2026 00:51:43 +0800
Subject: [PATCH] feat(merchant): 未完成微信实名与授权前不允许收款

---
 talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessServiceTests.java |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessServiceTests.java b/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessServiceTests.java
index 5bccb04..03dca15 100644
--- a/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessServiceTests.java
+++ b/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessServiceTests.java
@@ -71,6 +71,39 @@
                 """, merchantId, storeId, "hash-readiness-" + suffix, "readiness-card-" + suffix, shortReference("T", suffix));
         bankCardId = jdbc.queryForObject("select max(id) from merchant_bank_card", Long.class);
         jdbc.update("update merchant_onboarding_application set initial_bank_card_id=? where id=?", bankCardId, applicationId);
+        confirmWechatCapabilities();
+    }
+
+    /** 微信支付业务开通与实名/授权都有通道证据——收款能力的前置。 */
+    private void confirmWechatCapabilities() {
+        jdbc.update("insert into merchant_onboarding_progress(application_id, stages_json) values (?, '{\"wechat\":\"confirmed\",\"realname\":\"confirmed\"}')", applicationId);
+    }
+
+    /**
+     * 微信实名未完成时不允许收款:只开通微信业务、不做实名,微信侧并没有把收款权限给到商户。
+     * 缺哪一项要说清楚,不能只回一句「暂时无法收款」。
+     */
+    @Test
+    void rejectsANewPaidOrderWhenWechatRealnameIsNotConfirmed() {
+        confirmSnapshot("NORMAL", "0", "1");
+        jdbc.update("update merchant_onboarding_progress set stages_json='{\"wechat\":\"confirmed\",\"realname\":\"missing\"}' where application_id=?", applicationId);
+
+        assertThatThrownBy(() -> readinessService.requireCollectingMerchant(merchantId, storeId))
+                .isInstanceOf(BusinessException.class)
+                .hasMessageContaining("微信实名与授权")
+                .hasMessageContaining("微信收款能力未就绪");
+    }
+
+    /** 没有进度记录时两项都算缺——查不到通道证据就不能认为能收款。 */
+    @Test
+    void rejectsANewPaidOrderWhenThereIsNoCapabilityEvidenceAtAll() {
+        confirmSnapshot("NORMAL", "0", "1");
+        jdbc.update("delete from merchant_onboarding_progress where application_id=?", applicationId);
+
+        assertThatThrownBy(() -> readinessService.requireCollectingMerchant(merchantId, storeId))
+                .isInstanceOf(BusinessException.class)
+                .hasMessageContaining("微信支付业务开通")
+                .hasMessageContaining("微信实名与授权");
     }
 
     @Test

--
Gitblit v1.7.1