Skip to content

ChangeBind 换绑设备

账号授权模式下的换绑入口:当用户更换电脑(机器码变化)时,用用户名 + 密码将账号绑定到新的机器码上。

项目
actionChangeBind
入口Handle POST https://www.a7p.cn/api/verify/{ApiPassword}
是否计入验证统计
触发来源UserLogin 返回 1022 时调用

调用步骤

  1. 完成 Init 握手,拿到 ApiPassword
  2. 拼接明文:action=ChangeBind&UserName=账号&Password=密码&Mac=新机器码
  3. RC4 加密 + MD5 签名,POST 到 Handle 接口。
  4. code == 200 → 换绑成功,之后用新机器码调用 UserLogin 即可。

请求参数

字段类型必填说明
actionstring固定值 ChangeBind
UserNamestring用户名。等价别名:username
Passwordstring密码。等价别名:pwdPwd
Macstring新机器码。等价别名:macNewMacDeviceId

明文示例:

text
action=ChangeBind&UserName=testuser01&Password=123456&Mac=NEW-MAC-002

业务规则

  • 三个字段缺一不可,缺失返回 1013
  • 用户名不存在返回 1016;密码不匹配返回 1003
  • 相同机器码无需换绑Mac 与当前已绑定机器码一致时返回 1020
  • 换绑次数限制:若产品开启了换绑次数上限,超过后返回 1021
  • 换绑成功后,账号与对应激活记录的 device_id 同步更新为新机器码,返回 bind_countbind_limit

请求示例

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

plain = "action=ChangeBind&UserName=testuser01&Password=123456&Mac=NEW-MAC-002"
result = handle(API_PW, plain)

code = result["code"]
if code == 200:
    data = result.get("data") or {}
    print(f"换绑成功,已用 {data.get('bind_count')}/{data.get('bind_limit')} 次")
elif code == 1020:
    print("新机器码与当前机器码相同,无需换绑")
elif code == 1021:
    print("换绑次数已达上限")
elif code == 1003:
    print("密码错误")
else:
    print(f"换绑失败 {code}: {result['message']}")
csharp
// 复用 /api/handle 页面中的 A7Client
var client = new A7Client(apiPassword);

string plain = "action=ChangeBind&UserName=testuser01&Password=123456&Mac=NEW-MAC-002";
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("bind_count").GetInt32()}/{data.GetProperty("bind_limit").GetInt32()} 次");
        break;
    case 1020:
        Console.WriteLine("新机器码与当前机器码相同,无需换绑");
        break;
    case 1021:
        Console.WriteLine("换绑次数已达上限");
        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('ChangeBind', {
  UserName: 'testuser01',
  Password: '123456',
  Mac: 'NEW-MAC-002',
})

if (result.code === 200) {
  console.log(`换绑成功,已用 ${result.data.bind_count}/${result.data.bind_limit} 次`)
} else if (result.code === 1020) {
  console.log('新机器码与当前机器码相同,无需换绑')
} else if (result.code === 1021) {
  console.log('换绑次数已达上限')
} else {
  console.error(`换绑失败 ${result.code}: ${result.message}`)
}
text
.版本 2

.子程序 A7_换绑设备, 逻辑型
.参数 ApiPassword, 文本型
.参数 账号, 文本型
.参数 密码, 文本型
.参数 新机器码, 文本型
.局部变量 TimeStamp, 文本型
.局部变量 加密参数, 文本型
.局部变量 Sign, 文本型
.局部变量 返回文本, 文本型
.局部变量 状态码, 文本型

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

状态码 = JSON_解析 (返回文本, "code")
.判断开始 (状态码 = "200")
    返回 (真)
.判断 (状态码 = "1020")
    信息框 ("新机器码与当前机器码相同,无需换绑", 0, )
.判断 (状态码 = "1021")
    信息框 ("换绑次数已达上限", 0, )
.默认
    信息框 ("换绑失败:" + JSON_解析 (返回文本, "message"), 0, )
.判断结束
返回 (假)

成功响应

json
{
  "code": 200,
  "message": "success",
  "data": {
    "username": "testuser01",
    "device_id": "NEW-MAC-002",
    "bind_count": 1,
    "bind_limit": 3
  }
}
字段类型说明
usernamestring用户名
device_idstring换绑后的新机器码
bind_countint已使用换绑次数
bind_limitint产品设置的换绑次数上限

失败响应

json
{ "code": 1013, "message": "参数不完整: UserName, Password, Mac 必填", "data": null }
json
{ "code": 1020, "message": "新机器码与当前机器码相同", "data": null }
json
{ "code": 1021, "message": "换绑次数已达上限,最多允许3次", "data": null }
json
{ "code": 1003, "message": "密码错误", "data": null }
json
{ "code": 1016, "message": "用户未注册", "data": null }

错误码

错误码含义解决方案
1013参数不完整UserNamePasswordMac 必填
1020新机器码与当前机器码相同无需换绑,直接登录即可
1021换绑次数已达上限到后台重置该用户的 bind_count 或调高上限
1003密码错误提示用户重新输入密码
1016用户未注册引导先调用 UserRegin

完整列表见错误码对照表

相关文档

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