$wxObj0 = new class_wechat_sdk($wx_options); $deviceid = $_POST["subscribe_deviceid"]; $openid = $_POST["subscribe_openid"]; echo "Input Device ID = " . $deviceid . "<br>"; echo "Input User ID = " . $openid . "<br>"; //Step1:刷新Token echo "<br><H2>微信硬件工作环境即将开始......<br></H2>"; $wxObj = new class_wx_IOT_sdk(WX_APPID, WX_APPSECRET); //实验Token是否已经被刷新 echo "<br>测试最新刷新的Token=<br>" . "{$wxObj->access_token}" . "<br>"; // Step2 设备状态查询 echo "<br>查询设备状态 <br>"; var_dump($wxObj->getstat_qrcodebyDeviceid($deviceid)); // Step3 用户绑定设备查询 echo "<br>查询用户绑定状态 <br>"; $result = $wxObj->getstat_qrcodebyOpenId($openid); var_dump($result); echo "<br>Device_List = <br>"; $devicetype = $result["device_list"][0]["device_type"]; var_dump($result["device_list"]); // Step4 微信云强制绑定设备 $result = $wxObj->compel_bind($deviceid, $openid); echo "<br>微信云强制绑定设备结果 <br>"; var_dump($result); // Step5 第三方数据库绑定 $wxDbObj = new class_mysql_db(); echo "<br>第三方云数据库查询设备结果 <br>"; var_dump($wxDbObj->db_BleBoundInfo_query($openid)); echo "<br>第三方云数据库强绑设备结果 <br>"; var_dump($wxDbObj->db_BleBoundInfo_save($openid, $deviceid, $openid, $devicetype)); //end of tool_main();
public function receive_deviceMessage($data) { $msgType = $data->MsgType; //经过simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)之后,数据已经可以使用指针操作 //一个关键点是,LIBXML_NOCDATA这个选项是否合适 switch ($msgType) { case "device_text": //先推送接受到的设备消息给客服/测试人员的微信界面上 //已经BASE64解码后的数据 //给硬件设备发送回复消息,直接使用客服接口给微信界面 $content = base64_decode($data->Content); $transMsg = "收到设备消息DEVICE_TEXT是: " . $content; $this->send_custom_message($data->OpenID, 'text', $transMsg); //使用API-CURL推送客服微信用户 //发送到L3的比特流还需要被反系列化 $wxL3Obj = new class_L3_Process_Func(); $rev = $wxL3Obj->L3_deviceMsgProcess("device_text", $content, $data->FromUserName, $data->DeviceID); // BASE64编码后,再发送给设备,使用ECHO-XML方式推送微信用户 $tmp = base64_encode($rev); $transMsg = $this->xms_responseDeviceText($data->FromUserName, $data->ToUserName, $data->DeviceType, $data->DeviceID, $data->SessionID, $tmp); break; case "device_event": if ($data->Event == "bind" or $data->Event == "unbind") { //a) 先推送信息给客户/测试人员的微信界面,但考虑到EVENT中详细的内容都是客户推送结果,故而省略以下推送 $inputContent = base64_decode($data->Content); //应该是空包,即$content = '' //b) 再执行绑定解绑存储,以便下一次查询 if ($data->Event == "bind") { $wxDbObj = new class_mysql_db(); //其实,还需要看看是否已经绑定了,否则不应该重新绑定 if ($wxDbObj->db_BleBoundInfo_duplicate($data->FromUserName, $data->DeviceID, $data->OpenID, $data->DeviceType)) { $transMsg = "DEVICE_EVENT重复绑定,不处理"; } else { $transMsg = "DEVICE_EVENT初次绑定成功"; $wxDbObj->db_BleBoundInfo_save($data->FromUserName, $data->DeviceID, $data->OpenID, $data->DeviceType); } //c) 这里还有个假设:解绑来自于用户的操作,Event/Ubscribe和Event_device/Ubind是分离的 //如果解绑逻辑触发跟Unsubscribe是一起的,这个逻辑就要改变 } else { $db_con = new class_mysql_db(); $db_con->db_BleBoundInfo_delete($data->FromUserName); $transMsg = "DEVICE_EVENT解绑"; } $this->send_custom_message($data->OpenID, 'text', $transMsg); //d) 最后执行可能的L3解码,处理后的内容,直接使用echo给微信界面即可 //因为是DEVICE_EVENT事件,设备内传输的L3信息应该是空的,反馈给设备的L3依然保留,留下一个悬念 //反序化及系列化,TBD $wxL3Obj = new class_L3_Process_Func(); $tmp = $wxL3Obj->L3_deviceMsgProcess($data->Event, $inputContent, $data->FromUserName, $data->DeviceID); $tmp = base64_encode($tmp); //使用ECHO-XML方式推送微信用户 $transMsg = $this->xms_responseDeviceEvent($data->FromUserName, $data->ToUserName, $data->Event, $data->DeviceType, $data->DeviceID, $data->SessionID, $tmp); break; } else { $transMsg = $this->xms_responseText($data->FromUserName, $data->ToUserName, "收到非法绑操消息"); } break; default: //设备级的其它消息体 $transMsg = $this->xms_responseText($data->FromUserName, $data->ToUserName, "收到未识别的设备级消息"); break; } //MsgType判定结束 return $transMsg; }