Wink API v2 Hello World в PHP
Wink API в настоящее время на версии 2.
Мой вопрос: как вы можете сделать простой "Hello World" с Wink API V2 через PHP?
Примечания:
- Wink использует PubNub для подписки (устройства имеют событие)
- Использует стандарт OAuth2
- Веб-сайт / логин часто "hokey": (& будет ошибка при входе в систему: "Ошибка аутентификации!")
- Войдите здесь: https://developer.wink.com/ и используйте учетную запись Google (или любую другую)
- Затем измените URL на этот: https://developer.wink.com/clients
- Иногда вы должны сделать это пару раз!
- Вам нужно будет запросить ключ API приложения, чтобы использовать API. Я отправил электронное письмо, чтобы быстро его утвердить.
- После того, как вы будете одобрены, вы получите: Идентификатор клиента, Секрет клиента и URL-адреса, чтобы помочь
- URL API: https://api.wink.com/...
- Поддержка по электронной почте: support@wink.zendesk.com (Получить ключ API приложения и т. Д.)
- OAuth 2:
- Wink указывает на использование "Тип предоставления кода авторизации"
- Dox & Example: https://developer.byu.edu/docs/consume-api/use-api/choose-grant-type
Ссылки по теме:
- Wink API: https://winkapiv2.docs.apiary.io/
- Вопросы, связанные с Stackru:
- https://community.home-assistant.io/t/wink-access-token-issue/52197/15
- Пример Github: https://github.com/cbulock/php-wink (Последнее обновление 3 года назад; возможно, в предыдущей версии API)
1 ответ
Информация об этом крайне ограничена, поэтому я отвечу на свой вопрос в надежде помочь другим. (Это заняло много времени, так как там не было никакой хорошей информации.) Этот пример имеет пользовательский интерфейс (требуется Wink для входа в систему). Я надеюсь, что кто-то может опубликовать версию без пользовательского интерфейса (для фоновых сценариев и т. Д.).
Это даст вам необработанный вывод json, который вы можете использовать по своему усмотрению. Эта одна php-страница будет первоначально загружена, вы войдете в Wink (вам нужна учетная запись на ваших устройствах, если это было неочевидно), после регистрации она вернет вас на эту же страницу с кодом, вызовет токен затем используйте этот токен для получения ресурсов устройства.
Создайте: //[YourServer]/wink_helloworld.php на вашем http/php сервере.
wink_helloworld.php:
//Make sure to add this exact URL to your Wink Developer Portal! (https://developer.wink.com/clients)
$redirect_uri = "http://[YourServer]/wink_helloworld.php";
// This is from Wink Developer Portal
$client_id = "abcdefg";
$wink_oauth_url = "https://api.wink.com/oauth2/token";
$client_secret = "hijklmnop";
$devices_url = "https://api.wink.com/users/me/wink_devices";
//need to create a state variable, like a session id. should actually be random tho!!
$randomstring="xyzABC123";
$state = base64_encode($randomstring);
/*_____________________________________________________________________________________________________________________________________ */
echo "<h2>Wink Hello World - Show Devices</h2>";
//If we don't have a code, then send user to login page
if($_GET['code'] == null | $_GET['code'] == ""){
echo "<a href='https://api.wink.com/oauth2/authorize?response_type=code&client_id=".$client_id."&redirect_uri=$redirect_uri&state=".$state."'>Login</a>";
return;
}
$code = $_GET['code'];
//if we dont have a token, lets get one
if($access_token == null | $access_token == ""){
$access_token = getAccessToken();
}
// lets get some data from our devices!
getResource($access_token);
/*_____________________________________________________________________________________________________________________________________ */
// Get token
function getAccessToken() {
global $wink_oauth_url, $code, $client_secret;
echo "<b>getAccessToken()</b> Using Code: $code<br>";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $wink_oauth_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, "{
\"client_secret\": \"$client_secret\",
\"grant_type\": \"authorization_code\",
\"code\": \"$code\"
}");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
$response = curl_exec($curl);
//var_dump($response);
formatResults($response); //debug output
curl_close($curl);
return json_decode($response)->access_token;
}
/*_____________________________________________________________________________________________________________________________________ */
// Get Resource(s) with our code & token
function getResource($access_token) {
global $devices_url;
echo "<b>getResource()</b> Using Token: $access_token<p>";
$header = array("Authorization: Bearer {$access_token}");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $devices_url,
CURLOPT_HTTPHEADER => $header,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true
));
$response = curl_exec($curl);
curl_close($curl);
formatResults($response); //debug output
}
/*_____________________________________________________________________________________________________________________________________ */
//debug formatted output functions
function formatResults($json){
echo "<pre>";
echo json_encode(json_decode($json), JSON_PRETTY_PRINT);
echo "</pre>";
}
?>