微信硬件平台(八) 3 ESP8266向微信服务器请求设备绑定的用户
https://api.weixin.qq.com/device/get_openid?access_token=自己申请微信token&device_type=gh_e93c1b3098b9&device_id=gh_e93c1b3098b9_dae1c2072212185c

ESP8266代码实现
#include <ESP8266WiFi.h> const char* ssid = "HUAWEI-H3VBKZ";
const char* password = "13991320169" //-1; const char* host = "api.weixin.qq.com"; void setup() {
Serial.begin(115200);
delay(10); // We start by connecting to a WiFi network Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); WiFi.begin(ssid, password); //works! while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
} Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} void loop() {
delay(10000); Serial.print("connecting to ");
Serial.println(host); // Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) { //works!
Serial.println("connection failed");
return;
} // We now create a URI for the request
String url = "/device/get_openid";
url += "?access_token=";
url +="19_PwEib-mFrCmjdMfhehHgRJXF9TUEUr8ewWDUBAgbQUOojVjwg3lGXD3ei73O1blBZvOWqXwxTSM4kLUJru1ZFFQy8-6yL1a7hhhFZp-huEIJSGLhmbvbsKdIbo_hB8GiRmQiYnuhdtr1l1z3MNKgAAAGHE";// 有效期2个小时
url += "&device_type=";
url += "gh_e93c1b3098b9";
url += "&device_id=";
url += "gh_e93c1b3098b9_dae1c2072212185c"; // Serial.print("Requesting URL: ");
// Serial.println(url); // This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(600);
//处理返回信息
String line = client.readStringUntil('\n');
while (client.available() > 0) {
line += client.readStringUntil('\n');
line +='\n';
}
Serial.println(line);
client.stop(); Serial.println();
Serial.println("closing connection");
}
改进版本
自动将获取得到的用户ID组分割成数组逐一保存
#include <ESP8266WiFi.h>
#include <ArduinoJson.h> /* {
"errcode": 42001,
"errmsg": "access_token expired"
} */
#define WEIXIN_TOKEN "19_uIzAk_rDxS4CLZoAk5016hvXmrjGw-jnH3zPQnZwnZhcw_H7PpfQvWl2KX4vZtl5ykxCJKiRk5ED-rSZs88g-cvq2qkHFKEwSh8ga_phKkg8VNfJbf_u8oB2R7cGhksmBUXpukZ6UhyM729BWXYhAIAPQR"
#define PRODUCT_TYPE "gh_e93c1b3098b9"
//#define PRODUCT_ID "gh_e93c1b3098b9_dae1c2072212185c"
#define PRODUCT_ID "gh_e93c1b3098b9_cc8c4f4cd693972f" #define host "api.weixin.qq.com"
#define httpPort 80
#define ssid "HUAWEI-H3VBKZ"
#define password "13991320168" void setup() {
Serial.begin(115200);
delay(10); // We start by connecting to a WiFi network Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
} Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} /*
功能:5-0 请求设备绑定的用户ID
输入:
String UESRID 微信用户ID
String CONTENT 要发送的内容
输出: 无
*/ /* "errcode":42001,"errmsg":"access_token expired"} {
"open_id": [
"ognVI6JsmBGd7lxYTZY4GH29LcNg",
"ognVI6GpDeseo6Qe_S7hGPgwlt8E",
"ognVI6CC8_HsPH5zgydb-PZFmxqU",
"ognVI6FxhqhGVuGhsZbmDyutgsMQ"
],
"resp_msg": {
"ret_code": 0,
"error_info": "ok"
}
} */ String RequestUserId(){
Serial.println("/**************************************************/");
Serial.println("5 request userID! "); Serial.print("connecting to ");
Serial.println(host); // Use WiFiClient class to create TCP connections
WiFiClient client; if (!client.connect(host, httpPort)) { //works!
Serial.println("connection failed");
return "fail";
} // We now create a URI for the request
String url = "/device/get_openid";
url += "?access_token=";
url += WEIXIN_TOKEN;
url += "&device_type=";
url += PRODUCT_TYPE;
url += "&device_id=";
url += PRODUCT_ID; // This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(600);
Serial.println();
//处理返回信息
String line = client.readStringUntil('\n');
while (client.available() > 0) {
line += client.readStringUntil('\n');
line +='\n';
}
// Serial.println(line);
client.stop(); if(line.indexOf("access_token")>0){
Serial.println("access_token expired");
return "fail";
} //datStart = s.indexOf(timesign) + strlen(timesign); if(line.indexOf("open_id")>0){
//{"open_id":["ognVI6JsmBGd7lxYTZY4GH29LcNg","ognVI6GpDeseo6Qe_S7hGPgwlt8E","ognVI6CC8_HsPH5zgydb-PZFmxqU","ognVI6FxhqhGVuGhsZbmDyutgsMQ"],"resp_msg":{"ret_code":0,"error_info":"ok"}
int datebegin= line.indexOf("{");
// int dateend=line.length();
int dateend=line.lastIndexOf("}");
String datajson=line.substring(datebegin,dateend); Serial.println(datajson);
return datajson;
}
else{
Serial.println("fail");
return "fail";
} Serial.println();
Serial.println("closing connection \n");
} /*
功能:5-1 对用户ID组进行解析拆分
输入:
String json 用户ID组 "ognVI6JsmBGd7lxYTZY4GH29LcNg","ognVI6GpDeseo6Qe_S7hGPgwlt8E","ognVI6CC8_HsPH5zgydb-PZFmxqU","ognVI6FxhqhGVuGhsZbmDyutgsMQ",
String json_ruselt[] 拆分存放的数组
int sizejson 拆分存放的数组大小 默认10
输出: 成功返回1
*/ bool RequestUserId_json(String json,String json_ruselt[],int sizejson){ // if(json.length()<1){return 0;}
// DynamicJsonDocument jsonBuffer(json.length());
// deserializeJson(jsonBuffer, json);
// JsonObject root = jsonBuffer.as<JsonObject>();
//
// String ueserid1 = root[String("open_id")][0];
// String ueserid2 = root[String("open_id")][1];
// String ueserid3 = root[String("open_id")][2];
// String ueserid4 = root[String("open_id")][3];
// Serial.println();
// Serial.println(ueserid1);
// Serial.println(ueserid2);
// Serial.println(ueserid3);
// Serial.println(ueserid4); int datebegin= json.indexOf("[")+1;
int dateend=json.indexOf("]");
String datajson=json.substring(datebegin,dateend);
datajson= datajson+','; // Serial.println(datajson); /*
ognVI6JsmBGd7lxYTZY4GH29LcNg dongdong
ognVI6GpDeseo6Qe_S7hGPgwlt8E
ognVI6CC8_HsPH5zgydb-PZFmxqU
ognVI6FxhqhGVuGhsZbmDyutgsMQ */
int i=0;
while(datajson.length()>0){
int idbegin=0;
int idend=datajson.indexOf(",");
String id=datajson.substring(idbegin,idend);
id=id.substring(1,id.length()-1); if(i<sizejson){
json_ruselt[i]=id;
i++;} // Serial.println(id);
datajson=datajson.substring(idend+1,datajson.length());
} return 1;
} void loop() {
delay(10000);
String json= RequestUserId(); // 得到用户ID组
String json_ruselt[10]; // 解析的存放数组
bool user_num_ok= RequestUserId_json(json,json_ruselt,10);
if(!user_num_ok) return;
else{
for(int i=0;i<10;i++){
if(json_ruselt[i]!="")
Serial.println(json_ruselt[i]);
}
} }
微信硬件平台(八) 3 ESP8266向微信服务器请求设备绑定的用户的更多相关文章
- 微信硬件平台(八) 3-0ESP8266向微信服务器请求设备绑定的用户
1调试助手 请求URL: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=自己微信ID&a ...
- 微信硬件平台(九) 自己的服务器从微信获取token并保存txt
1安装crontab: yum install crontabs 说明: service crond start //启动服务 service crond stop //关闭服务 service cr ...
- 微信硬件平台(一) 公众号 ESP8266 Arduino LED
微信硬件平台 本文目的,使用微信公众号控制ESP8266的LED开和关.进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备.给两个关键的总教程参考. 官网教程 微信硬件平台 微 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...
- java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器
jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中. jsapi_ticket获取 要获取jsapi_ticket可以使用如下的方法 String jsapi_ticket ...
- java微信开发(wechat4j)——access_token中控服务器实现
access_token是与微信服务器交互过程中的一个凭证,每次客户服务器主动与微信服务器通信都需要带上access_token以确认自己的身份.wechat4j内部封装了对access_token的 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 微信硬件平台(七) 设备控制控制面板-网页sokect-mqtt长连接
给微信硬件设备添加我们自己的控制面板. 主要问题: 1 要保证长连接,这样面板可以实时交互阴间设备,http一次性的连接模式通信不行. 面板必须是网页化的,网页就可以操作交互.不用APP和小程序. 2 ...
随机推荐
- css优先级计算规则——权重
一.css的优先级 当对同一个元素设置相同的多个声明时,会按照优先级的高低选择应用哪种声明. <style> #id{ color:red; } p{ color:blue; } < ...
- DEM山体阴影原理以及算法具体解释
山体阴影原理以及算法具体解释 山体阴影基本原理: 山体阴影是假想一个光源在某个方向和某个太阳高度的模拟下.用过临近像元的计算来生成一副0-255的灰度图. 一.山体阴影的主要參数: 1. 太阳光线的 ...
- WebStorm File Watchers配置将.less文件编译后的.css输出至指定目录
Arguments:其实是命令行输入“lessc file.less file.css”后者指定路径 Output Paths to refresh:刷新changed后.css文件
- Testlink1.9.17使用方法(第一章 前言)
第一章 前言 QQ交流群:585499566 一.Testlink主要功能: 测试项目管理 测试需求管理 测试用例管理 测试计划的制定 测试用例对测试需求的覆盖管理 测试用例的执行 大量测试数据的度量 ...
- Oracle笔记----oracle数字类型number自增
创建序列 create sequence seq_student start increment maxvalue nominvalue nocycle nocache; 创建触发器 create o ...
- mssql sqlserver避免sql脚本中出现除零错误的方法分享
摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...
- Spring MVC HelloWorld入门及运行机制 (一)
完整的项目案例: springmvc.zip 介绍 SpringMVC是一款Web MVC框架. 它跟Struts框架类似,是目前主流的Web MVC框架之一. 文章通过实例来介绍SpringMVC的 ...
- java使用插件pagehelper在mybatis中实现分页查询
摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件 PageHelper是国内牛人的一个开源项目,有兴趣的可以去看源码,都有 ...
- Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数
一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...
- 平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称AVL树
平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称AVL树 (a)和(b)都是排序二叉树,但是查找(b)的93节点就需要查找6次,查找(a)的93 ...