PHP实现Deribit API签名:基于Nonce与Timestamp 参照JS/Python示例
核心问题排查
你当前的PHP代码存在两处核心错误导致签名不符合要求:
- 待签名内容拼接时没有添加官方要求的
\n换行符作为时间戳、nonce、请求数据的分隔符,直接拼接了三个变量 hash_hmac函数默认返回十六进制签名结果,你额外调用bin2hex对结果做了二次转码,最终生成错误的签名值
nonce生成规则
nonce没有强制格式要求,仅需要保证每次请求的nonce值唯一即可,你可以使用随机字符串、毫秒时间戳等任意唯一值。
修正后的PHP代码
// 生成13位毫秒级时间戳,和官方实现逻辑对齐 $timestamp = (string)round(microtime(true) * 1000); // nonce示例:随机8位字符串,你也可以替换为其他唯一值实现 $nonce = bin2hex(random_bytes(4)); // 请求数据为空时保持空字符串即可 $data = ""; // 按官方规则用换行符拼接待签名内容 $signContent = $timestamp . "\n" . $nonce . "\n" . $data; // 生成HMAC-SHA256签名,$accessSecret替换为你的平台密钥 $signature = hash_hmac('sha256', $signContent, $accessSecret); // 统一转为小写,和官方Python实现输出格式对齐 $signature = strtolower($signature);
结果验证
你可以将$timestamp、$nonce都固定为和官方示例一致的值(比如nonce设为abcd),分别用JS、Python、修正后的PHP代码生成签名,三者结果完全一致即代表实现正确。
内容的提问来源于stack exchange,提问作者Davos98
相关产品推荐
相关产品推荐

