{"skill":{"slug":"fadada-esign-cn","displayName":"fadada-esign","summary":"法大大电子合同与电子签署技能（FASC API 5.0）。一键发送合同给对方签署，支持查询签署状态、下载已签署合同。适用于HR合同、销售合同、协议签署等场景。当用户提到\"发合同\"、\"让对方签合同\"、\"电子签\"、\"法大大\"、\"合同签署\"、\"查询签署状态\"、\"下载合同\"等场景时触发。","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":70,"installsAllTime":0,"installsCurrent":0,"stars":1,"versions":1},"createdAt":1776161286409,"updatedAt":1776161812006},"latestVersion":{"version":"1.0.0","createdAt":1776161286409,"changelog":"# 法大大电子签 Skill（FASC API 5.0）\n\n基于法大大  电子签API ，提供一键式合同创建、发送、签署全流程解决方案。\n\n## ✨ 核心特性\n\n- **一键发送** - 只需一行代码即可完成文件上传、任务创建、获取签署链接\n- **正确签名** - 严格按照官方文档实现 HMAC-SHA256 两步签名算法\n- **智能配置** - 支持环境变量、配置文件、代码传入多种配置方式\n- **命令行工具** - 提供 `fadada` CLI 工具，无需编写代码即可发送合同\n- **完整功能** - 支持发送、查询、下载全流程\n\n## 🚀 快速开始\n\n### 1. 安装\n\n```bash\n# 安装依赖\npip install requests\n```\n\n### 2. 配置凭证\n\n**方式一：环境变量**\n\n```bash\nexport FADADA_APP_ID=\"your_app_id\"\nexport FADADA_APP_SECRET=\"your_app_secret\"\nexport FADADA_OPEN_CORP_ID=\"your_open_corp_id\"\n```\n\n**方式二：配置文件**\n\n```bash\n# 创建配置文件\nmkdir -p ~/.fadada\ncat > ~/.fadada/config.json << EOF\n{\n  \"app_id\": \"your_app_id\",\n  \"app_secret\": \"your_app_secret\",\n  \"open_corp_id\": \"your_open_corp_id\"\n}\nEOF\n```\n\n**方式三：代码中直接传入**\n\n```python\nfrom fadada_esign import FaDaDaClient, Signer\n\nclient = FaDaDaClient(\n    app_id=\"your_app_id\",\n    app_secret=\"your_app_secret\",\n    open_corp_id=\"your_open_corp_id\"\n)\n```\n\n### 3. 发送合同（最简单的方式）\n\n```python\nfrom fadada_esign import FaDaDaClient, Signer\n\n# 创建客户端\nclient = FaDaDaClient(\n    app_id=\"your_app_id\",\n    app_secret=\"your_app_secret\",\n    open_corp_id=\"your_open_corp_id\"\n)\n\n# 一键发送合同\nresult = client.send_to_single_signer(\n    file_path=\"/path/to/contract.pdf\",\n    signer_name=\"张三\",\n    signer_mobile=\"13800138000\",\n    task_subject=\"劳动合同签署\"\n)\n\nprint(f\"签署链接: {result['sign_url']}\")\n```\n\n### 4. 命令行发送\n\n```bash\n# 发送给单个签署人\nfadada send contract.pdf --signer \"张三:13800138000\"\n\n# 发送给多个签署人\nfadada send contract.pdf --signer \"张三:13800138000\" --signer \"李四:13900139000\"\n\n# 指定任务主题\nfadada send contract.pdf --signer \"张三:13800138000\" --subject \"销售合同\"\n```\n\n## 📖 API 文档\n\n### 客户端初始化\n\n```python\nfrom fadada_esign import FaDaDaClient\n\n# 正式环境\nclient = FaDaDaClient(\n    app_id=\"your_app_id\",\n    app_secret=\"your_app_secret\",\n    open_corp_id=\"your_open_corp_id\"\n)\n\n# 沙箱环境\nclient = FaDaDaClient(\n    app_id=\"your_app_id\",\n    app_secret=\"your_app_secret\",\n    open_corp_id=\"your_open_corp_id\",\n    sandbox=True\n)\n```\n\n### 一键发送文档\n\n```python\nfrom fadada_esign import FaDaDaClient, Signer\n\nclient = FaDaDaClient(...)\n\n# 方式1：发送给单个签署人（最简单）\nresult = client.send_to_single_signer(\n    file_path=\"/path/to/contract.pdf\",\n    signer_name=\"张三\",\n    signer_mobile=\"13800138000\"\n)\n\n# 方式2：发送给多个签署人\nsigners = [\n    Signer(name=\"张三\", mobile=\"13800138000\", actor_id=\"signer1\"),\n    Signer(name=\"李四\", mobile=\"13900139000\", actor_id=\"signer2\")\n]\n\nresult = client.send_document(\n    file_path=\"/path/to/contract.pdf\",\n    signers=signers,\n    task_subject=\"多方合同\"\n)\n\n# 返回结果\nprint(result)\n# {\n#     \"sign_task_id\": \"1774590564587181726\",\n#     \"sign_url\": \"https://fdd1.cn/dQFiT0SDcw1\",\n#     \"task_subject\": \"多方合同\",\n#     \"file_path\": \"/path/to/contract.pdf\",\n#     \"signers\": [...]\n# }\n```\n\n### 分步操作\n\n```python\nfrom fadada_esign import FaDaDaClient, Signer\n\nclient = FaDaDaClient(...)\n\n# 1. 上传文件\nfile_id = client.upload_file(\"/path/to/contract.pdf\")\n\n# 2. 创建签署任务\nsigner = Signer(name=\"张三\", mobile=\"13800138000\")\nsign_task_id = client.create_sign_task(\n    task_subject=\"合同签署\",\n    file_id=file_id,\n    signers=[signer]\n)\n\n# 3. 获取签署链接\nsign_url = client.get_sign_url(sign_task_id)\n```\n\n### 查询签署状态\n\n```python\n# 查询任务详情\ndetail = client.query_task_detail(sign_task_id)\nprint(detail)\n# {\n#     \"signTaskId\": \"xxx\",\n#     \"signTaskSubject\": \"合同签署\",\n#     \"signTaskStatus\": \"sign_progress\",\n#     \"actors\": [...]\n# }\n```\n\n### 下载已签署文档\n\n```python\n# 获取下载链接\ndownload_url = client.get_download_url(sign_task_id)\nprint(f\"下载链接: {download_url}\")\n\n# 或者直接下载\nimport requests\nresponse = requests.get(download_url)\nwith open(\"signed_contract.pdf\", \"wb\") as f:\n    f.write(response.content)\n```\n\n## 🔧 命令行工具\n\n### 配置管理\n\n```bash\n# 交互式配置\nfadada config setup\n\n# 查看当前配置\nfadada config show\n```\n\n### 发送合同\n\n```bash\n# 基础用法\nfadada send contract.pdf --signer \"张三:13800138000\"\n\n# 多个签署人\nfadada send contract.pdf \\\n    --signer \"张三:13800138000\" \\\n    --signer \"李四:13900139000\" \\\n    --subject \"合作协议\"\n\n# 保存结果到文件\nfadada send contract.pdf \\\n    --signer \"张三:13800138000\" \\\n    --output result.json\n```\n\n### 查询状态\n\n```bash\nfadada status <task_id>\n```\n\n### 下载合同\n\n```bash\nfadada download <task_id> --output ./signed_contract.pdf\n```\n\n## 📋 签署任务状态\n\n| 状态          | 说明       |\n| ------------- | ---------- |\n| draft         | 创建中     |\n| submitting    | 提交中     |\n| fill_wait     | 等待填写   |\n| filled        | 填写完成   |\n| sign_progress | 签署进行中 |\n| finished      | 已完成     |\n| cancelled     | 已撤销     |\n| expired       | 已过期     |\n\n## 📝 签署人配置\n\n```python\nfrom fadada_esign import Signer\n\n# 基础配置\nsigner = Signer(\n    name=\"张三\",\n    mobile=\"13800138000\"\n)\n\n# 完整配置\nsigner = Signer(\n    name=\"张三\",\n    mobile=\"13800138000\",\n    actor_id=\"signer1\",\n    actor_type=\"person\",  # person 或 corp\n    permissions=[\"sign\"],\n    notification={\n        \"sendNotification\": True,\n        \"notifyWay\": \"mobile\",\n        \"notifyAddress\": \"13800138000\"\n    },\n    id_number=\"11010119900101xxxx\",  # 可选\n    email=\"zhangsan@example.com\"  # 可选\n)\n```\n\n## ⚙️ 配置优先级\n\n配置加载优先级（从高到低）：\n\n1. 代码中显式传入的参数\n2. 环境变量（`FADADA_APP_ID`, `FADADA_APP_SECRET`, `FADADA_OPEN_CORP_ID`）\n3. 本地配置文件（`.fadada.json` 或 `fadada_config.json`）\n4. 全局配置文件（`~/.fadada/config.json`）\n\n## 🔐 安全注意事项\n\n- **App Secret 不要硬编码**在代码中，建议使用环境变量或配置文件\n- **配置文件权限**建议设置为 `600`（仅所有者可读写）\n- **生产环境**建议使用正式环境（sandbox=False）\n\n## 🐛 错误处理\n\n```python\nfrom fadada_esign import FaDaDaClient, Signer\nfrom fadada_esign.exceptions import FaDaDaError, FaDaDaAuthError, FaDaDaAPIError\n\nclient = FaDaDaClient(...)\n\ntry:\n    result = client.send_to_single_signer(...)\nexcept FaDaDaAuthError as e:\n    print(f\"认证失败: {e}\")\nexcept FaDaDaAPIError as e:\n    print(f\"API 错误: {e.code} - {e}\")\nexcept FaDaDaError as e:\n    print(f\"操作失败: {e}\")\n```\n\n## 📚 完整示例\n\n```python\n#!/usr/bin/env python3\n\"\"\"\n法大大电子签 - 完整示例\n\"\"\"\n\nfrom fadada_esign import FaDaDaClient, Signer\n\ndef main():\n    # 初始化客户端\n    client = FaDaDaClient(\n        app_id=\"your_app_id\",\n        app_secret=\"your_app_secret\",\n        open_corp_id=\"your_open_corp_id\",\n        sandbox=False  # 生产环境\n    )\n    \n    # 创建签署人\n    signers = [\n        Signer(name=\"张三\", mobile=\"13800138000\", actor_id=\"signer1\"),\n        Signer(name=\"李四\", mobile=\"13900139000\", actor_id=\"signer2\")\n    ]\n    \n    # 发送合同\n    result = client.send_document(\n        file_path=\"./劳动合同.pdf\",\n        signers=signers,\n        task_subject=\"2024年劳动合同\"\n    )\n    \n    print(\"=\" * 50)\n    print(\"✅ 合同发送成功！\")\n    print(\"=\" * 50)\n    print(f\"任务 ID: {result['sign_task_id']}\")\n    print(f\"签署链接: {result['sign_url']}\")\n    print()\n    \n    # 保存任务ID供后续查询\n    task_id = result['sign_task_id']\n    \n    # 稍后查询状态\n    # detail = client.query_task_detail(task_id)\n    # print(f\"当前状态: {detail['signTaskStatus']}\")\n    \n    # 签署完成后下载\n    # download_url = client.get_download_url(task_id)\n    # print(f\"下载链接: {download_url}\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## 📄 文件结构\n\n```\nfadada_esign/\n├── __init__.py      # 包入口\n├── client.py        # 核心客户端\n├── signer.py        # 签署人模型\n├── config.py        # 配置管理\n├── cli.py           # 命令行工具\n└── exceptions.py    # 异常类\n```\n\n## 🔗 相关链接\n\n- [法大大开放平台](https://www.fadada.com/)","license":"MIT-0"},"metadata":null,"owner":{"handle":"fadada-esign","userId":"s17dpn4tn3n459ak0skpdydk9583qznx","displayName":"FADADA-ESIGN","image":"https://avatars.githubusercontent.com/u/271468648?v=4"},"moderation":{"isSuspicious":true,"isMalwareBlocked":false,"verdict":"suspicious","reasonCodes":["suspicious.llm_suspicious"],"summary":"Detected: suspicious.llm_suspicious","engineVersion":"v2.4.0","updatedAt":1776161812006}}