问题描述
上下文
我正在尝试制作从用户 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 (将#修改为@)