Я пытаюсь использовать веб-моментальные снимки от 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 подписанных запросов, что делает его довольно непригодным для использования.
Есть идеи?