# 4399 游戏账号领取 · 极验 GT4 验证对接文档

## 概述

4399 游戏账号领取系统，集成极验 GT4 人机验证，支持 H5 / Android / iOS / 小程序多端接入。

- **领取地址：** `https://4399.fzyidc.com/api_claim.php`
- **请求方式：** POST
- **极验 captcha_id：** `d6545edb20e9d3af0ba00c7549cd27c6`

---

## 对接流程

```
用户点击「领取」
  → 调起极验 GT4 验证码
  → 用户完成滑动验证
  → SDK 返回 4 个参数
  → APP/H5 POST 到 api_claim.php
  → 服务端极验二次校验
  → 返回账号密码
```

---

## API 文档

### 领取接口

```
POST https://4399.fzyidc.com/api_claim.php
Content-Type: application/x-www-form-urlencoded
```

### 请求参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `lot_number` | string | ✅ | 极验验证流水号，SDK 自动生成 |
| `captcha_output` | string | ✅ | 极验验证输出，SDK 自动生成 |
| `pass_token` | string | ✅ | 极验通过标识，SDK 自动生成 |
| `gen_time` | string | ✅ | 极验时间戳，SDK 自动生成 |

> 这 4 个参数由极验移动端 SDK 自动生成，APP 只需要转发。

### 返回结果

**成功：**
```json
{
  "success": true,
  "data": {
    "username": "游戏账号",
    "password": "对应密码",
    "get_time": "2026-05-24 23:43:00"
  },
  "remaining": 3
}
```

**失败：**
```json
{
  "success": false,
  "message": "今日领取次数已用完"
}
```

### 返回字段说明

| 字段 | 说明 |
|------|------|
| `success` | 是否成功 |
| `data.username` | 游戏账号 |
| `data.password` | 账号密码 |
| `data.get_time` | 领取时间 |
| `remaining` | 今日剩余可领取次数 |
| `message` | 失败原因 |

---

## 各端对接指南

### H5

1. 引入极验 SDK：
```html
<script src="https://static.geetest.com/v4/gt4.js"></script>
```

2. 初始化极验并调用领取：
```javascript
initGeetest4({
  captchaId: 'd6545edb20e9d3af0ba00c7549cd27c6',
  product: 'bind'
}, function(instance) {
  instance.onSuccess(function() {
    const result = instance.getValidate();
    // POST 到领取接口
    fetch('https://4399.fzyidc.com/api_claim.php', {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: new URLSearchParams({
        lot_number:     result.lot_number,
        captcha_output: result.captcha_output,
        pass_token:     result.pass_token,
        gen_time:       result.gen_time
      })
    }).then(r => r.json()).then(data => {
      if (data.success) {
        // 领取成功，显示 data.data.username 和 data.data.password
      }
    });
  });
  instance.show();
});
```

### Android (Java + OkHttp)

```java
// 极验验证通过后
String lot_number     = result.getLotNumber();
String captcha_output = result.getCaptchaOutput();
String pass_token     = result.getPassToken();
String gen_time       = result.getGenTime();

RequestBody body = new FormBody.Builder()
    .add("lot_number",     lot_number)
    .add("captcha_output", captcha_output)
    .add("pass_token",     pass_token)
    .add("gen_time",       gen_time)
    .build();

Request request = new Request.Builder()
    .url("https://4399.fzyidc.com/api_claim.php")
    .post(body)
    .build();

Response response = client.newCall(request).execute();
String json = response.body().string();
JSONObject obj = new JSONObject(json);
if (obj.getBoolean("success")) {
    JSONObject data = obj.getJSONObject("data");
    String username = data.getString("username");
    String password = data.getString("password");
}
```

### iOS (Swift)

```swift
var request = URLRequest(url: URL(string: "https://4399.fzyidc.com/api_claim.php")!)
request.httpMethod = "POST"
let body = "lot_number=\(lot_number)&captcha_output=\(captcha_output)&pass_token=\(pass_token)&gen_time=\(gen_time)"
request.httpBody = body.data(using: .utf8)

URLSession.shared.dataTask(with: request) { data, _, _ in
    guard let data = data,
          let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
          let success = json["success"] as? Bool else { return }
    if success, let data = json["data"] as? [String: String] {
        let username = data["username"]
        let password = data["password"]
    }
}.resume()
```

### UniApp (Vue)

详见项目中的 `index.vue` 文件，包含完整的登录拦截、极验验证、领取页面。

---

## 安全建议

1. 前端可做本地次数统计，但以服务端返回的 `remaining` 为准
2. `gen_time` 建议服务端校验时间差不超过 120 秒
3. 避免在客户端暴露接口细节
4. 建议全站 HTTPS

---

## 后台管理

后台地址：https://4399.fzyidc.com/admin/index.html

### 功能
- 数据看板 — 总库存/可用/已领取/今日领取/用户排行
- 账号列表 — 分页浏览、搜索、单个放回
- 批量导入 — 粘贴文本批量导入
- 放回账号 — 按用户ID批量放回

---

## 常见问题

**Q: 极验 SDK 加载失败？**
A: 检查网络连接，或使用 CDN 备用链接。H5 端确保在 HTTPS 环境下加载。

**Q: remaining 返回 0 但仍可领取？**
A: `remaining` 以服务端为准，前端本地计数仅供参考。如不一致以服务端为准。

**Q: 小程序如何集成？**
A: 微信小程序需要在后台配置极验插件，或使用 web-view 组件加载极验验证页面。

---

## 文件说明

| 文件 | 说明 |
|------|------|
| `index.html` | 文档网站主页面 |
| `downloads/h5-demo.html` | H5 完整示例（可直接运行） |
| `downloads/AndroidExample.java` | Android Java 示例 |
| `downloads/ios-example.swift` | iOS Swift 示例 |
| `downloads/index.vue` | UniApp 完整 Vue 组件 |
| `downloads/README.md` | 本文档 |
