Skip to content

UserRegin 用户注册

账号授权模式的注册入口:用用户名 + 密码创建一个账号。可选传入卡密在注册时直接激活,也可传 BindQQ=1 走 QQ 扫码注册流程。

项目
actionUserRegin
入口Handle POST https://www.a7p.cn/api/verify/{ApiPassword}
是否计入验证统计
后续动作注册后调用 UserLogin 登录

调用步骤

  1. 完成 Init 握手,拿到 ApiPassword
  2. 采集机器码 Mac(建议传,作为账号初始绑定设备)。
  3. 拼接明文:action=UserRegin&UserName=账号&Password=密码;如需注册即激活,追加 &Card=卡密
  4. RC4 加密 + MD5 签名,POST 到 Handle 接口。
  5. code == 200 → 若传了卡密会返回 data.token,可据此直接登录。

请求参数

字段类型必填说明
actionstring固定值 UserRegin
UserNamestring用户名(同一程序下唯一)。等价别名:username
Passwordstring密码(明文,已由 RC4 整体加密)。等价别名:pwdPwd
Cardstring注册即激活的卡密。等价别名:card
Macstring机器码,作为账号初始绑定设备。等价别名:macDeviceId
DeviceNamestring设备名称/备注。等价别名:Device
BindQQstring1 时进入 QQ 扫码注册流程(此时无需 Password,但 UserName 仍必填)

明文示例:

text
# 仅注册(不激活)
action=UserRegin&UserName=testuser01&Password=123456&Mac=MAC001

# 注册并同时用卡密激活
action=UserRegin&UserName=testuser01&Password=123456&Card=6PCG-ZRSZ-EX83-YBEH&Mac=MAC001

QQ 扫码注册(BindQQ=1)

BindQQ=1 时,后端不会立即创建账号,而是缓存注册信息并返回 QQ 扫码链接;用户扫码完成后才真正创建账号。

text
action=UserRegin&UserName=testuser01&BindQQ=1&Mac=MAC001

返回:

json
{
  "code": 200,
  "message": "请扫码绑定QQ",
  "data": { "url": "https://graph.qq.com/oauth2.0/authorize?..." }
}

业务规则

  • 用户名必唯一:同一程序下已存在该用户名返回 1017
  • 每 IP 注册数限制:若产品开启了「每 IP 最大注册数」,超过上限返回 1019
  • 无卡密注册:账号照常创建,但激活记录标记为 expired(过期),登录会返回 1005,需补卡续期。
  • 带卡密注册:卡密直接激活账号并返回 data.token按次卡密不能用于注册,会返回 1024
  • QQ 扫码注册:扫码前不会占用用户名,扫码成功后才落库。

请求示例

python
# 复用 /api/handle 页面中的 handle() 与 rc4() 函数
API_PW = "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"

plain = "action=UserRegin&UserName=testuser01&Password=123456&Card=6PCG-ZRSZ-EX83-YBEH&Mac=MAC001"
result = handle(API_PW, plain)

code = result["code"]
if code == 200:
    data = result.get("data") or {}
    print(f"注册成功,到期 {data.get('expire_at')}")
    if "token" in data:
        print(f"已激活,token={data['token']}")
elif code == 1017:
    print("用户名已被注册")
elif code == 1019:
    print("该 IP 注册数已达上限")
else:
    print(f"注册失败 {code}: {result['message']}")
csharp
// 复用 /api/handle 页面中的 A7Client
var client = new A7Client(apiPassword);

string plain = "action=UserRegin&UserName=testuser01&Password=123456&Card=6PCG-ZRSZ-EX83-YBEH&Mac=MAC001";
JsonElement result = await client.HandleAsync(plain);

int code = result.GetProperty("code").GetInt32();
switch (code)
{
    case 200:
        JsonElement data = result.GetProperty("data");
        Console.WriteLine($"注册成功,到期 {data.GetProperty("expire_at").GetString()}");
        break;
    case 1017:
        Console.WriteLine("用户名已被注册");
        break;
    case 1019:
        Console.WriteLine("该 IP 注册数已达上限");
        break;
    default:
        Console.WriteLine($"注册失败 {code}: {result.GetProperty("message").GetString()}");
        break;
}
javascript
// 复用 /sdk/nodejs 中的 A7Client
const client = new A7Client({ appId: '150018', appKey: 'YOUR_APP_KEY' })
await client.init()

