加载中...

开发者中心 v2.0

欢迎使用幺幺零网络验证。v2.0 版本引入了全新的 DEX 源码级构建引擎多算法安全鉴权,为您提供更专业、更安全的授权管理方案。

全系统北京时间对齐 (UTC+8)

本系统所有到期时间、日志时间、签名校验均自动校准至北京时间,开发者无需考虑服务器时区偏差。

三步快速上线
01
创建应用

在控制台创建您的软件,获取独有的 AppKey 和 AppSecret。

02
选择集成方式

使用我们的全自动构建引擎生成插件,或手动调用 API 接入。

03
配置支付

配置支付宝/微信/易支付,实现卡密自动销售与发货。

安全鉴权机制

幺幺零网络验证 v2.0 采用多维度鉴权,所有 API 请求均受 签名 (Sign)时间戳 (Timestamp)随机数 (Nonce) 的保护。

1. 签名算法说明

根据请求平台的不同,系统会自动适配不同的哈希算法:

  • Lua / 轻量级平台: 使用 MD5 (为了极致的运行速度与精简库体积)。
  • 原生平台 (Android/iOS/PC): 推荐使用 SHA256
Sign = Hash(app_key + app_secret + timestamp + nonce)
Python
Lua
JavaScript
import hashlib
import time
import uuid

app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
timestamp = str(int(time.time()))
nonce = uuid.uuid4().hex[:16] # 16位随机字符串

# 原生平台推荐使用 SHA256
raw = f"{app_key}{app_secret}{timestamp}{nonce}"
sign = hashlib.sha256(raw.encode()).hexdigest()

print(f"Header/Body: timestamp={timestamp}, nonce={nonce}, sign={sign}")
-- Lua 平台签名示例 (MD5)
local app_key = "YOUR_APP_KEY"
local app_secret = "YOUR_APP_SECRET"
local timestamp = tostring(os.time())
local nonce = tostring(math.random(100000, 999999))

-- 需确保已加载 md5 库
local raw = app_key .. app_secret .. timestamp .. nonce
local sign = md5(raw) 
// JS 签名示例
const appKey = "YOUR_APP_KEY";
const appSecret = "YOUR_APP_SECRET";
const timestamp = Math.floor(Date.now() / 1000).toString();
const nonce = Math.random().toString(36).substring(2, 10);

const raw = appKey + appSecret + timestamp + nonce;
// 使用 crypto-js 或原生 SubtleCrypto
const sign = CryptoJS.SHA256(raw).toString();

RESTful API 参考

基础请求地址: https://yz.1108.top/api

1. 应用初始化 / 状态同步
POST

应用启动时调用,用于获取配置、公告、版本信息,并可传入卡密执行“一键静默验证”。应用设置了试用分钟数且设备未激活时,首次无卡密调用会创建该设备/平台的试用记录。

试用规则:trial_minutes 为空或 0 表示关闭;正整数表示试用分钟数。每个 app_id + device_id 全平台只启动一次,重装或重复请求不会重置到期时间;试用到期后返回 status=trial_expired,必须使用卡密激活。
/api/init
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "device_id": "string",     // 设备唯一码
    "platform": "lua|ios|android|windows", // 平台标识
    "card_code": "string",     // 可选:静默验证卡密
    "current_version": "string" // 可选:用于版本更新检查
}
关键响应字段:
字段说明
statusactive (正常) | error (未激活/异常)
is_free1 为免费模式,跳过验证;0 为付费模式
trial_minutes应用试用分钟数;空值或 0 表示关闭,正整数表示每个设备/平台首次可试用的分钟数。
statustrial 表示试用中;trial_expired 表示该设备试用已到期,需要卡密激活。
hotupdate包含热更新版本号、下载地址及更新类型 (强制/建议)
popup_diy弹窗 DIY 配置。存在时客户端可按 html_code 自定义显示授权弹窗/授权页;不存在或为空时继续使用默认弹窗。
heartbeat_interval建议心跳间隔(秒)
trial1 表示本次为试用授权。试用客户端必须保持联网,心跳网络失败时应立即停止运行;正式卡密是否允许短时断网由各客户端策略决定。
trial_expired1 表示该设备试用已经用完,重新安装、清缓存、切换平台或修改本地时间不会重置,必须使用卡密激活。
2. 实时心跳监测
POST

在应用运行期间定时调用。若后台冻结卡密或应用关停,此接口将立即返回 code: 1

