首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php令牌身份验证苹果存储连接api失败

php令牌身份验证苹果存储连接api失败
EN

Stack Overflow用户
提问于 2020-02-07 10:48:10
回答 1查看 289关注 0票数 1

如下所示,论坛链接参考:

https://forums.developer.apple.com/thread/119705https://forums.developer.apple.com/thread/117754

我尝试使用PHP连接app-store-connect (https://developer.apple.com/documentation/appstoreconnectapi),但每次都出现以下错误:

代码语言:javascript
复制
   stdClass Object

   (

     [errors] => Array

    (

          [0] => stdClass Object

          (

           [status] => 401

           [code] => NOT_AUTHORIZED

           [title] => Authentication credentials are missing or invalid.

           [detail] => Provide a properly configured and signed bearer token, and make sure that it has not expired. Learn more about Generating Tokens for API Requests https://developer.apple.com/go/?id=api-generating-tokens

          )

    )

  )

请检查我的以下代码一次和我的php xammp版本7.4:

代码语言:javascript
复制
date_default_timezone_set("Asia/Kolkata");

$strKey=file_get_contents("./AuthKey_##########.p8");

$strUrl = "https://api.appstoreconnect.apple.com/v1/users";

$dHeader = array("kid" => "##########", "typ" => "JWT");

$strHeader = json_encode($dHeader);

$strBase64Header = base64url_encode($strHeader);

$dPayLoad = array("iss" => "69a#####-####-####-####-############", "exp"=>time()+1200, "aud"=>"appstoreconnect-v1");

$strPayLoad = json_encode($dPayLoad);

$strBase64PayLoad = base64url_encode($strPayLoad);

$strContent = $strBase64Header . '.' . $strBase64PayLoad;

$strAlgName = "sha256";

$strSignature = base64url_encode(hash_hmac($strAlgName, $strContent, $strKey));

$strToken = $strBase64Header . '.' . $strBase64PayLoad . '.' . $strSignature;

$curl = curl_init();

curl_setopt_array($curl, array(

  CURLOPT_URL => "https://api.appstoreconnect.apple.com/v1/users",

  CURLOPT_RETURNTRANSFER => true,

  CURLOPT_ENCODING => "",

  CURLOPT_MAXREDIRS => 10,

  CURLOPT_TIMEOUT => 30,

  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

  CURLOPT_CUSTOMREQUEST => "GET",

  CURLOPT_HTTPHEADER => array(

    "Authorization: Bearer ".$strToken

  ),

));



$response = curl_exec($curl);

$err = curl_error($curl);

curl_close($curl);

echo "<pre>";

if ($err) {

  echo "cURL Error #:" . $err."<br>";

   print_r(json_decode($response));

} else {

  print_r(json_decode($response));

}

function base64url_encode($data) {

  return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');

}

如果我犯了上述错误,请提供详细代码。

EN

回答 1

Stack Overflow用户

发布于 2020-06-05 00:18:56

您正在使用“sha256”算法进行签名,但是are连接API密钥是ES256密钥。更改您的签名算法,或者使用JWT库来简化操作。您可以在jwt.io找到几个php选项。一定要选择一个支持ES256的。

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

https://stackoverflow.com/questions/60111918

复制
相关文章

相似问题

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