只验证授权码、IP、域名、状态、到期时间和次数限制,不读取远程文件,也不执行解密。
API 对接中心
前台公开对接文档。网站授权与搬运解密使用两个独立接口,授权用途不能混用。
两个独立 API
只接受搬运授权码,远程拉取 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 | 搬运解密 | auto、appstore、appstore_v1、appstore_v2。 |
udid | 搬运解密 | 可选,附加到远程软件源请求。 |
未授权返回示例
{
"ok": false,
"code": "LICENSE_SCOPE_NOT_ALLOWED",
"message": "当前 IP 或域名未获得接口授权,请联系管理员开通。",
"detail": "当前授权码用途不允许调用该接口"
}
兼容地址
旧的 /api/docs.php 会自动跳转到本前台文档;旧接口 /api/verify.php 和 /api/decrypt.php 暂时保留兼容,新项目请使用上面的两个独立 API。