/api/heartbeat
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "device_id": "string",
    "code": "string",     // 当前使用的卡密
    "platform": "string"  // 建议传入,用于适配签名算法
}
3. 手动激活卡密
POST

当一键验证失败(如新卡密)时,引导用户手动输入卡密并调用此接口进行激活。

/api/activate
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "device_id": "string",
    "code": "string",    // 用户输入的卡密
    "platform": "string" // 建议传入
}
4. 检测热更新/版本
POST

查询指定平台的最新版本信息及热更新下载地址。

/api/check_update
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "platform": "lua|ios|android|windows",
    "current_version": "string"
}
5. 软件内购卡 / 自动激活
NEW

用于客户端在授权弹窗内直接拉取套餐、创建订单、打开支付并查询激活结果。该能力为新增接口,不影响旧版 /api/init/api/activate、发卡网购卡链接和原支付回调。

扣额度规则:支付成功后服务端仍先生成卡密,并通过 create_key(... creator_id=开发者ID) 扣除开发者后台卡密额度;额度不足时不会发卡,也不会自动激活。
接入流程
  1. 调用 /api/shop/packages 获取当前应用可售套餐。
  2. 用户选择套餐后调用 /api/shop/order/create 创建订单。
  3. 客户端打开返回的 pay_url 完成付款。
  4. 服务端收到支付平台异步回调后,自动发卡、扣开发者卡密额度,并按需绑定设备。
  5. 客户端轮询 /api/shop/order/status,当 paid=trueactivated=1 时进入软件。
获取套餐
POST /api/shop/packages
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "platform": "android"
}
{
    "code": 0,
    "msg": "Success",
    "data": [{
        "package_id": 1,
        "name": "月卡",
        "description": "30天授权",
        "duration_type": "month",
        "duration_value": 1,
        "duration_days": 30,
        "duration_minutes": 0,
        "price": 9.9,
        "max_devices": 1
    }]
}
创建订单
POST /api/shop/order/create
{
    "app_key": "string",
    "package_id": 1,
    "device_id": "device_unique_id",
    "platform": "android",
    "pay_type": "alipay",
    "customer_email": "user@example.com",
    "auto_activate": true,
    "return_url": "https://example.com/pay-return",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string"
}
{
    "code": 0,
    "msg": "Success",
    "data": {
        "order_no": "CD202608070930001234",
        "pay_url": "https://pay.example.com/submit.php?...",
        "status_url": "/api/shop/order/status",
        "price": 9.9,
        "package_name": "月卡",
        "auto_activate": 1
    }
}
查询订单状态
POST /api/shop/order/status
{
    "app_key": "string",
    "order_no": "CD202608070930001234",
    "platform": "android",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string"
}
{
    "code": 0,
    "msg": "Success",
    "data": {
        "order_no": "CD202608070930001234",
        "status": "paid",
        "paid": true,
        "package_name": "月卡",
        "price": 9.9,
        "key_code": "ABCD-EFGH-IJKL",
        "auto_activate": 1,
        "activated": 1,
        "activation_message": "已激活",
        "expire_time": "2026-09-07 12:00:00",
        "paid_at": "2026-08-07 09:35:00"
    }
}
状态说明
pending待支付,或支付回调后发卡失败等待再次处理。
processing支付回调正在处理,通常只会短暂出现。
paid已支付并生成卡密;activated=1 表示已自动激活当前设备。
注意:软件端不能自行通知服务器“支付成功”。客户端只负责打开 pay_url 和查询订单状态,发卡和激活以支付平台异步回调为准。
远程变量
兼容新增

远程变量是应用级配置,由后台「应用管理 → 远程变量」设置。客户端每次调用验证接口时读取,不需要重新构建动态库、DEX、DLL 或 Lua 文件。它只返回配置值,不会远程执行代码。

1. 后台配置步骤
  1. 进入「应用管理」,找到目标应用。
  2. 点击该应用操作栏的「远程变量」按钮。
  3. 填写变量名、变量值、类型和平台,勾选「启用」。
  4. 保存后,客户端下一次请求验证接口即可读取新值。
2. 三个接口都会返回
  • POST /api/init:初始化成功或免费模式返回 data.remote_vars
  • POST /api/activate:激活成功返回 data.remote_vars
  • POST /api/check_update:检测更新时返回 data.remote_vars
