PHP cURL调用Binance Pay API报400002签名无效错误如何解决
Binance Pay API 400002 签名错误排查方案
你遇到的是Binance Pay接口标准的签名校验失败错误:
{"status":"FAIL","code":"400002","errorMessage":"Signature for this request is not valid."}
核心问题排查点
- 缺失POST请求体提交:你的代码仅设置了
CURLOPT_POST = 1,但未通过CURLOPT_POSTFIELDS将序列化后的JSON请求体发送给接口,Binance服务器收到空请求体,和你签名时使用的请求体不一致,直接导致签名校验失败。必须添加如下代码:
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_request);
- JSON序列化规则不符合要求:PHP默认
json_encode会自动转义斜杠、Unicode字符,导致生成的JSON字符串和Binance服务端解析的请求体存在差异,签名计算值不匹配。需要在序列化时添加参数:
$json_request = json_encode($request, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- 密钥配置错误:确认
$binance_pay变量为你的Binance Pay商户API密钥的Certificate SN值,$binance_pay_secret为对应API密钥的Secret Key,复制时不要带入前后多余的空格、换行符。 - 服务器时间偏差:Binance要求请求时间戳和服务端时间差不能超过5分钟,需要确认你的服务器已同步NTP网络时间,避免时间偏差导致签名失效。
- Payload拼接规则验证:你当前的Payload拼接规则
$timestamp."\n".$nonce."\n".$json_request."\n"符合官方要求,注意确保所有换行符为LF(\n),不要替换为CRLF(\r\n)。
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

