我正在尝试设置一些 Google Maps Premier API 操作,为此,我需要对我的网址进行签名以进行身份验证。如果您查看签名示例,可以看到一些 Python、C# 和 Java 代码向您展示如何通过 HMAC-SHA1 进行签名。还有一个示例,以便我可以测试我的 PHP 实现。但是,我似乎无法让它发挥作用。
这是我的代码:
$key = "vNIXE0xscrmjlyV-12Nj_BvUPaw=";
$data = "/maps/api/geocode/json?address=New+York&sensor=false&client=clientID";
$my_sign = hash_hmac("sha1", $data, base64_decode($key));
$my_sign = base64_encode($my_sign);
$valid_sign = "KrU1TzVQM7Ur0i8i7K3huiw3MsA=";
当我运行这个时,我得到一个签名:
ZDRlNGMwZjIyMTA1MWM1Zjk0Nzc4M2NkYjlmNDQzNDBkYzk4NDI4Zg==
这完全不匹配。
我想过的事情:
- 关键是修改后的URL编码格式,所以改变
-
and _
to +
and /
也不起作用
- Python 示例代码确实有效,因此这是一个有效的示例。
- 用 python 而不是 PHP 完全重写我们的代码库(我继承了它)。
你至少有两个问题,
- Google 使用特殊的 URL 安全 Base64。正常的base64_decode不起作用。
- 您需要生成二进制的 SHA1。
尝试这个,
$key = "vNIXE0xscrmjlyV-12Nj_BvUPaw=";
$data = "/maps/api/geocode/json?address=New+York&sensor=false&client=clientID";
$my_sign = hash_hmac("sha1", $data, base64_decode(strtr($key, '-_', '+/')), true);
$my_sign = strtr(base64_encode($my_sign), '+/', '-_');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)