# 入会审批与生效

> 协会如何接纳会员，何时缴纳会费，会员卡何时在入场时有效——以及该如何告知从您的网站申请入会的人。

URL: https://developers.vimine.network/zh-hans/guides/admission/

成为会员不是一笔付款：而是**协会的一项决定**。根据意大利《第三部门法典》（第 23 条），除非章程另有规定，由管理机构决定是否接受入会申请。Vimine 上的每个协会都会声明自己如何接纳会员，您的集成在显示表单之前就应读取这一信息。

## 申请之前：预期结果

```
GET https://api.vimine.network/v1/aps/{slug}
→ { "aps": { …, "admission": { "model": "board", "delay_hours": 24 }, "approval_required": true } }
```

| `admission.model` | 申请会怎样 |
| --- | --- |
| `board` | 申请保持**待处理**，直到理事会（或其授权的人）接受；会费在获准入会**之后**缴纳 |
| `provisional` | 会员立即获临时入会；理事会稍后追认 |
| `automatic` | 条件一满足，会员资格即生效：免费类型立即生效，收费类型在缴纳会费后生效 |

`delay_hours` 是从获准入会到会员卡**可以使用**之间的小时数（0 = 立即）。许多拥有对公众开放场地的协会都采取这一审慎做法：会员资格自获准入会起生效，但会员卡要过一段时间才能在入场时使用。请在对方入会时告知：一句“您的会员卡将在 24 小时后可用”，就能避免在门口发生争执。

`approval_required` 为兼容而保留：当模式为 `board` 时，它为 `true`。请读取 `admission`。

## 申请的响应

`POST /v1/me/membership`、`POST /v1/enroll/confirm` 和 `GET /v1/me/membership` 给出的信息相同，字段也相同：

| 字段 | 含义 |
| --- | --- |
| `status` | `pending` · `active` · `suspended` · `revoked` · `rejected` |
| `pending_reasons` | 仍在等待的原因，**按顺序**排列：`approval`（协会尚需决定），然后是 `payment`（会费）。生效后为空 |
| `payment_open` | 现在可以缴纳会费吗？在获准入会之前为 `false`：**获准入会后才开放缴费** |
| `valid_from` | 会员卡何时可以使用，用于处于间隔期内的有效会员资格；否则为 `null` |
| `usable` *（仅 `GET /v1/me/membership`）* | 会员卡此刻是否可在入场时使用 |
| `card` *（仅 `GET /v1/me/membership`）* | 签名令牌——会员资格生效之前为 `null` |

采用 `board` 模式且类型收费时，顺序如下：

1. 申请 → `pending`、`["approval", "payment"]`、`payment_open: false`——**不要显示**付款说明或付款按钮；
2. 协会接受申请 → `["payment"]`、`payment_open: true`——现在可以显示了；申请人也会收到一封电子邮件；
3. 会费已记录 → `active`，可能带有一个未来的 `valid_from`；
4. 过了 `valid_from` → `usable: true`，会员卡在任何人核验时都返回 `valid`。

在入会审批开始之前，申请会员资格的人就必须**已识别身份**——通过税号，或通过出生日期、出生地和出生国：未识别身份的个人资料会返回 `identification_required`。此后，无论有没有税号，入会审批对所有人都一样（参见[没有意大利税号的会员](https://developers.vimine.network/zh-hans/guides/members-without-cf/)）。

## 申请未获接受时

`rejected` 是一种独立的结果：它不是撤销（撤销针对的是原本的会员），而是一份**未获接受**的申请。该决定附有理由，由协会通知申请人；申请人可以在六十天内要求由会员大会作出裁决。对您的集成而言：没有会员卡，也没有可以提供的付款方式；正确的提示是请当事人联系协会。

## 已生效但尚不可用的会员卡

在间隔期内，会员卡**已经存在**——会员能看到它，也能保存到 Wallet——但还不算数：

- `GET /v1/me/membership` → `status: "active"`、`verdict: "not_yet_valid"`、`usable: false`、`valid_from`；
- `GET /v1/verify/{token}` → `{ "status": "inactive", "reason": "not_yet_valid", "valid_from": "…" }`；
- `POST /v1/checkins` → `verdict: "not_yet_valid"`，并带有 `valid_from`；**扫码照样会被记录**；
- 令牌在 `nbf` 中携带同一时刻：离线扫码器自己就能得出相同的结果（参见[嵌入与会员卡核验](https://developers.vimine.network/zh-hans/guides/embed-and-verify/)）。

对于仅限会员的活动，如果活动在 `valid_from` 之前开始，报名资格会返回 `membership_not_yet_valid`；对于之后开始的活动，会员照常报名。

## 变更内容（2026-09-19 版）

全部为新增，但比对取值的人会注意到：

- `status` 可能为 **`rejected`**；`verdict` 可能为 **`not_yet_valid`**；`/v1/verify` 的 `reason` 也可能为 `not_yet_valid`；
- `pending_reasons` 是**有序的**（`approval` 在 `payment` 之前）：此前顺序没有意义；
- 新字段 `admission`、`payment_open`、`valid_from`、`usable`；`payment_instructions` 只在开放缴费后才出现；
- 在会员资格生效之前，`card` 为 `null`——`/v1/me/membership/card`、`card.svg`、`card/email`、`wallet/google` 返回 `409 not_active`；
- 新增一个不具备活动报名资格的原因：`membership_not_yet_valid`。
