完整 API 对接文档

每个接口都能直接照着对接。

这里不是概览页。每个 API 都包含认证方式、完整 URL、请求头、路径参数、Query 参数、Body 参数、请求示例、成功响应、失败响应和注意事项。

41公开接口逐个展开,不包含后台管理 API。
9JavaScript、Go、PHP、Python、C#、Java、C++、Rust、易语言 SDK 示例。
signHMAC-SHA256 签名,支持 sign_aes 加密通讯。

签名规则

客户端接口必须携带公共请求头。签名字符串为 appId + timestamp + nonce + body,使用当前软件 AppSecret 计算 HMAC-SHA256 十六进制字符串。

GET 请求没有 JSON body 时,body 按空字符串参与签名;POST 请求必须使用实际发送的原始 body 字符串参与签名。sign_aes 模式下,参与签名的是加密后的 body。

客户端授权

软件客户端登录、注册、心跳、退出、版本和公告等基础授权接口。

POST
/api/client/auth/register
客户端注册账号并直接创建在线会话

用于客户端首次创建用户账号。注册成功后会自动绑定当前设备并创建在线会话,返回客户端 token。

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/auth/register

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
clientVersionstring客户端当前版本号,用于版本检查、日志排查和工单定位。1.0.0
deviceFingerprintstring设备唯一指纹。建议由机器码、硬件信息或安装实例 ID 生成,并保持稳定。machine-guid-or-hardware-fingerprint
deviceNamestring设备名称,会显示在后台设备管理中。Windows PC
emailstring用户邮箱,可选,用于后台识别或联系用户。demo@example.com
passwordstring用户密码。服务端只保存哈希,不保存明文。123456
phonestring手机号,可选。""
usernamestring用户账号。账号全局唯一,但会员、点数、设备、订单等权益按软件隔离。demo
请求示例
{
  "agentCode": "A1234567",
  "clientVersion": "1.0.0",
  "deviceFingerprint": "machine-guid-or-hardware-fingerprint",
  "deviceName": "Windows PC",
  "email": "demo@example.com",
  "password": "123456",
  "phone": "",
  "username": "demo"
}
成功响应
{
  "code": "OK",
  "data": {
    "activationReason": "membership required",
    "activationRequired": true,
    "app": {
      "appId": "8828",
      "billingMode": "time",
      "bindDeviceEnabled": true,
      "bindIpEnabled": false,
      "maxDevices": 1
    },
    "entitlement": {
      "expiredAt": null,
      "membership": null,
      "membershipActive": false,
      "membershipLevelId": null,
      "membershipStatus": "none",
      "points": 0,
      "startedAt": null
    },
    "heartbeat": {
      "interval": 60
    },
    "loginAvailable": true,
    "sessionId": "sess_xxx",
    "token": "client-jwt",
    "user": {
      "avatar": "https://thirdqq.qlogo.cn/...",
      "id": 1,
      "nickname": "大白",
      "provider": "qq",
      "status": "active",
      "username": "demo"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • 注册成功后会自动绑定当前设备并返回客户端 token。
  • 时长收费软件即使没有会员也允许登录,客户端应根据 activationRequired 和 entitlement 决定是否拦截功能。
  • 如果软件开启设备绑定或 IP 绑定,更换硬件/IP 后会拒绝登录,需要后台解绑。
POST
/api/client/auth/login
客户端账号密码授权登录

用于客户端账号密码登录。会员过期不会导致登录失败,客户端应根据 entitlement 和 activationRequired 判断是否开放业务功能。

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/auth/login

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Body 参数类型必填说明示例
clientVersionstring客户端当前版本号,用于版本检查、日志排查和工单定位。1.0.0
deviceFingerprintstring设备唯一指纹。建议由机器码、硬件信息或安装实例 ID 生成,并保持稳定。machine-guid-or-hardware-fingerprint
deviceNamestring设备名称,会显示在后台设备管理中。Windows PC
passwordstring用户密码。服务端只保存哈希,不保存明文。123456
usernamestring用户账号。账号全局唯一,但会员、点数、设备、订单等权益按软件隔离。demo
请求示例
{
  "clientVersion": "1.0.0",
  "deviceFingerprint": "machine-guid-or-hardware-fingerprint",
  "deviceName": "Windows PC",
  "password": "123456",
  "username": "demo"
}
成功响应
{
  "code": "OK",
  "data": {
    "activationReason": "membership required",
    "activationRequired": true,
    "app": {
      "appId": "8828",
      "billingMode": "time",
      "bindDeviceEnabled": true,
      "bindIpEnabled": false,
      "maxDevices": 1
    },
    "entitlement": {
      "expiredAt": null,
      "membership": null,
      "membershipActive": false,
      "membershipLevelId": null,
      "membershipStatus": "none",
      "points": 0,
      "startedAt": null
    },
    "heartbeat": {
      "interval": 60
    },
    "loginAvailable": true,
    "sessionId": "sess_xxx",
    "token": "client-jwt",
    "user": {
      "avatar": "https://thirdqq.qlogo.cn/...",
      "id": 1,
      "nickname": "大白",
      "provider": "qq",
      "status": "active",
      "username": "demo"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • 登录不因会员过期而失败;会员状态、点数和到期时间通过 entitlement 返回。
  • 设备封禁、绑定设备更换、绑定 IP 更换、用户禁用、在线会话超限仍会被拒绝。
POST
/api/client/auth/license-login
使用授权码直接登录客户端

使用授权码直接登录客户端

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/auth/license-login

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Body 参数类型必填说明示例
clientVersionstring客户端当前版本号,用于版本检查、日志排查和工单定位。1.0.0
deviceFingerprintstring设备唯一指纹。建议由机器码、硬件信息或安装实例 ID 生成,并保持稳定。machine-guid-or-hardware-fingerprint
deviceNamestring设备名称,会显示在后台设备管理中。Windows PC
licenseCodestring后台生成的授权码明文。首次登录激活时创建并关联内部隐藏用户,可直接登录客户端。AUVV-XXXX-XXXX-XXXX
请求示例
{
  "clientVersion": "1.0.0",
  "deviceFingerprint": "machine-guid-or-hardware-fingerprint",
  "deviceName": "Windows PC",
  "licenseCode": "AUVV-XXXX-XXXX-XXXX"
}
成功响应
{
  "code": "OK",
  "data": {
    "activationReason": "membership required",
    "activationRequired": true,
    "app": {
      "appId": "8828",
      "billingMode": "time",
      "bindDeviceEnabled": true,
      "bindIpEnabled": false,
      "maxDevices": 1
    },
    "entitlement": {
      "expiredAt": null,
      "membership": null,
      "membershipActive": false,
      "membershipLevelId": null,
      "membershipStatus": "none",
      "points": 0,
      "startedAt": null
    },
    "heartbeat": {
      "interval": 60
    },
    "licenseCode": {
      "activatedAt": "2026-06-06T10:00:00+08:00",
      "codeTail": "ABCD1234",
      "expiredAt": "2026-07-06T10:00:00+08:00",
      "id": 1,
      "licenseType": "time",
      "status": "active"
    },
    "loginAvailable": true,
    "sessionId": "sess_xxx",
    "token": "client-jwt",
    "user": {
      "avatar": "https://thirdqq.qlogo.cn/...",
      "id": 1,
      "nickname": "大白",
      "provider": "qq",
      "status": "active",
      "username": "demo"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • 授权码首次登录激活时才会创建并永久关联内部隐藏用户,登录成功后返回普通客户端 token。
  • 后续心跳、扣点、云变量、云函数、内购和工单接口与账号登录完全一致。
  • 授权码由后台按批次生成、保存完整明文并交付代理销售。
POST
/api/client/auth/heartbeat
客户端心跳续期

用于客户端保持在线状态、续期会话并获取最新授权状态。建议按软件配置的 heartbeatInterval 定时调用。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/auth/heartbeat

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "activationRequired": false,
    "control": {
      "forceLogout": false,
      "forceUpdate": false,
      "message": ""
    },
    "entitlement": {
      "membershipActive": true,
      "points": 100
    },
    "heartbeatInterval": 60,
    "online": true,
    "serverTime": "2026-06-04T10:00:00+08:00"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
POST
/api/client/auth/logout
客户端退出登录

客户端退出登录

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/auth/logout

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "ok": true
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/me
客户端当前用户信息

客户端当前用户信息

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/me

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "entitlement": {
      "membershipActive": false,
      "points": 0
    },
    "session": {
      "sessionId": "sess_xxx",
      "status": "online"
    },
    "user": {
      "id": 1,
      "username": "demo"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/me/entitlement
客户端当前权益

客户端当前权益

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/me/entitlement

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "activationReason": "membership required",
    "activationRequired": true,
    "entitlement": {
      "expiredAt": null,
      "membership": null,
      "membershipActive": false,
      "membershipLevelId": null,
      "membershipStatus": "none",
      "points": 0,
      "startedAt": null
    }
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/app/config
读取客户端配置

读取客户端配置

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/app/config

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "appId": "8828",
    "billingMode": "time",
    "bindDeviceEnabled": true,
    "bindIpEnabled": false,
    "encryptionMode": "sign_aes",
    "heartbeatInterval": 60,
    "maxDevices": 1,
    "name": "Demo App"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/client/app/version
读取版本信息

读取版本信息

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/app/version

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Query 参数类型必填说明示例
platformstringplatform 可选""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "currentVersion": "1.0.0",
    "forceUpdate": false,
    "minSupportedVersion": "1.0.0"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/client/app/announcement
读取公告

读取公告

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/app/announcement

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "announcement": "维护公告",
    "items": []
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

客户端快捷登录

桌面客户端通过第三方聚合登录完成快捷登录,使用 state/session 隔离并发回调。

POST
/api/client/oauth/start
客户端快捷登录开始

客户端快捷登录开始

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/oauth/start

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
clientVersionstring客户端当前版本号,用于版本检查、日志排查和工单定位。1.0.0
deviceFingerprintstring设备唯一指纹。建议由机器码、硬件信息或安装实例 ID 生成,并保持稳定。machine-guid-or-hardware-fingerprint
deviceNamestring设备名称,会显示在后台设备管理中。Windows PC
typestring第三方登录方式,目前支持 qq、google。qq
请求示例
{
  "agentCode": "A1234567",
  "clientVersion": "1.0.0",
  "deviceFingerprint": "machine-guid-or-hardware-fingerprint",
  "deviceName": "Windows PC",
  "type": "qq"
}
成功响应
{
  "code": "OK",
  "data": {
    "expiresIn": 300,
    "loginUrl": "https://graph.qq.com/oauth2.0/...",
    "oauthSessionId": "oauth_xxx",
    "pollInterval": 2,
    "qrcode": "",
    "type": "qq"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • 客户端打开 loginUrl 让用户登录,然后轮询 /api/client/oauth/status。
GET
/api/client/oauth/status
客户端快捷登录状态轮询

客户端快捷登录状态轮询

认证方式客户端签名
完整 URLhttps://y.auvv.cc/api/client/oauth/status

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""

请求参数

Query 参数类型必填说明示例
oauthSessionIdnumber/string快捷登录会话 ID,由开始快捷登录接口返回,用于轮询状态。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "activationReason": "membership required",
    "activationRequired": true,
    "app": {
      "appId": "8828",
      "billingMode": "time",
      "bindDeviceEnabled": true,
      "bindIpEnabled": false,
      "maxDevices": 1
    },
    "entitlement": {
      "expiredAt": null,
      "membership": null,
      "membershipActive": false,
      "membershipLevelId": null,
      "membershipStatus": "none",
      "points": 0,
      "startedAt": null
    },
    "heartbeat": {
      "interval": 60
    },
    "loginAvailable": true,
    "sessionId": "sess_xxx",
    "status": "success",
    "token": "client-jwt",
    "user": {
      "avatar": "https://thirdqq.qlogo.cn/...",
      "id": 1,
      "nickname": "大白",
      "provider": "qq",
      "status": "active",
      "username": "demo"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • pending 表示用户还没完成第三方登录;success 时返回内容与账号密码登录一致。
  • 返回的 user.avatar 来自聚合登录平台,并会保存到用户第三方账号记录。
GET
/api/client/oauth/callback
聚合登录回调地址

聚合登录回调地址

认证方式聚合登录平台回调
完整 URLhttps://y.auvv.cc/api/client/oauth/callback

请求参数

Query 参数类型必填说明示例
statestring快捷登录状态值,用于绑定本次回调,防止多用户同时登录时串号。""
typestring第三方登录方式,目前支持 qq、google。""
codestring第三方登录 Authorization Code,或卡密兑换时的卡密明文,取决于接口上下文。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "contentType": "text/html",
  "message": "快捷登录成功,可以关闭窗口"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}

对接注意事项

  • 该接口由聚合登录平台跳转调用,客户端不要主动调用。state 由 /api/client/oauth/start 自动生成。

点数扣费

按 featureCode 对某个功能单独扣点,requestId 保证幂等。

POST
/api/client/points/charge
按功能扣点

用于点数收费软件对某个功能单独扣点。requestId 是幂等关键字段,必须由客户端业务侧生成。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/points/charge

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Body 参数类型必填说明示例
featureCodestring点数功能编码,对应后台当前软件配置的扣点功能。ai_generate
payloadobject业务透传 JSON,系统记录并传给云函数或扣点日志,不做固定解释。{"prompt":"hello"}
requestIdstring业务幂等 ID。同一用户同一软件重复提交相同 requestId 不会重复扣点。unique-business-id
请求示例
{
  "featureCode": "ai_generate",
  "payload": {
    "prompt": "hello"
  },
  "requestId": "unique-business-id"
}
成功响应
{
  "code": "OK",
  "data": {
    "duplicate": false,
    "log": {
      "balanceAfter": 99,
      "costPoints": 1,
      "featureCode": "ai_generate"
    },
    "ok": true
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

对接注意事项

  • 只有软件收费方式为 points 时会真实扣点。
  • requestId 在同一软件同一用户下幂等,重复请求不会重复扣点。

卡密兑换

用户在客户端兑换卡密,获得时长、点数或商品规格权益。

POST
/api/client/card/redeem
兑换卡密

兑换卡密

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/card/redeem

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Body 参数类型必填说明示例
codestring第三方登录 Authorization Code,或卡密兑换时的卡密明文,取决于接口上下文。ABCD-EFGH-IJKL
请求示例
{
  "code": "ABCD-EFGH-IJKL"
}
成功响应
{
  "code": "OK",
  "data": {
    "entitlement": {
      "membershipActive": true,
      "points": 130
    },
    "ok": true
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

应用内购

客户端发起应用内支付订单,后台记录原因、金额、用户和设备。

POST
/api/client/iap/orders
创建应用内购订单

用于客户端在软件内发起支付请求。系统只负责创建订单、支付和记账,不自动发放权益。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/iap/orders

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
amountdecimal string支付金额,单位元,必须为正数,最多两位小数,例如 9.90。9.90
businessTypestring业务类型编码,由客户端自定义,例如 custom_feature。custom_feature
descriptionstring支付原因或订单说明,用于后台识别用户为什么付款。用户在软件内发起支付
metadataobject业务扩展 JSON,支付成功后原样保存,系统不自动解释。{"scene":"pro_feature"}
paymentMethodstring支付方式编码,例如 alipay、wxpay、qqpay。不传时使用默认方式或收银台。alipay
subjectstring订单标题,会显示在支付平台和后台订单列表。购买高级功能
请求示例
{
  "agentCode": "A1234567",
  "amount": "9.90",
  "businessType": "custom_feature",
  "description": "用户在软件内发起支付",
  "metadata": {
    "scene": "pro_feature"
  },
  "paymentMethod": "alipay",
  "subject": "购买高级功能"
}
成功响应
{
  "code": "OK",
  "data": {
    "order": {
      "amountCents": 990,
      "businessType": "custom_feature",
      "orderNo": "I202605180001",
      "status": "pending"
    },
    "paymentUrl": "https://pay.example"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

对接注意事项

  • 应用内购只记录支付状态,不自动发放会员、点数或其他权益。
  • 支付成功后客户端查询订单状态并自行处理软件内业务。
GET
/api/client/iap/orders/{orderNo}
查询应用内购订单

查询应用内购订单

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/iap/orders/{orderNo}

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
orderNostring系统订单号。商品订单通常以 P 开头,应用内购订单通常以 I 开头。""
Query 参数类型必填说明示例
sync0|1sync 可选,传 1 时主动同步支付平台状态""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "amountCents": 990,
    "businessType": "custom_feature",
    "orderNo": "I202605180001",
    "paid": true,
    "paidAt": "2026-06-05T10:00:00+08:00",
    "payable": false,
    "paymentMethod": "alipay",
    "providerTradeNo": "202606050001",
    "serverTime": 1780615200,
    "status": "paid",
    "subject": "购买高级功能"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

云变量与云函数

客户端读写云端变量、调用云函数,支持用户级自定义数据。

GET
/api/client/cloud/variables
读取客户端可读云变量

读取客户端可读云变量

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/cloud/variables

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "key": "feature_flags",
      "scope": "app",
      "value": {
        "enabled": true
      }
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/cloud/variables/{key}
按变量名读取单个云变量

用于用户级云端变量读写,例如用户签名、偏好设置、自定义资料等。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/cloud/variables/{key}

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
keystring云变量名称,支持字母、数字、下划线、点和短横线,最长 64 位。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "key": "profile",
    "scope": "user",
    "value": {
      "signature": "hello"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

对接注意事项

  • 同名变量同时存在软件级和用户级时,优先返回当前用户自己的用户级变量。
POST
/api/client/cloud/variables/{key}
创建或写入用户级云变量

用于用户级云端变量读写,例如用户签名、偏好设置、自定义资料等。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/cloud/variables/{key}

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
keystring云变量名称,支持字母、数字、下划线、点和短横线,最长 64 位。""
Body 参数类型必填说明示例
valueobject云变量值,必须是 JSON,可用于保存用户签名、偏好配置等自定义数据。{"signature":"hello","theme":"dark"}
请求示例
{
  "value": {
    "signature": "hello",
    "theme": "dark"
  }
}
成功响应
{
  "code": "OK",
  "data": {
    "key": "settings",
    "scope": "user"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

对接注意事项

  • key 仅允许字母、数字、下划线、短横线和点,最长 64 位。
  • value 必须是 JSON,最大 64KB。
  • 每个用户在每个软件下最多 100 个用户级变量。
DELETE
/api/client/cloud/variables/{key}
删除当前用户自己的用户级云变量

用于用户级云端变量读写,例如用户签名、偏好设置、自定义资料等。

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/cloud/variables/{key}

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
keystring云变量名称,支持字母、数字、下划线、点和短横线,最长 64 位。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "deleted": true,
    "key": "settings"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
POST
/api/client/cloud/functions/{functionCode}/invoke
调用云函数

调用云函数

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/cloud/functions/{functionCode}/invoke

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
functionCodestring云函数编码,对应后台当前软件配置的云函数。""
Body 参数类型必填说明示例
countnumber业务参数。请结合接口说明和请求示例传入。1
textstring业务参数。请结合接口说明和请求示例传入。hello
请求示例
{
  "count": 1,
  "text": "hello"
}
成功响应
{
  "code": "OK",
  "data": {
    "_pointCharge": {
      "costPoints": 1,
      "duplicate": false,
      "featureCode": "ai_generate"
    },
    "ok": true,
    "result": {
      "text": "HELLO"
    }
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

对接注意事项

  • 请求体会作为云函数 input 传入。
  • 云函数绑定点数功能时会在执行前扣点,并把扣点信息注入 _pointCharge。

客户端工单

客户端提交反馈工单、查看工单和补充回复。

POST
/api/client/tickets
提交工单

提交工单

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/tickets

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Body 参数类型必填说明示例
categorystring工单分类,例如 bug、billing、feedback。bug
clientVersionstring客户端当前版本号,用于版本检查、日志排查和工单定位。1.0.0
contentstring工单正文或回复内容。错误描述
prioritystring工单优先级,例如 low、normal、high。normal
titlestring工单标题,简要说明问题。无法登录
请求示例
{
  "category": "bug",
  "clientVersion": "1.0.0",
  "content": "错误描述",
  "priority": "normal",
  "title": "无法登录"
}
成功响应
{
  "code": "OK",
  "data": {
    "id": 1,
    "status": "open"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/tickets
我的工单列表

我的工单列表

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/tickets

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "id": 1,
      "status": "open",
      "title": "无法登录"
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/client/tickets/{id}
工单详情

工单详情

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/tickets/{id}

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
idnumber/string资源 ID,例如工单 ID。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "replies": [],
    "ticket": {
      "id": 1
    }
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
POST
/api/client/tickets/{id}/replies
回复工单

回复工单

认证方式客户端签名 + Bearer client token
完整 URLhttps://y.auvv.cc/api/client/tickets/{id}/replies

请求头

参数类型必填说明示例
X-App-Idstring当前软件的 APPID。每个软件独立,不能跨软件混用。""
X-Timestampint string当前秒级时间戳,用于防止请求被长期重放。""
X-Noncestring每次请求唯一随机串,服务端会记录并拒绝重复 nonce。""
X-SignaturestringHMAC-SHA256(appId + timestamp + nonce + body, appSecret) 的十六进制结果。""
X-Encrypt-Modestring通讯方式。sign 表示只签名;sign_aes 表示 AES-256-GCM 加密请求体后再签名。""
Authorizationstring登录成功后返回的客户端 token,格式为 Bearer <token>。Bearer <client_session_token>

请求参数

Path 参数类型必填说明示例
idnumber/string资源 ID,例如工单 ID。""
Body 参数类型必填说明示例
contentstring工单正文或回复内容。补充说明
请求示例
{
  "content": "补充说明"
}
成功响应
{
  "code": "OK",
  "data": {
    "id": 2
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

软件首页

软件独立首页使用的注册、登录、商品、下单和支付相关接口。

GET
/api/site/bootstrap
加载软件首页配置

加载软件首页配置

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/bootstrap

请求参数

Query 参数类型必填说明示例
slugstringslug 兜底访问时必填""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "app": {
      "billingMode": "time",
      "name": "Demo App"
    },
    "oauth": {
      "enabled": true,
      "loginTypes": [
        "qq",
        "google"
      ]
    }
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
POST
/api/site/auth/register
软件首页注册

软件首页注册

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/auth/register

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
passwordstring用户密码。服务端只保存哈希,不保存明文。123456
usernamestring用户账号。账号全局唯一,但会员、点数、设备、订单等权益按软件隔离。demo
请求示例
{
  "agentCode": "A1234567",
  "password": "123456",
  "username": "demo"
}
成功响应
{
  "code": "OK",
  "data": {
    "token": "site-jwt"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
POST
/api/site/auth/login
软件首页登录

软件首页登录

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/auth/login

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
passwordstring用户密码。服务端只保存哈希,不保存明文。123456
usernamestring用户账号。账号全局唯一,但会员、点数、设备、订单等权益按软件隔离。demo
请求示例
{
  "agentCode": "A1234567",
  "password": "123456",
  "username": "demo"
}
成功响应
{
  "code": "OK",
  "data": {
    "token": "site-jwt"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/site/auth/oauth/start
获取聚合登录跳转地址

获取聚合登录跳转地址

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/auth/oauth/start

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
typestring第三方登录方式,目前支持 qq、google。""
refstringref 可选代理码""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "qrcode": "",
    "type": "qq",
    "url": "https://graph.qq.com/oauth2.0/..."
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/site/auth/oauth/callback
聚合登录回调换取用户信息并登录

聚合登录回调换取用户信息并登录

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/auth/oauth/callback

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
typestring第三方登录方式,目前支持 qq、google。""
codestring第三方登录 Authorization Code,或卡密兑换时的卡密明文,取决于接口上下文。""
agentCodestringagentCode 可选代理码""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "token": "site-jwt"
  },
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/site/products
当前软件商品列表

当前软件商品列表

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/products

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "id": 1,
      "name": "VIP 月卡",
      "priceCents": 990
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
GET
/api/site/payment-methods
当前软件公开支付方式

当前软件公开支付方式

认证方式按域名或 slug 解析软件
完整 URLhttps://y.auvv.cc/api/site/payment-methods

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "methodCode": "alipay",
      "methodName": "支付宝"
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "BAD_REQUEST",
  "data": null,
  "message": "请求参数错误"
}
POST
/api/site/orders
创建软件首页商品订单

创建软件首页商品订单

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/orders

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
Body 参数类型必填说明示例
agentCodestring代理推广码。传入后会尽量建立当前软件下的代理客户归属。A1234567
paymentMethodstring支付方式编码,例如 alipay、wxpay、qqpay。不传时使用默认方式或收银台。alipay
productIdnumber/string软件商品 ID,来自当前软件商品列表。1
请求示例
{
  "agentCode": "A1234567",
  "paymentMethod": "alipay",
  "productId": 1
}
成功响应
{
  "code": "OK",
  "data": {
    "order": {
      "orderNo": "P202605180001",
      "status": "pending"
    },
    "paymentUrl": "https://pay.example"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

代理前台

代理前台使用的申请、推广、订单、佣金和提现接口。

GET
/api/site/agent/profile
查询代理身份

查询代理身份

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/profile

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "isAgent": true,
    "link": "https://site/admin/app/demo?ref=A1234567"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
POST
/api/site/agent/apply
申请成为代理

申请成为代理

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/apply

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "agentCode": "A1234567",
    "status": "active"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/site/agent/dashboard
代理统计

代理统计

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/dashboard

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": {
    "customers": 3,
    "salesCents": 19900,
    "withdrawableCents": 1200
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/site/agent/orders
推广订单

推广订单

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/orders

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "orderNo": "P202605180001",
      "status": "paid"
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
GET
/api/site/agent/commissions
佣金流水

佣金流水

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/commissions

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
该接口没有 JSON Body。仍需按认证方式携带请求头或 Query 参数。
请求示例
null
成功响应
{
  "code": "OK",
  "data": [
    {
      "commissionCents": 300,
      "status": "available"
    }
  ],
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}
POST
/api/site/agent/withdraw
提交提现申请

提交提现申请

认证方式Bearer site token
完整 URLhttps://y.auvv.cc/api/site/agent/withdraw

请求参数

Query 参数类型必填说明示例
slugstring软件访问标识。绑定域名访问时可不传,通过 /app/:slug 或 API 兜底访问时传入。""
Body 参数类型必填说明示例
accountNamestring提现收款人姓名。张三
accountNostring提现收款账号。account@example.com
accountTypestring提现收款账号类型,例如 alipay、wechat、bank。alipay
amountCentsdecimal string金额,单位分,例如 1000 表示 10.00 元。1000
请求示例
{
  "accountName": "张三",
  "accountNo": "account@example.com",
  "accountType": "alipay",
  "amountCents": 1000
}
成功响应
{
  "code": "OK",
  "data": {
    "id": 1,
    "status": "pending"
  },
  "message": "success"
}
失败响应
{
  "code": "UNAUTHORIZED",
  "data": null,
  "message": "missing or invalid token"
}

支付回调

支付平台服务器异步通知接口,用于订单验签和交付。

GET/POST
/api/payment/notify/epay
易支付异步回调

易支付异步回调

认证方式易支付 RSA 签名
完整 URLhttps://y.auvv.cc/api/payment/notify/epay

请求参数

Body 参数类型必填说明示例
moneydecimal string支付平台回调金额,单位元。9.90
out_trade_nostring本系统生成的商户订单号。P202605180001
signstring支付平台 RSA 签名,服务端用平台公钥验签。base64-rsa-signature
sign_typestring签名类型,当前为 RSA。RSA
timestampstring支付平台签名时间戳。1721206072
trade_nostring支付平台订单号。202605180001
trade_statusstring支付平台交易状态,成功时应为 TRADE_SUCCESS。TRADE_SUCCESS
请求示例
{
  "money": "9.90",
  "out_trade_no": "P202605180001",
  "sign": "base64-rsa-signature",
  "sign_type": "RSA",
  "timestamp": "1721206072",
  "trade_no": "202605180001",
  "trade_status": "TRADE_SUCCESS"
}
成功响应
{
  "text": "success"
}
失败响应
{
  "text": "fail"
}

对接注意事项

  • 支付平台可能追加字段,验签时会自动忽略 sign 和 sign_type 并按 ASCII 排序。

SDK 示例

示例只封装签名请求,业务接口仍按上面的路径和参数调用。生产环境建议把 appSecret、aesKey 做混淆和保护,不要明文暴露在易反编译的位置。

JavaScript / TypeScript
async function auvvRequest(baseUrl, appId, appSecret, path, payload, token = "") {
  const body = JSON.stringify(payload || {});
  const timestamp = Math.floor(Date.now() / 1000).toString();
  const nonce = crypto.randomUUID().replaceAll("-", "");
  const data = new TextEncoder().encode(appId + timestamp + nonce + body);
  const key = await crypto.subtle.importKey("raw", new TextEncoder().encode(appSecret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
  const sig = await crypto.subtle.sign("HMAC", key, data);
  const signature = [...new Uint8Array(sig)].map(b => b.toString(16).padStart(2, "0")).join("");
  const res = await fetch(baseUrl + path, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-App-Id": appId,
      "X-Timestamp": timestamp,
      "X-Nonce": nonce,
      "X-Signature": signature,
      "X-Encrypt-Mode": "sign",
      ...(token ? { Authorization: "Bearer " + token } : {})
    },
    body
  });
  return await res.json();
}
Go
func AuvvRequest(baseURL, appID, appSecret, path string, payload any, token string) (*http.Response, error) {
	body, _ := json.Marshal(payload)
	timestamp := strconv.FormatInt(time.Now().Unix(), 10)
	nonce := strings.ReplaceAll(uuid.NewString(), "-", "")
	mac := hmac.New(sha256.New, []byte(appSecret))
	mac.Write([]byte(appID + timestamp + nonce + string(body)))
	signature := hex.EncodeToString(mac.Sum(nil))

	req, err := http.NewRequest(http.MethodPost, baseURL+path, bytes.NewReader(body))
	if err != nil { return nil, err }
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-App-Id", appID)
	req.Header.Set("X-Timestamp", timestamp)
	req.Header.Set("X-Nonce", nonce)
	req.Header.Set("X-Signature", signature)
	req.Header.Set("X-Encrypt-Mode", "sign")
	if token != "" { req.Header.Set("Authorization", "Bearer "+token) }
	return http.DefaultClient.Do(req)
}
PHP
function auvv_request($baseUrl, $appId, $appSecret, $path, $payload, $token = '') {
    $body = json_encode($payload, JSON_UNESCAPED_UNICODE);
    $timestamp = strval(time());
    $nonce = bin2hex(random_bytes(16));
    $signature = hash_hmac('sha256', $appId . $timestamp . $nonce . $body, $appSecret);
    $headers = [
        'Content-Type: application/json',
        'X-App-Id: ' . $appId,
        'X-Timestamp: ' . $timestamp,
        'X-Nonce: ' . $nonce,
        'X-Signature: ' . $signature,
        'X-Encrypt-Mode: sign'
    ];
    if ($token !== '') $headers[] = 'Authorization: Bearer ' . $token;
    $ch = curl_init($baseUrl . $path);
    curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true]);
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result, true);
}
Python
import time, json, hmac, hashlib, secrets, requests

def auvv_request(base_url, app_id, app_secret, path, payload, token=""):
    body = json.dumps(payload or {}, ensure_ascii=False, separators=(",", ":"))
    timestamp = str(int(time.time()))
    nonce = secrets.token_hex(16)
    signature = hmac.new(app_secret.encode(), (app_id + timestamp + nonce + body).encode(), hashlib.sha256).hexdigest()
    headers = {
        "Content-Type": "application/json",
        "X-App-Id": app_id,
        "X-Timestamp": timestamp,
        "X-Nonce": nonce,
        "X-Signature": signature,
        "X-Encrypt-Mode": "sign",
    }
    if token:
        headers["Authorization"] = "Bearer " + token
    return requests.post(base_url + path, data=body.encode("utf-8"), headers=headers).json()
C#
static async Task<string> AuvvRequest(HttpClient http, string baseUrl, string appId, string appSecret, string path, string body, string token = "") {
    var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
    var nonce = Guid.NewGuid().ToString("N");
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(appSecret));
    var bytes = Encoding.UTF8.GetBytes(appId + timestamp + nonce + body);
    var signature = Convert.ToHexString(hmac.ComputeHash(bytes)).ToLowerInvariant();
    using var req = new HttpRequestMessage(HttpMethod.Post, baseUrl + path);
    req.Content = new StringContent(body, Encoding.UTF8, "application/json");
    req.Headers.Add("X-App-Id", appId);
    req.Headers.Add("X-Timestamp", timestamp);
    req.Headers.Add("X-Nonce", nonce);
    req.Headers.Add("X-Signature", signature);
    req.Headers.Add("X-Encrypt-Mode", "sign");
    if (!string.IsNullOrEmpty(token)) req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
    return await (await http.SendAsync(req)).Content.ReadAsStringAsync();
}
Java
public static String auvvRequest(String baseUrl, String appId, String appSecret, String path, String body, String token) throws Exception {
    String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
    String nonce = UUID.randomUUID().toString().replace("-", "");
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
    byte[] digest = mac.doFinal((appId + timestamp + nonce + body).getBytes(StandardCharsets.UTF_8));
    StringBuilder signature = new StringBuilder();
    for (byte b : digest) signature.append(String.format("%02x", b));

    HttpRequest.Builder builder = HttpRequest.newBuilder()
        .uri(URI.create(baseUrl + path))
        .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
        .header("Content-Type", "application/json")
        .header("X-App-Id", appId)
        .header("X-Timestamp", timestamp)
        .header("X-Nonce", nonce)
        .header("X-Signature", signature.toString())
        .header("X-Encrypt-Mode", "sign");
    if (token != null && !token.isEmpty()) builder.header("Authorization", "Bearer " + token);
    return HttpClient.newHttpClient().send(builder.build(), HttpResponse.BodyHandlers.ofString()).body();
}
C++
// 依赖 OpenSSL 计算 HMAC,HTTP 请求可用 libcurl、cpp-httplib、Qt Network 等库发送。
std::string hmacSha256Hex(const std::string& message, const std::string& secret) {
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int len = 0;
    HMAC(EVP_sha256(), secret.data(), (int)secret.size(),
         reinterpret_cast<const unsigned char*>(message.data()), message.size(), digest, &len);
    std::ostringstream out;
    for (unsigned int i = 0; i < len; ++i) out << std::hex << std::setw(2) << std::setfill('0') << (int)digest[i];
    return out.str();
}

Headers buildAuvvHeaders(const std::string& appId, const std::string& appSecret, const std::string& body, const std::string& token) {
    std::string timestamp = std::to_string(std::time(nullptr));
    std::string nonce = makeRandomHex(16);
    std::string signature = hmacSha256Hex(appId + timestamp + nonce + body, appSecret);
    Headers headers;
    headers["Content-Type"] = "application/json";
    headers["X-App-Id"] = appId;
    headers["X-Timestamp"] = timestamp;
    headers["X-Nonce"] = nonce;
    headers["X-Signature"] = signature;
    headers["X-Encrypt-Mode"] = "sign";
    if (!token.empty()) headers["Authorization"] = "Bearer " + token;
    return headers;
}
Rust
use hmac::{Hmac, Mac};
use reqwest::Client;
use serde_json::Value;
use sha2::Sha256;
use uuid::Uuid;

type HmacSha256 = Hmac<Sha256>;

pub async fn auvv_request(base_url: &str, app_id: &str, app_secret: &str, path: &str, payload: Value, token: Option<&str>) -> reqwest::Result<String> {
    let body = payload.to_string();
    let timestamp = chrono::Utc::now().timestamp().to_string();
    let nonce = Uuid::new_v4().simple().to_string();
    let mut mac = HmacSha256::new_from_slice(app_secret.as_bytes()).unwrap();
    mac.update(format!("{}{}{}{}", app_id, timestamp, nonce, body).as_bytes());
    let signature = hex::encode(mac.finalize().into_bytes());
    let mut req = Client::new()
        .post(format!("{}{}", base_url, path))
        .header("Content-Type", "application/json")
        .header("X-App-Id", app_id)
        .header("X-Timestamp", timestamp)
        .header("X-Nonce", nonce)
        .header("X-Signature", signature)
        .header("X-Encrypt-Mode", "sign")
        .body(body);
    if let Some(token) = token { req = req.header("Authorization", format!("Bearer {}", token)); }
    req.send().await?.text().await
}
易语言
// 伪代码,按你的 HTTP 支持库替换“网页_访问”函数。
body = 到文本 (JSON_生成 (payload))
timestamp = 到文本 (取现行时间戳 ())
nonce = 文本_取随机字符串 (32)
message = appId + timestamp + nonce + body
signature = 编码_HMAC_SHA256_HEX (message, appSecret)

headers = 创建文本字典 ()
headers ["Content-Type"] = "application/json"
headers ["X-App-Id"] = appId
headers ["X-Timestamp"] = timestamp
headers ["X-Nonce"] = nonce
headers ["X-Signature"] = signature
headers ["X-Encrypt-Mode"] = "sign"
如果 (token ≠ "") 则 headers ["Authorization"] = "Bearer " + token

response = 网页_访问 (baseUrl + path, 1, body, headers)
返回 (response)

通用错误码

错误码含义客户端处理建议
BAD_REQUEST参数错误检查请求参数、金额格式、云变量 key、Body JSON。
UNAUTHORIZED签名失败、token 缺失或过期重新计算签名或重新登录。
FORBIDDEN业务规则拒绝检查设备封禁、在线超限、点数不足、会员状态等。
NOT_FOUND资源不存在检查订单号、工单 ID、云变量 key、云函数编码。
CONFLICT资源冲突或幂等冲突检查重复注册、重复兑换、重复 requestId。
SERVER_ERROR服务端异常查看后台日志或联系管理员。