You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bókun签名生成遇阻:我遗漏了什么?

对接Bókun Rest API签名生成问题

我正在尝试对接Bókun Rest API,根据官方文档的签名生成规则:将Date、Access key、HTTP method、Path拼接后,结合密钥计算HmacSHA1值再Base64编码。但我用PHP实现时,签名的Base64结果与测试工具不符,尽管SHA1十六进制输出匹配。

我的PHP实现代码如下:

$access_key = 'my_access_key';
$secret_key = 'my_secret_key';
$method = 'POST';
$path = '/activity.json/search?currency=EUR&lang=FI';
$date = '2022-08-31 12:00:00';

$signature_base = $date . $access_key . $method . $path;
$signature = hash_hmac('sha1', $signature_base, $secret_key, true);
$signature_sha1 = sha1($signature_base); // 测试用
$signature_base64 = base64_encode($signature);

echo $signature_base; // 2022-08-31 12:00:00my_access_keyPOST/activity.json/search?currency=EUR&lang=FI
echo $signature_sha1; // 3e81b830958602b54419c61070582519460c36c6
echo $signature_base64; // 5q22t52R0qHk43ssRHs6kyLBSiw=

测试工具输出的Base64为PoG4MJWGArVEGcYQcFglGUYMNsY=,我尝试了hash_hmac第四个参数为true和false的情况都不对,请问问题出在哪里?


问题排查与解决

核心问题出在路径参数的编码处理和签名基串的细节匹配上,具体修正点如下:

  • 路径中的&需还原为原始&
    你代码里的$path使用了HTML实体编码的&,但签名计算必须使用原始的URL参数分隔符&,这会直接改变签名基串的内容,导致HMAC结果偏差。修正后的路径应为:

    $path = '/activity.json/search?currency=EUR&lang=FI';
    
  • 严格核对签名基串的拼接顺序
    再次确认Bókun官方文档的拼接顺序,部分API会要求按HTTP method → Path → Date → Access key的顺序拼接,而非你当前的Date → Access key → HTTP method → Path。顺序错误会直接导致HMAC结果不匹配。

  • 验证密钥的原始格式
    如果官方提供的secret_key是Base64编码格式,需要先解码再传入hash_hmac,否则计算出的HMAC会错误:

    $secret_key = base64_decode('your_base64_secret_key');
    
  • 确保日期格式完全一致
    检查测试工具使用的日期格式是否和你代码中的完全相同,比如是否带时区、空格是否为半角等,任何细微的格式差异都会影响最终签名结果。

按上述步骤修正后,重新计算签名即可匹配测试工具的输出。

内容的提问来源于stack exchange,提问作者Simon Josef Kok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:09:29