API веб-моментальных снимков Apple Maps работает только периодически - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь использовать веб-моментальные снимки от Apple Maps:

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

У меня есть немного кода PHP, который я использую для создания необходимой подписи.

<?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-адрес возвращает следующее:

{"error":{"message":"Not Authorized","details":[]}}

Однако, если я сгенерирую еще несколько URL-адресов,с точно такими же данными (каждый раз получаются немного разные подписи), эти URL не будут работать либо .

Но, в конце концов, если я попробую несколькобольше раз, в конечном итоге один из URL будет работать, и вернет снимок PNG.

Что еще страннее - после того, как я найду работающий URL, все более ранние URL, которые раньше возвращали ошибки, теперь также работают!

Итак, я не думаю, что это обязательно ошибка в коде, потому что после половиныдюжина или около того испытаний, это неизбежно сработает.

Я думал, что это может быть что-то странное в методе openssl_sign, но я могу воспроизвестиЭто точно такое же поведение с реализацией подписи JavaScript, использующей https://kjur.github.io/jsrsasign/api/index.html.

По сути, API, кажется, работает только для 1 из каждых 5-6 подписанных запросов, что делает его довольно непригодным для использования.

Есть идеи?

...