微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用“用苹果登录”中的令牌查询苹果音乐api 我对选项 B 的尝试

如何解决使用“用苹果登录”中的令牌查询苹果音乐api 我对选项 B 的尝试

上下文

我正在尝试制作从用户 Apple 帐户获取姓名和电子邮件并将歌曲或艺术家放入他的库中的网络服务。

为了将歌曲添加到库中,我发现了这个 apple-music-api。图书馆。要代表用户提出请求,您需要使用 user token 库请求 Apple MusicKit JS

为了获取用户的姓名和电子邮件,我使用了这个使用 oauth2 client 功能signin with Apple

问题

A 使用苹果音乐套件...我无法查询任何用户个人资料数据。至少我似乎找不到任何例子或任何文档。是否有可能使用此路由获取用户电子邮件和姓名?

B 使用 Apple oauth 流程登录时,我收到一个包含姓名和电子邮件的访问令牌。但是我不能使用令牌来查询苹果音乐 api。似乎他们的范围仅限于名称和电子邮件……并且似乎不存在音乐 api 或相关的范围。是否有可能获得可以在音乐 api 上使用的用户令牌?

C 是否有任何其他可能性可以在不要求用户在 Apple 上登录两次(一次用于电子邮件,一次用于将歌曲推送到他的音乐库)的情况下完成此操作

我对选项 B 的尝试


// $leeway is needed for clock skew
Firebase\JWT\JWT::$leeway = 60;


$provider = new League\OAuth2\Client\Provider\Apple([
    'clientId'          => 'com.myapp.www','teamId'            => 'team.id',// 1A234BFK46 https://developer.apple.com/account/#/membership/ (Team ID)
    'keyFileId'         => 'key.id',// 1ABC6523AA https://developer.apple.com/account/resources/authkeys/list (Key ID)
    'keyFilePath'       => dirname(__FILE__) . '/AuthKey_key.id.p8',// __DIR__ . '/AuthKey_1ABC6523AA.p8' -> Download key above
    'redirectUri'       => PLUGIN_URL . 'callback-apple-music.PHP',]);


if (isset($_POST['code'])) {

    if (empty($_POST['state']) ||  !isset($_COOKIE['apple-oauth2state']) || ($_POST['state'] !== $_SESSION['apple-oauth2state'])) {

        unset($_COOKIE['apple-oauth2state']);
        exit('Invalid state');
    } else {

        try {
            // Try to get an access token (using the authorization code grant) via signin_with_apple
            /** @var AppleAccesstoken $token */
            $token = $provider->getAccesstoken('authorization_code',[
                'code' => $_POST['code']
            ]);

            $access_token = $token->getToken();
            

            // create an client for api.music.apple 
            $tokenGenerator = new PouleR\AppleMusicAPI\AppleMusicAPITokenGenerator();
            $jwtToken = $tokenGenerator->generateDeveloperToken(
                'team.id','key.id',dirname(__FILE__) .'/AuthKey_key.id.p8'
            );
            // create a developer token again
            $curl = new \Symfony\Component\HttpClient\CurlHttpClient();
            $client = new PouleR\AppleMusicAPI\apiclient($curl);
            $client->setDeveloperToken($jwtToken);

            $api = new PouleR\AppleMusicAPI\AppleMusicAPI($client);
            $api->setMusicUserToken($access_token);
            
            // This endpoint needs authorisation 
            $result = $api->getAllLibraryPlaylists(); //https://api.music.apple.com/v1/me/library/playlists?offset=0&limit=25
            
            echo '<pre>';
            print_r($result);
            echo '</pre>';
            // wp_redirect($redirect_url);
            exit;
        } catch (Exception $e) {
            echo '<pre>';
            print_r($e);
            echo '</pre>';
            
        }
    }
}


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。