ソースを参照

fix(contract): 入口校验统一社会信用代码并友好提示证件格式异常

- BundleCreateRequest 增加 ord_id 18位 USCC 格式校验并归一化为大写,非法证件号在入口被拦截
- e签宝 1435320(证件格式异常) 返回清晰错误信息,便于定位

Co-authored-by: Cursor <cursoragent@cursor.com>
天空之城 4 時間 前
コミット
9ede106510

+ 2 - 0
alien_contract/infrastructure/esign/contract_builder.py

@@ -86,6 +86,8 @@ def build_contract_items(
             resp_msg = sign_json.get("message") if isinstance(sign_json, dict) else None
             if resp_code == 1437328:
                 message = f"{contract_name}发起签署失败:手机号与真实姓名不匹配,请确认联系人实名信息"
+            elif resp_code == 1435320:
+                message = f"{contract_name}发起签署失败:企业证件格式异常,请检查统一社会信用代码是否为有效的18位({resp_msg})"
             elif resp_code == 1435002:
                 message = f"{contract_name}发起签署失败:签署参数不合法({resp_msg})"
             elif resp_code == 1437306:

+ 9 - 0
alien_contract/schemas/request/contract.py

@@ -19,3 +19,12 @@ class BundleCreateRequest(BaseModel):
         if not re.fullmatch(r"^1\d{10}$", value):
             raise ValueError("contact_phone 格式错误,应为11位手机号")
         return value
+
+    @field_validator("ord_id")
+    @classmethod
+    def validate_ord_id(cls, value: str) -> str:
+        # 统一社会信用代码:18位,由数字与大写字母组成(不含 I/O/S/V/Z),e签宝按此核验企业主体
+        normalized = (value or "").strip().upper()
+        if not re.fullmatch(r"[0-9A-HJ-NP-RT-UW-Y]{18}", normalized):
+            raise ValueError("ord_id 格式错误,应为18位统一社会信用代码")
+        return normalized