const result = await client.call('UserRegin', {
  UserName: 'testuser01',
  Password: '123456',
  Card: '6PCG-ZRSZ-EX83-YBEH',
  Mac: 'MAC001',
})

if (result.code === 200) {
  console.log('注册成功,到期', result.data.expire_at)
} else if (result.code === 1017) {
  console.log('用户名已被注册')
} else {
  console.error(`注册失败 ${result.code}: ${result.message}`)
}
text
.版本 2

.子程序 A7_用户注册, 逻辑型
.参数 ApiPassword, 文本型
.参数 账号, 文本型
.参数 密码, 文本型
.局部变量 TimeStamp, 文本型
.局部变量 加密参数, 文本型
.局部变量 Sign, 文本型
.局部变量 返回文本, 文本型
.局部变量 状态码, 文本型

TimeStamp = 到文本 (时间_取现行时间戳 ())
加密参数 = RC4加密 (ApiPassword, "action=UserRegin&UserName=" + 账号 + "&Password=" + 密码 + "&Mac=" + 取机器码 ())
Sign = 取数据摘要 (到字节集 (ApiPassword + TimeStamp + 加密参数))
返回文本 = 到文本 (网页_访问 ("https://www.a7p.cn/api/verify/" + ApiPassword, 1, "TimeStamp=" + TimeStamp + "&Sign=" + Sign + "&Data=" + 加密参数))

状态码 = JSON_解析 (返回文本, "code")
.判断开始 (状态码 = "200")
    返回 (真)
.判断 (状态码 = "1017")
    信息框 ("用户名已被注册", 0, )
.默认
    信息框 ("注册失败:" + JSON_解析 (返回文本, "message"), 0, )
.判断结束
返回 (假)

成功响应

仅注册(不传 Card)

json
{
  "code": 200,
  "message": "success",
  "data": {
    "username": "testuser01",
    "user_id": 1024,
    "expire_at": "2026-08-02 23:50:00"
  }
}
字段类型说明
usernamestring注册的用户名
user_idint账号 ID
expire_atstring账号激活到期时间;无卡密注册时为注册当下时间(已过期状态)

注册 + 卡密激活(传 Card)

json
{
  "code": 200,
  "message": "success",
  "data": {
    "username": "testuser01",
    "user_id": 1024,
    "token": "9c4d2e01f7b8443a...",
    "expire_at": "2026-09-01 12:00:00",
    "status": "active"
  }
}
字段类型说明
usernamestring用户名
user_idint账号 ID
tokenstring卡密激活后发放的登录凭证(40 位随机串)
expire_atstring激活到期时间
statusstringactive = 正常

QQ 扫码注册

json
{
  "code": 200,
  "message": "请扫码绑定QQ",
  "data": { "url": "https://graph.qq.com/oauth2.0/authorize?..." }
}

失败响应

json
{ "code": 1013, "message": "参数不完整: UserName, Password 必填", "data": null }
json
{ "code": 1017, "message": "用户名已被注册", "data": null }
json
{ "code": 1019, "message": "该IP注册数已达上限,每IP最大注册数: 3", "data": null }
json
{ "code": 1024, "message": "按次卡密不能用于用户注册,请使用卡密登录方式", "data": null }

错误码

错误码含义解决方案
1013参数不完整UserNamePassword 必填
1017用户名已被注册换一个用户名,或改走 UserLogin
1019该 IP 注册数已达上限到后台调高限额,或引导用户换网络环境
1004卡密无效Card 不存在或不属于当前产品
1024按次卡密不能注册按次卡请走 SingleLogin
1005卡密已过期卡密已过期,换一张

完整列表见错误码对照表

相关文档

A7验证 · 软件授权与网络验证平台