鉴权方式
所有需鉴权的接口都使用 HMAC-SHA256 签名校验。每次请求需要携带以下 5 个 HTTP 头:
重要:Secret 仅在创建密钥时一次性展示,请妥善保存。如遗失请到「个人中心 → API 密钥」吊销后重新创建。
请求头
| Header | 说明 | 必填 |
|---|---|---|
X-JNQJ-Key |
密钥 ID(公开部分,以 jk_ 开头) |
是 |
X-JNQJ-Secret |
密钥 Secret(私密部分,以 sk_ 开头) |
是 |
X-JNQJ-Timestamp |
当前 Unix 时间戳(秒),须在 5 分钟内有效 | 是 |
X-JNQJ-Nonce |
随机字符串(建议 8-32 位),用于防重放 | 是 |
X-JNQJ-Signature |
签名值,见下方算法 | 是 |
X-Idempotency-Key |
幂等键(仅写接口)。同一键 10 分钟内重复请求返回首次结果 | 可选 |
签名算法
签名公式:
signature = HMAC-SHA256(
data = key_id + timestamp + nonce,
secret = your_secret
)
PHP 实现示例:
<?php
$keyId = "jk_xxxxxxxxxxxxxxxx";
$secret = "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$timestamp = time();
$nonce = bin2hex(random_bytes(8));
$signature = hash_hmac("sha256", $keyId . $timestamp . $nonce, $secret);
$headers = [
"X-JNQJ-Key: " . $keyId,
"X-JNQJ-Secret: " . $secret,
"X-JNQJ-Timestamp: " . $timestamp,
"X-JNQJ-Nonce: " . $nonce,
"X-JNQJ-Signature: " . $signature,
];
安全机制
5 分钟时间窗:时间戳偏差超过 300 秒的请求将被拒绝。
IP 白名单:可在密钥创建时配置允许的 IP 列表(每行一个)。
Scope 隔离:每个密钥需指定权限范围(query / collection / refund)。
速率限制:默认 60 次/分钟,超过返回 429。
幂等性:写接口支持 X-Idempotency-Key,重复请求安全。
审计追踪:所有 API 调用均记录到审计日志,可追溯到操作者、IP、时间。