# Enterprise Three Factor Auth

> 验证企业名称、统一社会信用代码和法人姓名三要素是否一致，适用于企业身份核实、工商信息验证等场景

- Skill: `qq5855144/enterprise-three-factor-auth` (Agent Skill)
- Install (CLI): `npx skillmds@latest add qq5855144/enterprise-three-factor-auth`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qq5855144/enterprise-three-factor-auth/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: qq5855144 (https://skillmd.com/u/qq5855144)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/qq5855144/enterprise-three-factor-auth

---


## 能力概述

调用企业三要素验证接口，传入企业名称、统一社会信用代码和法人姓名，校验三要素是否与工商信息一致，并返回具体不一致项。

- **Endpoint**: `GET https://app-bo4w33bsdqm9-api-Aa2PZnjE80BL-gateway.appmiaoda.com/company_three/get`
- **认证方式**: platform_managed（密钥由平台注入，读取 `INTEGRATIONS_API_KEY`）
- **Content-Type**: `application/json;charset=UTF-8`
- **响应格式**: JSON

### 请求参数

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `companyName` | string | 是 | 公司名称 |
| `creditNo` | string | 是 | 统一社会信用代码 |
| `legalPerson` | string | 是 | 法人姓名 |

### 响应字段说明

**成功响应（`success: true`, `code: 200`）：**

| 字段路径 | 类型 | 说明 |
|----------|------|------|
| `success` | boolean | 请求成功标识，`true` 为成功 |
| `code` | number | 状态码，成功为 200 |
| `msg` | string | 状态描述 |
| `data.order_no` | string | 订单号 |
| `data.result` | number | 验证结果码（见下表） |
| `data.desc` | string | 结果描述 |

**`result` 结果对照表：**

| result | 说明 |
|--------|------|
| 0 | 一致 |
| 1 | 企业名称不一致 |
| 2 | 社会统一信用代码不一致 |
| 3 | 法人名称不一致 |
| 9 | 不一致 |

**失败响应（`success: false`）：**

| 字段路径 | 类型 | 说明 |
|----------|------|------|
| `success` | boolean | `false` |
| `code` | number | 错误状态码（如 400） |
| `msg` | string | 错误描述（如"入参错误"） |
| `data` | object | 空对象 `{}` |

### 响应示例

```json
{
  "msg": "成功",
  "success": true,
  "code": 200,
  "data": {
    "order_no": "426621381069965596",
    "result": 0,
    "desc": "一致"
  }
}
```

---

## 生成期用法（Agent 直接调用）

```typescript
const apiKey = process.env["INTEGRATIONS_API_KEY"]!; // platform_managed 密钥由平台注入

interface CompanyThreeFactorResult {
  order_no: string;
  result: number;
  desc: string;
}

/**
 * 验证企业三要素（企业名称、统一社会信用代码、法人姓名）是否与工商信息一致。
 * @param companyName - 公司名称
 * @param creditNo - 统一社会信用代码
 * @param legalPerson - 法人姓名
 * @returns 验证结果，含 result 码和描述
 */
async function verifyCompanyThreeFactors(
  companyName: string,
  creditNo: string,
  legalPerson: string
): Promise<CompanyThreeFactorResult> {
  const params = new URLSearchParams({ companyName, creditNo, legalPerson });
  const response = await fetch(
    `https://app-bo4w33bsdqm9-api-Aa2PZnjE80BL-gateway.appmiaoda.com/company_three/get?${params.toString()}`,
    {
      method: "GET",
      headers: {
        "Content-Type": "application/json;charset=UTF-8",
        "X-Gateway-Authorization": `Bearer ${apiKey}`,
      },
    }
  );

  if (!response.ok) throw new Error(`HTTP error: ${response.status}`);

  const json = await response.json();
  if (!json.success || json.code !== 200) {
    throw new Error(`API error ${json.code}: ${json.msg}`);
  }

  return json.data;
}

// 示例调用
const result = await verifyCompanyThreeFactors(
  "示例公司",
  "91110000000000000X",
  "张三"
);
console.log(`验证结果: ${result.result} - ${result.desc}`);
// result === 0 表示三要素一致
```

---

## 生成后用法（应用内通过 Edge Function 调用）

### Edge Function

```typescript
// edge-functions/company-three-factor-auth.ts
import { serve } from "https://deno.land/std/http/server.ts";

