微信硬件平台开发
本文记录在开发微信硬件平台种种的坎坷,为什么说坎坷呢?其实微信硬件平台开发并不难,难就难在开发文档有点keng,对此不敢恭维。本项目使用的设备是直连SDK的有线设备,如果是蓝牙或者wifi设备,本文并没有解释如何接入微信,下面将一一掀开微信硬件开发的面纱,解释整个开发流程以及有坑的地方。
一、整体框架:
本项目使用的是硬件设备直连SDK,官方的解释是“
微信硬件平台为设备提供直连数据通道,设备可以通过直连SDK直接接入微信硬件服务器,打通设备到云端的通道”。左图是被许多人吐槽过的,也是我遇到的大坑,其实这个图并没有错,流程确实是这样,用微信提供的H5面板是可以直接控制直连设备的。如果不用微信提供的H5面板,并且需要调用openapi(一组用于和设备交互的API),那么整个项目流程就多了一步:微信客户端-->设备云服务器-->微信硬件云-->设备。
二、微信客户端开发:
在项目中,使用的是H5开发,也可以用微信提供的H5面板来改造。众所周知,html运行在客户端,数据通过restful接口与服务器交互,这里主要是post,关键的是服务器这一环节是怎样实现。
三、服务器端:
这里所说的服务器是自己搭建的,并不是微信硬件服务器,这个要区分好。本项目服务器环境是Linux+Nginx+Php+Mysql,接下来就是调用openapi了,微信硬件开发文档其实写得挺清楚的,主要就是设备查询GET,设备控制SET和设备主动上报NOTIFY。
当在微信设置了服务器地址时,微信的数据都是通过json传过来,而不是xml,下面以设备查询GET为例子:
<span style="white-space:pre"> </span>$url = "https://api.weixin.qq.com/hardware/mydevice/platform/get_device_status?access_token=" . $access_token;//改为您的token
$operation_status = array (
"status" => 1
);
$post_data = array (
"device_type" => $device_type,//您的设备类型
"device_id" => $device_id,//您的设备id
"services" => array (
"operation" => $operation_status //必需的功能项
),
"user" => $openid,
"data" => ""
);
$data = json_encode ( $post_data );//处理完就可以post上去了
{“error_code”: 0,“error_msg”: “ok”}
的时候,那么恭喜你,你post的数据正确了。如果不是,那就看看error_code是什么了,再看开发文档来解决问题了。
还有set和notify都是同样的道理,这里就不贴代码了。同时要注意的是微信所提供的API并不是所有的都是无限次调用的,例如accesstoken就只有2000次/天等等,所以这些有限制的东东就要保存好,避免重复调用浪费次数和消耗服务器资源。
四、设备端:
设备端是Linux设备,主要实现start()以及三个回调函数,应该没有什么大问题,这里要注意的是devicelicence、deviceid、qrticket这三个东东要保存好,因为设备授权是有限额的,申请了但是没有保存到数据库就浪费了。五、总结:
本文只关注与整个开发流程,其中一些小细节(设备绑定、设备授权)等等没有提及到,以后可能会更新,如有错误的地方欢迎指出,转载请注明出处。