注意:这些接口仍然必须按原文档传递 app_keytimestampnoncesign。远程变量不是新接口,也不会改变原有签名规则。
3. 返回结构
{
  "code": 0,
  "data": {
    "status": "active",
    "expire_time": "2026-09-20 12:00:00",
    "remote_vars": {
      "maintenance": false,
      "activation_tip": "当前为专业版授权",
      "max_retry": 3,
      "theme": {"color": "blue"}
    }
  }
}

没有配置变量时返回 {}。客户端必须从 data.remote_vars 读取变量;noticepopup_announcement 仍只代表应用公告与弹窗公告,不会被远程变量覆盖。

功能边界:远程变量是独立配置,不等同于公告。请不要依赖变量名 noticepopup_announcement 去改变公告内容;需要改公告请在应用公告/弹窗公告中配置,需要业务开关或提示文本请读取 data.remote_vars
4. 内置行为变量
变量名类型作用
maintenancebool为 true 时显示维护提示,用户确认后退出应用
maintenance_textstring维护提示内容
allow_runbool为 false 时禁止运行,显示 deny_text 后退出
deny_textstring禁止运行提示内容
activation_tipstring首次手动激活成功后的底部低打扰提示
silent_tipstring保存卡密再次启动、静默同步成功后的底部提示
show_remote_varsbool为 true 时额外显示全部变量明细,调试用

Android/iOS 新模板都支持以上规则。变量名未命中内置规则时不会执行代码,只会作为普通配置保留。

5. 类型与填写规则
类型后台填写示例客户端收到的类型
string欢迎使用字符串
int3整数 3
float0.5小数 0.5
booltruefalse布尔值
json{"color":"blue","show_logo":true}JSON 对象
6. 平台匹配规则

平台可选 alliosandroidwindowslua。客户端请求中的 platform 必须与实际平台一致;如果同名变量同时存在,平台专属配置优先于 all。例如 Android 请求优先读取 platform=androidactivation_tip,没有时才读取 allactivation_tip

7. 客户端读取示例
// JavaScript / WebView
const data = response.data || {};
const remote = data.remote_vars || {};
const maintenance = remote.maintenance === true;
const activationTip = typeof remote.activation_tip === "string" ? remote.activation_tip : "";
const maxRetry = Number.isInteger(remote.max_retry) ? remote.max_retry : 3;

if (maintenance) {
  showMessage("系统维护中");
  return;
}
if (activationTip) showMessage(activationTip);
8. 失败兜底与安全要求
  1. 接口请求失败时,继续使用原有授权流程和本地默认值。
  2. remote_vars 不存在、为空或类型不符合预期时,使用默认值。
  3. 不要把 App Secret、支付密钥、数据库密码等敏感信息配置为远程变量。
  4. 不要把远程变量当作可执行代码;平台只下发数据,不执行 Python、Lua、JavaScript 等代码。
模板支持:新版 Android 构建模板会在每次授权成功后用底部低打扰提示单独显示远程变量;Windows/DLL SDK 会保留原始 remote_vars JSON,业务代码可自行解析使用。旧客户端如果没有读取 remote_vars,变量不会自动生效。
6. 接口解绑 (API Unbind)
POST

允许开发者在自己的程序逻辑内触发解绑操作(通常会扣除一定的时长)。

/api/unbind
{
    "app_key": "string",
    "timestamp": "string",
    "nonce": "string",
    "sign": "string",
    "card_code": "string",
    "platform": "string"
}

构建引擎 (v2.0) 说明

DEX & C# 源码级动态构建

幺幺零网络验证 v2.0 突破了传统的二进制占位符替换模式,采用源码级动态构建技术:

  • Android (DEX): 集成 javac + d8 工具链,通过源码注入生成合规 DEX。
  • Windows (EXE): 集成动态 C# 编译 (Stub),支持 Python (PyInstaller) 等复杂 EXE 环境的一键加壳运行,具备极高的隐蔽性与兼容性。
  • 突破限制: 解决服务器地址、AppKey 长度受限问题,支持无限长配置信息注入。

全平台产物支持
Android (.dex / .so / .apk) iOS (.dylib / .framework) Windows (.dll / .exe) Script (.lua)

Lua 脚本集成

幺幺零网络验证为 Lua 脚本(如 GG 脚本)提供了专属的混淆封装器

特性:
  • 变量混淆: 每次构建自动生成随机变量名,防止静态分析。
  • 全功能 UI: 内置登录、购买、客服、公告弹窗逻辑。
  • 换绑支持: 脚本内支持输入 "1" 触发设备解绑流程。
