API 对接中心

前台公开对接文档。网站授权与搬运解密使用两个独立接口,授权用途不能混用。

两个独立 API

网站授权 网站授权验证 API POST https://api.p12dz.top/api/website-auth.php
只验证授权码、IP、域名、状态、到期时间和次数限制,不读取远程文件,也不执行解密。
搬运授权 搬运解密 API POST https://api.p12dz.top/api/transfer-decrypt.php
只接受搬运授权码,远程拉取 source_url,自动识别并解密 appstore、appstore_v1、appstore_v2。
网站授权码不能调用搬运解密接口;搬运授权码也不能当作网站授权码使用。

授权总开关说明

管理员可在“后台 → 接口设置”分别控制网站授权和搬运授权。

开关开启
必须提交对应授权码,并继续验证状态、IP、域名、到期时间和调用次数。
开关关闭
该类 API 对所有站点免授权开放;响应中返回 authorization_required=false
关闭搬运授权会让任何站点都能调用远程搬运解密接口,请确认服务器带宽、流量和安全风险后再关闭。

其他网站需要上传哪个文件

下载 PHP 对接包并解压,把下面这个文件上传到需要接入授权的网站:

gx_auth_client.php

推荐放置位置:

/www/wwwroot/客户网站/inc/gx_auth_client.php

API 1:网站授权验证

POSThttps://api.p12dz.top/api/website-auth.php

curl -X POST 'https://api.p12dz.top/api/website-auth.php' \
  -H 'Authorization: Bearer GX-网站授权码' \
  -H 'X-Client-Domain: example.com' \
  -H 'Content-Type: application/json' \
  -d '{"domain":"example.com"}'

PHP 网站入口接入

<?php
require_once __DIR__ . '/inc/gx_auth_client.php';

$auth = new GXAuthClient([
    'server' => 'https://api.p12dz.top',
    'license_key' => '后台创建的网站授权码', // 网站授权总开关关闭时可留空
    'license_scope' => 'website',
    'domain' => $_SERVER['HTTP_HOST'] ?? 'example.com',
]);

$auth->guard(false);
建议把这段放在客户网站主入口 PHP 的最前面。未授权时会显示后台配置的未授权提示。

API 2:搬运解密

POSThttps://api.p12dz.top/api/transfer-decrypt.php

curl -X POST 'https://api.p12dz.top/api/transfer-decrypt.php' \
  -H 'Authorization: Bearer GX-搬运授权码' \
  -H 'X-Client-Domain: sync.example.com' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode":"auto",
    "source_url":"https://source.example.com/appstore.json",
    "udid":""
  }'

PHP 搬运对接

<?php
require_once __DIR__ . '/inc/gx_auth_client.php';

$client = new GXAuthClient([
    'server' => 'https://api.p12dz.top',
    'license_key' => '后台创建的搬运授权码', // 搬运授权总开关关闭时可留空
    'license_scope' => 'transfer',
    'domain' => $_SERVER['HTTP_HOST'] ?? 'sync.example.com',
    'timeout' => 120,
]);

$result = $client->decryptRemote(
    'https://source.example.com/appstore.json',
    '',
    'auto'
);

Go 对接包

Go 对接包仅使用标准库,提供网站授权验证、net/http 中间件和搬运解密客户端。

Go 网站授权验证

client, err := gxauth.New(gxauth.Config{
    Server: "https://api.p12dz.top",
    LicenseKey: "后台创建的网站授权码", // 网站授权总开关关闭时可留空
    Scope: gxauth.ScopeWebsite,
    Domain: "example.com",
})
if err != nil { log.Fatal(err) }
result, err := client.VerifyWebsite(context.Background())
if err != nil { log.Fatal(err) }
fmt.Println(result.Message)

Go 搬运解密

client, err := gxauth.New(gxauth.Config{
    Server: "https://api.p12dz.top",
    LicenseKey: "后台创建的搬运授权码", // 搬运授权总开关关闭时可留空
    Scope: gxauth.ScopeTransfer,
    Domain: "sync.example.com",
    Timeout: 120 * time.Second,
})
if err != nil { log.Fatal(err) }
result, err := client.DecryptRemote(
    context.Background(),
    "https://source.example.com/appstore.json",
    "",
    "auto",
)
if err != nil { log.Fatal(err) }
fmt.Println(result.Data.AppsCount)

请求参数与返回

字段接口说明
Authorization两个接口Bearer 授权码;对应授权总开关开启时必填,关闭时可省略。
X-Client-Domain两个接口域名验证时提交,不带协议和路径。
source_url搬运解密必填,远程加密软件源地址。
mode搬运解密autoappstoreappstore_v1appstore_v2
udid搬运解密可选,附加到远程软件源请求。

未授权返回示例

{
  "ok": false,
  "code": "LICENSE_SCOPE_NOT_ALLOWED",
  "message": "当前 IP 或域名未获得接口授权,请联系管理员开通。",
  "detail": "当前授权码用途不允许调用该接口"
}

兼容地址

旧的 /api/docs.php 会自动跳转到本前台文档;旧接口 /api/verify.php/api/decrypt.php 暂时保留兼容,新项目请使用上面的两个独立 API。