首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apple快照API只间歇工作

Apple快照API只间歇工作
EN

Stack Overflow用户
提问于 2019-10-06 16:57:32
回答 1查看 356关注 0票数 1

我试着用苹果的地图网络快照:

https://developer.apple.com/documentation/snapshots

我有一些PHP代码,用于生成所需的签名。

代码语言:javascript
复制
<?php

$params = array();
if (isset($_GET["center"])) {
    $params[] = "center=" . $_GET["center"];
}
$params[] = "size=640x640";
$params[] = "scale=2";
$params[] = "teamId=<my team ID here>";
$params[] = "keyId=<my maps key here>";

$data = "/api/v1/snapshot?" . implode("&", $params);

$pkeyid = openssl_pkey_get_private("file://<my private key file here>.p8");

$signature = '';
openssl_sign($data, $signature, $pkeyid, 'sha256');

$url = ("https://snapshot.apple-mapkit.com" . $data . "&signature=" . base64_encode($signature));

openssl_free_key($pkeyid);

奇怪的是这..。

通常,生成的URL将返回以下内容:

代码语言:javascript
复制
{"error":{"message":"Not Authorized","details":[]}}

但是,如果我再生成几个具有完全相同数据(每次签名略有不同)的URL,那么这些URL也将无法工作。

但是,最后,如果我再尝试几次,最终中的一个URL将工作,并返回PNG快照。

更奇怪的是--在我找到一个有效的URL之后,所有早期的URL都会返回错误,现在也能工作了!

所以,我不认为它一定是代码中的一个bug,因为经过六次左右的试验,它将不可避免地起作用。

我认为openssl_sign方法可能有些奇怪,但我可以使用JavaScript签名实现,使用https://kjur.github.io/jsrsasign/api/index.html再现这种完全相同的行为。

从本质上说,API似乎只适用于每5-6个签名请求中的一个,这使得它非常不可用。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-26 16:12:05

您所做的每一件事情都按照预期的方式工作,直到实际的请求。

$url = ("https://snapshot.apple-mapkit.com" . $data . "&signature=" . base64_encode($signature));

应:

$url = ("https://snapshot.apple-mapkit.com" . $data . "&signature=" . urlencode(base64_encode($signature)));

这也是你只是偶尔看到成功的原因--签名中的字符以前没有被转移过。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58259445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档