import os from pathlib import Path APP_ENV = os.getenv("APP_ENV", "dev") ROOT_DIR = Path(__file__).resolve().parents[3] ENV_FILE = ROOT_DIR / f".env.{APP_ENV}" def _load_env_file(path: Path) -> None: if not path.exists(): return for raw_line in path.read_text(encoding="utf-8").splitlines(): line = raw_line.strip() if not line or line.startswith("#") or "=" not in line: continue key, value = line.split("=", 1) key = key.strip() if not key or key in os.environ: continue os.environ[key] = value.strip().strip("\"'") _load_env_file(ENV_FILE) def _required_env(name: str) -> str: value = os.getenv(name) if not value: raise RuntimeError(f"缺少 e签宝环境变量: {name}") return value class Config: def __init__(self): self.appId = _required_env("ESIGN_APP_ID") self.scert = _required_env("ESIGN_APP_SECRET") self.host = _required_env("ESIGN_HOST").rstrip("/") self.ordid = _required_env("ESIGN_ORG_ID") self.templates_map = { "store_agreement": _required_env("ESIGN_TEMPLATE_STORE_AGREEMENT"), "lawyer_agreement": _required_env("ESIGN_TEMPLATE_LAWYER_AGREEMENT"), "alipay_auth": _required_env("ESIGN_TEMPLATE_ALIPAY_AUTH"), "wechat_pay_commitment": _required_env("ESIGN_TEMPLATE_WECHAT_PAY_COMMITMENT"), } self.templates_id = self.templates_map["store_agreement"] self.template_file_names = { "store_agreement": _required_env("ESIGN_TEMPLATE_FILE_STORE_AGREEMENT"), "lawyer_agreement": _required_env("ESIGN_TEMPLATE_FILE_LAWYER_AGREEMENT"), "alipay_auth": _required_env("ESIGN_TEMPLATE_FILE_ALIPAY_AUTH"), "wechat_pay_commitment": _required_env("ESIGN_TEMPLATE_FILE_WECHAT_PAY_COMMITMENT"), } self.callback_url = _required_env("ESIGN_CALLBACK_URL") self.developer_callback_url = os.getenv("ESIGN_DEVELOPER_CALLBACK_URL", self.callback_url) self.redirect_url = os.getenv("ESIGN_REDIRECT_URL", "https://www.esign.cn/")