mengqiankang il y a 2 mois
Parent
commit
af2143f8de
2 fichiers modifiés avec 36 ajouts et 46 suppressions
  1. 23 33
      alien_store/api/router.py
  2. 13 13
      test.py

+ 23 - 33
alien_store/api/router.py

@@ -5,14 +5,13 @@ import os
 import logging
 from pydantic import ValidationError
 from alien_store.api.deps import get_contract_service
-from alien_store.schemas.request.contract_store import TemplatesCreate, SignUrl
+from alien_store.schemas.request.contract_store import TemplatesCreate
 from alien_store.schemas.response.contract_store import (
     ModuleStatusResponse,
     TemplatesCreateResponse,
     ErrorResponse,
     ContractStoreResponse,
     PaginatedResponse,
-    SignUrlResponse,
     SuccessResponse
 )
 from alien_store.services.contract_server import ContractServer
@@ -257,10 +256,31 @@ async def get_contract_detail(
                     break
             await templates_server.update_contract_items(row["id"], items)
 
+        # 融合原 /esign/signurl 逻辑:调用 e签宝 获取签署链接并落库
+        contact_phone = item.get("contact_phone") or (row.get("contact_phone") if isinstance(row, dict) else None)
+        if not contact_phone:
+            return ErrorResponse(success=False, message="缺少 contact_phone,无法获取签署链接")
+        try:
+            sign_resp = sign_url(sign_flow_id, contact_phone)
+            sign_json = json.loads(sign_resp)
+        except json.JSONDecodeError:
+            logger.error(f"sign_url non-json resp: {sign_resp}")
+            return ErrorResponse(success=False, message="e签宝返回非JSON", raw=sign_resp)
+        except Exception as e:
+            logger.error(f"sign_url failed sign_flow_id={sign_flow_id}, contact_phone={contact_phone}: {e}")
+            return ErrorResponse(success=False, message="获取签署链接失败", raw=str(e))
+
+        sign_data = sign_json.get("data") if isinstance(sign_json, dict) else None
+        result_sign_url = sign_data.get("url") if isinstance(sign_data, dict) else None
+        if not result_sign_url:
+            logger.error(f"sign_url missing url: {sign_json}")
+            return ErrorResponse(success=False, message="e签宝返回缺少签署链接", raw=sign_json)
+        await templates_server.update_sign_url(contact_phone, sign_flow_id, result_sign_url)
+
         return {
             "status": 0,
             "contract_url": contract_url,
-            "sign_url": item.get("sign_url", ""),
+            "sign_url": result_sign_url,
             "sign_flow_id": sign_flow_id
         }
 
@@ -325,36 +345,6 @@ async def get_all_templates(
         total_pages=total_pages
     )
 
-@router.post("/esign/signurl", response_model=Union[SignUrlResponse, ErrorResponse])
-async def get_esign_sign_url(
-    body: SignUrl, 
-    templates_server: ContractServer = Depends(get_contract_service)
-) -> Union[SignUrlResponse, ErrorResponse]:
-    """
-        当商家点击签署按钮时
-        携带合同相关的签署id和联系方式向e签宝发起请求
-        获取到签署的页面链接
-        并将签署url存入该合同对应的sign_url中
-    """
-
-    sing_flow_id = body.sign_flow_id
-    contact_phone = body.contact_phone
-    logger.info(f"esign/signurl request contact_phone={contact_phone}, sign_flow_id={sing_flow_id}")
-    result = sign_url(sing_flow_id, contact_phone)
-    try:
-        result_json = json.loads(result)
-    except json.JSONDecodeError:
-        logger.error(f"sign_url non-json resp: {result}")
-        return ErrorResponse(success=False, message="e签宝返回非JSON", raw=result)
-    data = result_json.get("data") if isinstance(result_json, dict) else None
-    if not data or not data.get("url"):
-        logger.error(f"sign_url missing url: {result_json}")
-        return ErrorResponse(success=False, message="e签宝返回缺少签署链接", raw=result_json)
-    result_sign_url = data.get("url")
-    await templates_server.update_sign_url(contact_phone, sing_flow_id, result_sign_url)
-    logger.info(f"sign_url success contact_phone={contact_phone}, sign_flow_id={sing_flow_id}")
-    return SignUrlResponse(success=True, data={"url": result_sign_url})
-
 @router.post("/esign/callback", response_model=Union[SuccessResponse, ErrorResponse])
 async def esign_callback(
     payload: dict, 

+ 13 - 13
test.py

@@ -7,7 +7,7 @@ import requests
 # 商家入驻AI审核通过后, AI携带真实有效的信息调用此接口,数据库 store_contract 生成对应的数据
 # """
 # body = {
-#     "store_id": 999,
+#     "store_id": 666,
 #     "store_name": "爱丽恩严(大连)商务科技有限公司深圳分公司",
 #     "business_segment": "生活服务",
 #     "merchant_name": "彭少荣",
@@ -18,8 +18,8 @@ import requests
 # print(res.text)
 
 # ----------------------------------------------------------------------------------------------------------------------
-# url = "http://127.0.0.1:8001/api/store/contracts/400"
-# url = "http://120.26.186.130:33333/api/store/contracts/420?status=0"
+# url = "http://127.0.0.1:8001/api/store/contracts/381"
+# url = "http://120.26.186.130:33333/api/store/contracts/381?status=0"
 # """
 # 商家点击合同管理模块时,可以条件筛选查询 未签署合同和已签署合同
 # status:签署状态 0 未签署 1 已签署
@@ -30,21 +30,21 @@ import requests
 # print(resp.text)
 
 # ----------------------------------------------------------------------------------------------------------------------
-# url = "http://127.0.0.1:8001/api/store/contracts/detail/c658fe83ce404934971d6912aaa315e0"
-# url = "http://120.26.186.130:33333/api/store/contracts/detail/030e3e0a1d094399adc0c5e98c7ad2fd"
-# """
-# 商家点击到某个具体的合同 向这个接口发送请求
-# 由于e签宝提供的合同模板URL会过期,所以会再次携带flow_id 向e签宝发起请求刷新新的URL
-# 下载URL同理
-# """
-# resp = requests.get(url)
-# print(resp.text)
+url = "http://127.0.0.1:8001/api/store/contracts/detail/d43a18e1e9164a7d8dab4ca5c49d9960"
+# url = "http://120.26.186.130:33333/api/store/contracts/detail/aea4124ac4614936b8625fedb64bac47"
+"""
+商家点击到某个具体的合同 向这个接口发送请求
+由于e签宝提供的合同模板URL会过期,所以会再次携带flow_id 向e签宝发起请求刷新新的URL
+下载URL同理
+"""
+resp = requests.get(url)
+print(resp.text)
 
 # ----------------------------------------------------------------------------------------------------------------------
 # url = "http://127.0.0.1:8001/api/store/esign/signurl"
 # url = "http://120.26.186.130:33333/api/store/esign/signurl"
 # body = {
-#     "sign_flow_id": "c658fe83ce404934971d6912aaa315e0",
+#     "sign_flow_id": "8980608cb10c448cbdf96aa7df51179b",
 #     "contact_phone": "13923864580"
 # }
 # """