serve(async (req: Request): Promise<Response> => {
  if (req.method !== "POST") {
    return new Response("Method Not Allowed", { status: 405 });
  }

  // --- 解析客户端请求 ---
  let companyName: string;
  let creditNo: string;
  let legalPerson: string;
  try {
    const body = await req.json();
    companyName = body.companyName;
    creditNo = body.creditNo;
    legalPerson = body.legalPerson;
    if (!companyName) throw new Error("Missing companyName");
    if (!creditNo) throw new Error("Missing creditNo");
    if (!legalPerson) throw new Error("Missing legalPerson");
  } catch {
    return new Response(JSON.stringify({ error: "Invalid request body" }), {
      status: 400,
      headers: { "Content-Type": "application/json" },
    });
  }

  // --- 注入平台密钥（严禁暴露给客户端）---
  const apiKey = Deno.env.get("INTEGRATIONS_API_KEY");
  if (!apiKey) {
    return new Response(JSON.stringify({ error: "Server configuration error" }), {
      status: 500,
      headers: { "Content-Type": "application/json" },
    });
  }

  // --- 调用上游接口 ---
  const params = new URLSearchParams({ companyName, creditNo, legalPerson });
  const upstream = await fetch(
    `https://app-bo4w33bsdqm9-api-Aa2PZnjE80BL-gateway.appmiaoda.com/company_three/get?${params.toString()}`,
    {
      method: "GET",
      headers: {
        "Content-Type": "application/json;charset=UTF-8",
        "X-Gateway-Authorization": `Bearer ${apiKey}`,
      },
    }
  );

  // 透传配额/余额错误
  if (upstream.status === 429 || upstream.status === 402) {
    const errText = await upstream.text();
    return new Response(errText, {
      status: upstream.status,
      headers: { "Content-Type": "application/json" },
    });
  }

  if (!upstream.ok) {
    return new Response(
      JSON.stringify({ error: `Upstream error: ${upstream.status}` }),
      { status: 502, headers: { "Content-Type": "application/json" } }
    );
  }

  const data = await upstream.json();
  return new Response(JSON.stringify(data), {
    status: 200,
    headers: { "Content-Type": "application/json" },
  });
});
```

### 前端调用代码

Web 和 MiniProgram 均可使用 supabase client 调用，响应为标准 JSON，无平台差异。

**推荐方式（supabase client 可用时）：**

```typescript
interface CompanyThreeFactorResult {
  order_no: string;
  result: number;
  desc: string;
}

/**
 * 通过 Edge Function 验证企业三要素。
 * @param companyName - 公司名称
 * @param creditNo - 统一社会信用代码
 * @param legalPerson - 法人姓名
 * @returns 验证结果，含 result 码和描述
 */
async function verifyCompanyThreeFactors(
  companyName: string,
  creditNo: string,
  legalPerson: string
): Promise<CompanyThreeFactorResult> {
  const { data, error } = await supabase.functions.invoke("company-three-factor-auth", {
    body: { companyName, creditNo, legalPerson },
  });
  if (error) throw error;
  if (!data.success || data.code !== 200) {
    throw new Error(`API 错误 ${data.code}：${data.msg}`);
  }
  return data.data;
}
```

**备用方式（无法使用 supabase client 时）：**

```typescript
/**
 * 通过原生 fetch 调用企业三要素 Edge Function。
 * @param companyName - 公司名称
 * @param creditNo - 统一社会信用代码
 * @param legalPerson - 法人姓名
 * @returns 验证结果，含 result 码和描述
 */
async function verifyCompanyThreeFactors(
  companyName: string,
  creditNo: string,
  legalPerson: string
): Promise<CompanyThreeFactorResult> {
  const res = await fetch(
    `${import.meta.env.VITE_SUPABASE_URL}/functions/v1/company-three-factor-auth`,
    {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ companyName, creditNo, legalPerson }),
    }
  );

  if (res.status === 429) {
    const err = await res.json();
    throw new Error(`配额已用尽：${err.message ?? res.statusText}`);
  }
  if (res.status === 402) {
    const err = await res.json();
    throw new Error(`余额不足：${err.message ?? res.statusText}`);
  }
  if (!res.ok) throw new Error(`请求失败：${res.status}`);

  const json = await res.json();
  if (!json.success || json.code !== 200) {
    throw new Error(`API 错误 ${json.code}：${json.msg}`);
  }
  return json.data;
}
```

---

## 注意事项

- **密钥安全**：`INTEGRATIONS_API_KEY` 仅可在 Edge Function 服务端读取，严禁暴露到前端。
- **错误处理**：务必处理 429（配额超限）和 402（余额不足）两种错误状态码。
- **计费**：每次调用按次计费，折扣价 ¥3.75 / 次（原价 ¥4.50 / 次），避免不必要的重复调用。
- **结果判断**：`data.result === 0` 表示三要素完全一致；其他值表示具体哪项不一致，详见 result 对照表。
- **必填参数**：`companyName`、`creditNo`、`legalPerson` 三个参数均为必填，任一缺失将返回 400 入参错误。
- **Plugin ID**: `a7c30985-2084-4205-9dbd-9d84238e0b3f`
- **API ID**: `api-Aa2PZnjE80BL`
- **third_part_domain**: `app-bo4w33bsdqm9-api-Aa2PZnjE80BL-gateway.appmiaoda.com`

