PHP中的Wink API v2 Hello World

PHP中的Wink API v2 Hello World,php,wink,Php,Wink,Wink API当前在版本2上 我的问题:如何通过PHP使用Wink API V2实现简单的“Hello World” 注释: Wink使用PubNub进行订阅(设备有事件) 使用OAuth2标准 网站/登录通常为“hokey”:(登录时将出错(&W):“身份验证失败!”) 在此处登录:&使用谷歌帐户(或其他) 然后将URL更改为: 有时候你不得不做几次 您需要请求应用程序API密钥才能使用API。我随后发了一封电子邮件,以便迅速获得批准 一旦您获得批准,您将获得:客户ID、客户机密和UR

Wink API当前在版本2上

我的问题:如何通过PHP使用Wink API V2实现简单的“Hello World”

注释

  • Wink使用PubNub进行订阅(设备有事件)
  • 使用OAuth2标准
  • 网站/登录通常为“hokey”:(登录时将出错(&W):“身份验证失败!”)
    • 在此处登录:&使用谷歌帐户(或其他)
    • 然后将URL更改为:
    • 有时候你不得不做几次
  • 您需要请求应用程序API密钥才能使用API。我随后发了一封电子邮件,以便迅速获得批准
  • 一旦您获得批准,您将获得:客户ID、客户机密和URL以提供帮助
  • API URL:
  • 电子邮件支持:support@wink.zendesk.com(获取应用程序API密钥等)
  • OAuth 2:
    • Wink表示使用“授权码授权类型”
    • Dox&示例:
相关链接

  • Wink API:
  • 与此相关的问题:
  • Github示例:(上次更新是在3年前;可能在以前的API版本上)

    • 关于这方面的信息非常有限,因此我将回答自己的问题,希望能帮助他人。(这花了很长时间,因为那里没有任何好的信息。)这个例子有一个用户界面(Wink需要登录)。我希望有人能发布一个非用户界面版本(用于后台脚本等)

      这将为您提供原始json输出,供您随意使用。这一个php页面最初将加载,带您进入Wink的登录(如果这不明显,您需要一个设备帐户),登录后,它将带您返回到同一页面,并带有代码,调用令牌,然后使用该令牌获取设备资源

      在http/php服务器上创建://[YourServer]/wink\u helloworld.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>";
      }
      
      ?>
      
      //确保将此URL添加到Wink开发者门户中!(https://developer.wink.com/clients)
      $redirect_uri=“http://[YourServer]/wink\u helloworld.php”;
      //这是来自Wink开发者门户的
      $client_id=“abcdefg”;
      $wink_oauth_url=”https://api.wink.com/oauth2/token";
      $client_secret=“hijklmnop”;
      $devices\u url=”https://api.wink.com/users/me/wink_devices";
      //需要创建一个状态变量,比如会话id。实际上应该是随机的!!
      $randomstring=“xyzABC123”;
      $state=base64_encode($randomstring);
      /*_____________________________________________________________________________________________________________________________________ */
      echo“Wink Hello World-Show设备”;
      //若我们并没有代码,那个么将用户发送到登录页面
      如果($_GET['code']==null |$_GET['code']==“”){
      回声“;
      返回;
      }
      $code=$_GET['code'];
      //如果我们没有代币,就买一个吧
      if($access_-token==null |$access_-token===“”){
      $access_token=getAccessToken();
      }
      //让我们从我们的设备中获取一些数据!
      getResource($access\u token);
      /*_____________________________________________________________________________________________________________________________________ */
      //领取代币
      函数getAccessToken(){
      全局$wink\u oauth\u url、$code、$client\u secret;
      echo“getAccessToken()使用代码:$Code
      ”; $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$wink_oauth_URL); curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($curl,CURLOPT_头,FALSE); curl_setopt($curl,CURLOPT_POST,TRUE); curl_setopt($curl,CURLOPT_POSTFIELDS,”{ \“客户机密”:“$client\u secret\”, \“授权类型\”:“授权代码\”, \“代码\”:“$code\” }"); curl_setopt($curl,CURLOPT_HTTPHEADER,数组(“内容类型:application/json”); $response=curl\u exec($curl); //var_dump($response); formatResults($response);//调试输出 curl_close($curl); 返回json_decode($response)->access_令牌; } /*_____________________________________________________________________________________________________________________________________ */ //使用我们的代码和令牌获取资源 函数getResource($access\u token){ 全球$devices\uURL; echo“getResource()使用令牌:$access_Token”; $header=array(“授权:承载{$access_token}”); $curl=curl_init(); curl_setopt_数组($curl,数组( CURLOPT_URL=>$devices_URL, CURLOPT_HTTPHEADER=>$header, CURLOPT_SSL_VERIFYPEER=>false, CURLOPT_RETURNTRANSFER=>true )); $response=curl\u exec($curl); curl_close($curl); formatResults($response);//调试输出 } /*_____________________________________________________________________________________________________________________________________ */ //调试格式化输出函数 函数formatResults($json){ 回声“; echo json_encode(json_decode($json),json_PRETTY_PRINT); 回声“; } ?>
      关于这方面的信息非常有限,因此我将回答自己的问题,希望能帮助他人。(这花了很长时间,因为那里没有任何好的信息。)这个例子有一个用户界面(Wink需要登录)。我希望有人能发布一个非用户界面版本(用于后台脚本等)

      这将为您提供原始json输出,供您随意使用。这一个php页面最初将加载,带您进入Wink的登录(如果这不明显,您需要一个设备帐户),登录后,它将带您返回到同一页面,并带有代码,调用令牌,然后使用该令牌获取设备资源

      在http/php服务器上创建://[YourServer]/wink\u helloworld.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>";
      }
      
      ?>
      
      //确保将此URL添加到Wink开发者门户中!(https://developer.wink.com/clients)
      $redirect_uri=“http://[Y