集成方式:

在控制台上传您的原始 Lua 脚本,系统会自动在脚本顶部插入验证核心代码并打包。您的原始代码将被包裹在授权成功的逻辑之后运行。

iOS SDK 接入

支持原生 App (Framework) 和 越狱/注入插件 (Dylib) 两种模式。

1. 自动化构建 (推荐)

在控制台进入“插件构建”,选择 iOS 平台,填入应用信息后即可一键生成已完成授权逻辑封装的 .dylib.framework 文件。

2. 手动集成示例 (Objective-C)
#import <JiubanAuth/JiubanAuth.h>

// 初始化
[[JiubanAuth shared] initWithServerUrl:@"https://yz.1108.top/api" appKey:@"YOUR_APP_KEY"];

// 检查授权
[[JiubanAuth shared] checkStatus:^(BOOL success, NSString *msg) {
    if (success) {
        NSLog(@"授权成功");
    } else {
        // 显示激活界面
    }
}];

Android SDK 接入

支持 Native (SO) 注入和 DEX 源码级构建。

DEX 源码级构建 (v2.0 旗舰特性)

通过构建引擎生成的 Verification.dex,可直接通过 ClassLoader 加载。由于其源码级编译的特性,您可以自定义任何复杂的校验逻辑。

Java 集成示例
// 载入验证类 (假设使用构建引擎生成)
Class<?> authClass = classLoader.loadClass("com.jiuban.Verification");
Method initMethod = authClass.getDeclaredMethod("init", Context.class, String.class);
initMethod.invoke(null, context, "YOUR_CARD_CODE");

Windows 平台接入

幺幺零网络验证为 Windows 平台提供行业领先的一键 EXE 加壳保护 (Stub 模式),旨在实现零门槛接入与极致安全性。

一键 EXE 加壳保护 (Stub 模式)

专为 Python (PyInstaller)C# (Unity/WPF)C++ 等独立 EXE 环境设计的加壳方案。无需修改原程序源码,只需上传 EXE 即可实现:

  • 幻影隐藏释放:原程序以隐藏属性释放运行,退出自动清理,防止用户直接接触 Payload。
  • 环境零冲突:通过共享锁技术(Shared-Lock),完美支持 Python 等复杂程序的动态资源加载。
  • 心跳 Flood 防御:内置高强度心跳频率校验,有效抵御针对服务器的非法请求攻击。
  • 一键热更新:支持云端版本比对,自动下载并静默覆盖安装。
如何使用?

登录后台 -> 插件构建 -> 选择 Windows 平台 -> 上传您的原始 EXE 软件 -> 点击构建。下载后的成品即已包含完整的授权逻辑。

Web / JS SDK

适用于网页应用、H5 游戏或 Electron 应用。

<script src="https://yz.1108.top/static/sdk/organized/html_js/sdk/auth-sdk.js"></script>
<script>
    const auth = new AuthSDK('https://yz.1108.top', 'YOUR_APP_KEY', 'YOUR_APP_SECRET', 'web');
    const deviceId = localStorage.deviceId || (localStorage.deviceId = crypto.randomUUID());

    auth.init(deviceId, 'CARD_CODE', '1.0.0').then(res => {
        if (res.code === 0 && res.data && res.data.status === 'active') {
            console.log('远程变量:', res.data.remote_vars || {});
            alert('欢迎使用!');
        } else {
            alert(res.msg || '验证失败');
        }
    });
</script>
浏览器端会暴露 APP_SECRET,正式生产建议使用 PHP/后端代理签名。完整多平台 SDK 位于 /static/sdk/organized/

错误码说明

Code 描述 建议处理
0 成功 解析 data 字段进入业务流程。
401 AppKey 无效 检查配置的应用识别码是否正确。
403 鉴权失败 1. 检查签名算法;2. 检查客户端系统时间。
1 业务拦截 查看 msg 字段(如:卡密过期、设备冻结、并发受限)。
429 频率受限 API 请求过快,请降低心跳或操作频率。

Webhooks 事件推送

当发生以下重要事件时,服务器将向您配置的 URL 推送 POST 请求:

activation

新设备首次激活成功

unbind

设备解绑成功

Header: X-Webhook-Signature
// 验证推送签名: HMAC-SHA256(secret, body_json)
// 确保数据来源的真实性
系统公告
欢迎使用幺幺零验证平台,现在注册免费使用15天✔你满意了再续费即可✔登陆后有教程✔