API 开发文档 v2.0

阿七批网络验证 — 软件授权验证接口规范

目录
概述

本平台提供 RESTful API 用于软件授权验证。所有接口使用 HTTP POST,数据以 表单(application/x-www-form-urlencoded) 格式传输。

项目说明
接口地址https://www.a7p.cn/api/verify
加密方式RC4 对称加密 + MD5 签名
字符编码UTF-8
认证流程AppId + AppKey 换取 ApiPassword → ApiPassword 签名后续请求
请求格式application/x-www-form-urlencoded(表单 POST)
通信协议
Init 阶段签名
Sign = MD5(AppId + AppKey + TimeStamp + AppKey)
Handle 阶段签名与加密
Sign = MD5(ApiPassword + TimeStamp + Data) Data = RC4(ApiPassword, 明文参数字符串) // 明文参数格式(&连接的键值对) action=SingleLogin&Card=XXXX-XXXX-XXXX-XXXX&DeviceID=MAC001
Step 1: Init 初始化握手
POST/api/verify
请求参数
参数类型必填说明
AppIdstring必填程序编号,如 150018
AppKeystring必填程序密钥,32位大写字母+数字
TimeStampstring必填Unix 时间戳(秒),有效期 ±300秒
Signstring必填MD5(AppId + AppKey + TimeStamp + AppKey)
成功响应
{ "code": 200, "message": "success", "data": { "app_id": "150018", "app_name": "测试版本", "api_password": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6", "version": "1.0", "version_name": "新春特别版" } }
字段说明
api_password32位接口密码,用于后续签名和加密,需妥善保管
version最新版本号
version_name版本名称/更新内容
失败响应
{"code":1001,"message":"AppId 不存在","data":null} {"code":1002,"message":"签名验证失败","data":null} {"code":1010,"message":"时间戳过期","data":null}
Step 2: Handle 业务调用
POST/api/verify/{ApiPassword}
请求参数
参数类型必填说明
TimeStampstring必填Unix 时间戳(秒)
Datastring必填RC4(ApiPassword, 明文参数) 加密后转 HEX 大写
Signstring必填MD5(ApiPassword + TimeStamp + Data)
Data 解密后的明文参数格式
// action 指定操作,其余为操作参数,用 & 连接 action=SingleLogin&Card=XXXX-XXXX-XXXX-XXXX&DeviceID=MAC001&DeviceName=MyPC
Action 接口列表(点击展开)
SingleLogin卡密登录卡密+机器码验证,首次激活自动绑定设备
action=SingleLogin&Card=XXXX-XXXX-XXXX-XXXX&DeviceID=MAC001&DeviceName=MyPC
参数必填说明
Card必填卡密密钥,格式 XXXX-XXXX-XXXX-XXXX
DeviceID必填机器码/设备标识,用于绑定设备
DeviceName可选设备名称,后台展示用
成功响应
{ "code": 200, "message": "success", "data": { "token": "b86fbe17a3e5492f...", "expire_at": "2026-06-03", "status": "active" } }
字段说明
token登录凭证,后续心跳需携带
expire_at到期日期(YYYY-MM-DD),永久卡为"永久"
statusactive=正常
失败响应
{"code":1004,"message":"卡密无效","data":null} {"code":1005,"message":"卡密已过期","data":null} {"code":1006,"message":"卡密已禁用","data":{"remark":"违规使用"}}
UserLogin用户登录用户名+密码登录,可选卡密充值续期
// 仅登录(不传 Card)action=UserLogin&UserName=testuser01&Password=123456 // 登录+续期(传入 Card)action=UserLogin&UserName=testuser01&Password=123456&Card=XXXX-XXXX-XXXX-XXXX
参数必填说明
UserName必填用户名
Password必填密码(明文)
Card可选充值卡密,传入则给该用户续期
仅验证登录(不传 Card)成功
{ "code": 200, "data": { "username": "testuser01", "device_id": "", "expire_at": "2026-06-03", "status": "active", "remark": "" } }
传入 Card 续期成功
{ "code": 200, "data": { "username": "testuser01", "expire_at": "2026-07-02", "added_days": 30, "status": "active" } }
失败响应
{"code":1003,"message":"密码错误","data":null} {"code":1006,"message":"账户已被停封","data":{"remark":"违规"}} {"code":1016,"message":"用户未注册","data":null}
UserRegin用户注册注册新用户,可选同时卡密激活
action=UserRegin&UserName=newuser&Password=123456&Card=XXXX-XXXX-XXXX-XXXX
参数必填说明
UserName必填用户名,3-50字符,程序内唯一
Password必填密码(明文)
Card可选卡密,传入则注册同时激活
Mac可选机器码,用于设备绑定
仅注册(不传 Card)
{"code":200,"data":{"username":"newuser","user_id":6}}
注册+激活(传 Card)
{"code":200,"data":{"username":"newuser","user_id":6,"expire_at":"2026-07-02","status":"active"}}
失败响应
{"code":1017,"message":"用户名已被注册","data":null}
UpdatePwd修改密码验证原密码后修改为新密码
action=UpdatePwd&UserName=testuser01&OldPassword=123456&NewPassword=newpass789
参数必填说明
UserName必填用户名
OldPassword必填原密码
NewPassword必填新密码
成功
{"code":200,"data":{"username":"testuser01"}}
失败
{"code":1003,"message":"原密码错误","data":null}
UserHeartbeat心跳保活维持在线状态,建议每 5 分钟调用一次
// 卡密版action=UserHeartbeat&Token=XXX&Type=card // 用户版action=UserHeartbeat&Token=XXX&Type=user
参数必填说明
Token必填登录/注册返回的 Token
Type必填card=卡密登录 / user=用户登录
成功(无消息)
{"code":200,"data":{"expire_at":"2026-06-03","status":"active","msg":""}}
成功(有消息)
{"code":200,"data":{"expire_at":"2026-06-03","status":"active","msg":"您的账户即将到期,请及时续费"}}
失败
{"code":1005,"message":"已过期","data":null} {"code":1006,"message":"已封停","data":null}
GetLatestVersion获取版本获取程序最新版本号与下载地址
action=GetLatestVersion
成功
{ "code": 200, "data": { "version": "2.1.0", "version_name": "新春特别版", "version_data": "新增登录功能和积分系统", "download_url": "https://xxx.com/update.zip", "version_status": "stable" } }
字段说明
version版本号
version_name版本名称
version_data更新内容/更新日志
download_url下载地址
version_statusstable=正式 / beta=测试
GetBulletin程序公告获取开发者发布的最新公告
action=GetBulletin
成功
{"code":200,"data":{"title":"维护通知","content":"系统将于今晚升级..."}}
GetVariable远程变量获取云端配置变量
// 指定变量名action=GetVariable&Name=app_status // 获取全部(不传 Name)action=GetVariable
指定变量
{"code":200,"data":{"value":"approved"}}
全部变量
{"code":200,"data":{"variables":{"app_name":"测试","app_version":"1.0"}}}
GetUserInfo用户信息查询注册用户的详细资料
action=GetUserInfo&UserName=testuser01&Password=123456
成功
{ "code": 200, "data": { "user_id": 4, "username": "testuser01", "device_id": "MAC001", "device_name": "MyPC", "ip": "192.168.1.1", "expire_at": "2026-06-03", "status": "active" } }
GetCardInfo卡密信息查询卡密状态与绑定详情
action=GetCardInfo&Card=XXXX-XXXX-XXXX-XXXX
成功
{ "code": 200, "data": { "card_status": "active", "expire_at": "2026-06-03", "activated_at": "2026-05-03", "device_id": "MAC001", "device_name": "MyPC" } }
GetMessage后台消息获取开发者后台发送的消息
action=GetMessage&Token=XXX&Type=card
成功
{"code":200,"data":{"message":"您的账户即将到期"}}
ChangeBind改绑设备更换绑定的机器码
action=ChangeBind&UserName=testuser01&Password=123456&Mac=NEW-MAC
成功
{"code":200,"data":{"username":"testuser01","device_id":"NEW-MAC"}}
CardRecharge卡密充值用新卡密给已有卡密续期
action=CardRecharge&Card=OLD-KEY&Card=NEW-KEY
成功
{"code":200,"data":{"expire_at":"2026-07-02","added_days":30}}
错误码参考
Code说明
200成功
1001AppId 不存在
1002签名验证失败
1003密码错误
1004卡密无效
1005已过期
1006已禁用/停封(data.remark 含原因)
1007Token 无效
1008设备不匹配
1010时间戳过期
1013参数不完整
1016用户未注册
1017用户名已被注册
典型业务流程
卡密登录
1
Init
2
SingleLogin
3
缓存Token
4
Heartbeat
用户注册+登录+续期
1
Init
2
UserRegin
3
UserLogin
4
Heartbeat
SDK 示例
Python
import hashlib, time, urllib.request, json BASE = "https://www.a7p.cn/api/verify" APP_ID = "150018" APP_KEY = "YOUR_SECRET" # RC4 加密 def rc4(key, data): S = list(range(256)); j = 0 for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256 S[i], S[j] = S[j], S[i] i = j = 0; result = [] for b in data.encode(): i = (i + 1) % 256; j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] result.append(b ^ S[(S[i] + S[j]) % 256]) return bytes(result).hex().upper() # 1. Init ts = int(time.time()) sign = hashlib.md5(f"{APP_ID}{APP_KEY}{ts}{APP_KEY}".encode()).hexdigest() body = f"AppId={APP_ID}&Key={APP_KEY}&TimeStamp={ts}&Sign={sign}".encode() r = json.loads(urllib.request.urlopen(urllib.request.Request( BASE, data=body, headers={"Content-Type": "application/x-www-form-urlencoded"} ), timeout=10).read().decode()) API_PW = r["data"]["api_password"] # 2. SingleLogin ts2 = int(time.time()) plain = "action=SingleLogin&Card=XXXX-XXXX-XXXX-XXXX&DeviceID=MAC001" enc = rc4(API_PW.encode(), plain) sign2 = hashlib.md5(f"{API_PW}{ts2}{enc}".encode()).hexdigest() r2 = json.loads(urllib.request.urlopen(urllib.request.Request( f"{BASE}/{API_PW}", data=f"TimeStamp={ts2}&Sign={sign2}&Data={enc}".encode(), headers={"Content-Type": "application/x-www-form-urlencoded"} ), timeout=10).read().decode()) print(r2)复制
易语言
.版本 2 .程序集 窗口程序集 .子程序 登录验证 .局部变量 AppId, 文本型 .局部变量 AppKey, 文本型 .局部变量 TimeStamp, 文本型 .局部变量 Sign, 文本型 AppId = "150018" AppKey = "程序密钥" ' 1. Init 初始化 TimeStamp = 到文本 (时间_取现行时间戳 ()) Sign = 取数据摘要 (到字节集 (AppId + AppKey + TimeStamp + AppKey)) 返回文本 = 到文本 (网页_访问 ("https://www.a7p.cn/api/verify", 1, "AppId=" + AppId + "&AppKey=" + AppKey + "&TimeStamp=" + TimeStamp + "&Sign=" + Sign)) ApiPassword = JSON_解析 (返回文本, "data.api_password") ' 2. SingleLogin TimeStamp = 到文本 (时间_取现行时间戳 ()) 加密参数 = RC4加密 (ApiPassword, "action=SingleLogin&Card=" + 卡密 + "&DeviceID=" + 机器码) Sign = 取数据摘要 (到字节集 (ApiPassword + TimeStamp + 加密参数)) 返回文本 = 到文本 (网页_访问 ("https://www.a7p.cn/api/verify/" + ApiPassword, 1, "TimeStamp=" + TimeStamp + "&Sign=" + Sign + "&Data=" + 加密参数))