Wink API v2 Hello World в PHP - PullRequest
       21

Wink API v2 Hello World в PHP

0 голосов
/ 03 ноября 2018

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-адреса для помощи
  • API URL: https://api.wink.com/...
  • Поддержка по электронной почте: support@wink.zendesk.com (Получить ключ API приложения и т. Д.)
  • OAuth 2:

Ссылки по теме :

1 Ответ

0 голосов
/ 03 ноября 2018

Информация об этом крайне ограничена, поэтому я отвечу на свой вопрос в надежде помочь другим. (Прошло много времени, так как там не было никакой хорошей информации.) Этот пример имеет пользовательский интерфейс (требуется Wink для входа в систему). Я надеюсь, что кто-то может опубликовать версию без пользовательского интерфейса (для фоновых сценариев и т. Д.).

Это даст вам необработанный вывод json, который вы можете использовать по своему усмотрению. Эта одна php-страница будет первоначально загружена, вы войдете в логин Wink (вам нужна учетная запись на ваших устройствах, если это было неочевидно), после регистрации она вернет вас на эту же страницу с кодом, вызовет токен затем используйте этот токен для получения ресурсов устройства.

Создайте: //[YourServer]/wink_helloworld.php на вашем http / php сервере.

wink_helloworld.php:

<code>//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 "
"; } ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...