此前,关于Microduino如何同OneNet平台交互我已经写了一个系列,想了解的可以点击此链接:http://blog.csdn.net/wobeatit/article/details/77985333进一步了解。关于使用PHP和OneNet平台的交互,实际上比硬件方面的交互要简单些,所以接下来的讲解会比较粗糙。
上传数据
首先附上上传数据的php源码,此段代码我主要使用curl函数来构造HTTP报文,与OneNET平台交互。
在这里应注意的是,curl函数需要在php.ini的配置文件中打开:
<?php
//php post数据到onenet平台
$url = 'http://api.heclouds.com/devices/*****/datapoints?type=3';//*****处填写自己的设备ID号
$header[]="api-key:************"; //填写自己的api-key号
$content = "{\"a\":20}";//向OneNET发送的数据JSON格式
function post($url, $header, $content)
{
$ch= curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//TRUE-->将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //启用时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_POST, true);//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
if(curl_exec($ch) === false) //curl_error()返回当前会话最后一次错误的字符串
{
die("Curlerror: ".curl_error($ch));
}
$response= curl_exec($ch);//获取返回的文件流
curl_close($ch);
return $response;
}
$output = post($url,$header,$content);
$output_array = json_decode($output,true);
print_r($output_array);
?>
再附上在之前的博客中提到的与OneNET平台交互的HTTP报文格式:
POST/devices/*****/datapoints?type=3HTTP/1.1
api-key:****************
Host:api.heclouds.com
Connection:close
Content-Length:23
{“a”:20}
对比可发现,使用curl函数表示HTTP报文时,实际上就是拼接出了HTTP报文形式。
获取数据
从OneNet获取数据,实际上要比发送数据代码编写更为简单,先附上源码:
<?php
$header[]="api-key:*********";//此处写成自己的API-KEY值
$url="http://api.heclouds.com/devices/******/datastreams/**";/*获取数据流为**的数据值,注意此处设备ID号以及申请获取的数据流ID号都应根据自己的OneNet平台设备ID号,希望获取的数据流ID号进行更改*/
//用于获取从OneNet平台返还的数据
function get($url, $header)
{
//1.初始化,创建一个新cURL资源
$ch=curl_init();
//2.设置URL和相应的选项
curl_setopt($ch,CURLOPT_URL,$url);//需要获取的URL地址,也可以在curl_init()函数中设置
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);//启用时会将头文件的信息作为数据流输出
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch,CURLOPT_HEADER,0);//启用时会将头文件的信息作为数据流输出。
if(curl_exec($ch)=== false) //curl_error()返回当前会话最后一次错误的字符串
{
die("Curlerror: ".curl_error($ch));
}
$response =curl_exec($ch);//获取返回的文件流
curl_close($ch);
return $response;
}
$output=get($url,$header);
$output_array=json_decode($output,true);
print_r($output_array);
/*
print_r($output_array["data"]["update_at"]);
print_r($output_array["data"]["current_value"]);
*/
?>
贴上之前博客中提到的向OneNet平台发送数据的完整HTTP报文格式:
GET/devices/***/ datastreams/aHTTP/1.1
api-key:*************
Host:api.heclouds.com
Connection:close
可以发现php实现获取数据其实是同发送数据一样,利用curl函数实现了获取数据的HTTP请求报文的拼接。