【发布时间】:2019-10-11 13:03:33
【问题描述】:
我使用 PHP 和 Apple 的 App Store Connect API 获得了 401/未授权的 JTW 回报。
使用 php 7.1.3,我尝试了各种库和原始 php(代码如下)。我很确定标头和有效负载都很好,问题是使用我从 Apple 下载的 p8 私钥文件对其进行签名。我已经四次检查了孩子、ISS 和私钥文件。
// Create token header as a JSON string
$header = json_encode([
'typ' => 'JWT',
'alg' => 'ES256',
'kid' => '1234567980'
]);
// Create token payload as a JSON string
$payload = json_encode([
'iss' => '12345678-1234-1234-1234-123456789012',
'exp' => time()+60*10, // 20 minute max allowed
'aud' => 'appstoreconnect-v1'
]);
$base64UrlHeader = rtrim(strtr(base64_encode($header), '+/', '-_'), '=');
$base64UrlPayload = rtrim(strtr(base64_encode($payload), '+/', '-_'), '=');
$privateKey = openssl_pkey_get_private('file://'.resource_path('/assets/AppleKey_1234567980.p8'));
$signature = '';
openssl_sign("$base64UrlHeader.$base64UrlPayload", $signature, $privateKey, 'sha256');
// Encode Signature to Base64Url String
$base64UrlSignature = rtrim(strtr(base64_encode($signature), '+/', '-_'), '=');
// Create JWT
$jwt = "$base64UrlHeader.$base64UrlPayload.$base64UrlSignature";
当我通过 curl 将其提交给 Apple 时,我得到一个 401/未授权的详细信息“身份验证凭据丢失或无效”,没有更具体的信息。
有没有人在 PHP 中使用过 Apple 的 App Store Connect API - 谷歌搜索很少,我找不到任何结果。
【问题讨论】: