【问题标题】:Wink API v2 Hello World in PHPWink API v2 Hello World 在 PHP
【发布时间】:2018-11-03 10:37:26
【问题描述】:

Wink API 目前是第 2 版。

我的问题: 如何通过 PHP 使用 Wink API V2 做一个简单的“Hello World”?

注意事项

  • Wink 使用 PubNub 进行订阅(设备有事件)
  • 使用 OAuth2 标准
  • 网站/登录通常是“骗人的”:(& 登录时会出错:“身份验证失败!”)
  • 您需要申请应用程序 API 密钥才能使用 API。我跟进了一封电子邮件,以便迅速获得批准。
  • 获得批准后,您将获得:客户端 ID、客户端密码和提供帮助的 URL
  • API 网址:https://api.wink.com/...
  • 电子邮件支持:support@wink.zendesk.com(获取应用程序 API 密钥等)
  • OAuth 2:

相关链接

【问题讨论】:

  • 这不是问题。你得到了所有这些链接和tuts。他们没有工作怎么办?您实际尝试过什么?
  • 哈哈!一个多星期,是的。但是我在我们说话的时候发布了一个答案,所以我希望可以为其他人节省这么多时间。我将把它改写成一个问题来安抚......
  • 我没有否决这个问题,因为您努力获取所有这些链接,所以我猜想实际尝试它们也会付出相当大的努力。但是最后一点没有在问题中显示(这就是我问的原因),我可以想象这种明显缺乏努力是如何成为对某人投反对票的理由。幸运的是,你有一个很好的答案来反驳它。 ;-) 另外,请注意asking for upvotes,它通常不受欢迎,可能会产生不利影响。
  • 哈哈,感谢您的诚意和反馈。我删除了我之前的评论,因为它不允许我编辑它。那么,那个赞成 GolexTrol 怎么样 ;) (那是个玩笑!!)老实说,我不知道你一开始是版主还是真正的 trol,然后我看到了你的名字。但我还是不知道!不过你对我很酷 :) 哦,为了记录,当我第一次创建这个“问题”时,是的,我花了很多时间浏览所有链接,但无法让任何“所有管道用胶带粘在一起”工作。很久以后,有了所有这些链接/资源,我就开始了。
  • 我既不是喷子也不是版主,只是像你这样的用户。但有时当我发表一些批评时我会明白这一点,所以也许我应该改名。或者停止评论......不,我也不会这样做:p

标签: php wink


【解决方案1】:

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

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

在您的 http/php 服务器上创建://[YourServer]/wink_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>";
}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2014-10-15
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多