javascript — Войти через Amazon говорит, что пользователь не согласился, но у него есть — Alexa SMAPI

Я пытаюсь получить список навыков в моем аккаунте разработчика Alexa, используя API управления навыками (SMAPI).

У меня есть следующий HTML / Javascript:

<BODY>
<a href id="LoginWithAmazon">
<img border="0" alt="Login with Amazon" src="https://images-na.ssl-images-amazon.com/images/G/01/lwa/btnLWA_gry_312x64.png" width="156" height="32" />
</a>
<div id="amazon-root"></div>
<script type="text/javascript">
var client_id = "<client id>";
window.onAmazonLoginReady = function() {
amazon.Login.setClientId(client_id);
};
(function(d) {
var a = d.createElement('script'); a.type = 'text/javascript';
a.async = true; a.id = 'amazon-login-sdk';
a.src = 'https://api-cdn.amazon.com/sdk/login1.js';
d.getElementById('amazon-root').appendChild(a);
})(document);

document.getElementById('LoginWithAmazon').onclick = function() {
options = {
scope : 'profile postal_code alexa::ask:skills:readwrite alexa::ask:models:readwrite alexa::ask:skills:test',
interactive: 'always',
response_type: 'code'
};
amazon.Login.authorize(options, '<login page url>');
return false;
};
</script>
</BODY>

Который затем вызывает страницу входа, чтобы получить соответствующий токен доступа:

$grant_type = 'authorization_code';
$client_id = $GLOBALS['client_id']; //your client id
$client_secret = $GLOBALS['client_secret']; //your client secret

$data = array(
"grant_type"=>"authorization_code",
"code" => $code,
"client_id"=> $client_id,
"client_secret"=> $client_secret
);
$postvars = '';
foreach($data as $key=>$value) {
$postvars .= $key . "=" . $value . "&";
}
$ch = curl_init('https://api.amazon.com/auth/o2/token');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded;charset=UTF-8'));
$result = curl_exec($ch);
curl_close($ch);
$result_arr = json_decode($result, true);
if (isset($result_arr['error']) == true){ //there was an error obtaining the auth token
var_dump($result);
die('Error: There was an error authenticating with Amazon. Can you please start over again? Click <a href="index.php">here</a> to start again.');
}
return $result_arr;

Я могу использовать access_token в $ result_arr для получения информации о профиле, но когда я использую его для получения списка навыков:

// exchange the access token for list of skills
$c = curl_init('https://api.amazonalexa.com/v0/skills/');
curl_setopt($c, CURLOPT_HTTPHEADER, array('Authorization: ' . $access_token));
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_VERBOSE, 1);
curl_setopt($c, CURLOPT_POST, 1);

$r = curl_exec($c);
curl_close($c);
var_dump($r);

я получил Пользователь не дал согласие на эту операцию

Я должен упустить что-то простое здесь. У меня сложилось впечатление, что объем в первоначальном запросе: profile postal_code alexa::ask:skills:readwrite alexa::ask:models:readwrite alexa::ask:skills:test было бы достаточно, чтобы дать доступ. Я подтвердил, что учетная запись Amazon показывает приложение, имеющее доступ к вышеуказанным разрешениям.

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]