微信硬件平台(八) 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 ...
随机推荐
- Js 转动抽奖实现
一.样本 地址:http://js.zhuamimi.cn/choujiang/index.htm 源码:https://pan.baidu.com/s/15KhesfcLf1WMOom6PhzCjA ...
- Dev、GridControl的模糊查询
/// <summary> /// 设置girid为每一列都模糊搜索 /// </summary> /// <param name="gdv"> ...
- HDU 1527 取石子游戏(威佐夫博弈)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- JS检测浏览器Adobe Reader插件
Web应用中当我们希望向用户显示pdf文档时候,如果用户安装了Adobe Reader之类的pdf阅读器,就可以直接打开文档在浏览器中显示, 但是,当用户没有安装这类软件的时候,自然是打不开的,为了系 ...
- Spring学习之旅(一)极速创建Spring框架java工程项目
编译工具:eclipse 1)创建java工程:Spring_helloworld 2)导入所需jar包: 3)创建一个实体类: public class HelloBeans { private S ...
- 导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误
错误提示:导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误 分析: 看来是因为数据库版本的问题导致的,之前网站MYSQL5. ...
- Ne10编译安装
介绍 NEON,即"ARM Advanced SIMD",是ARM从ARMv7开始提供的高级单指令多数据(SIMD)扩展.它是一种64/128位混合SIMD体系结构.NEON在网上 ...
- MFC 单文档添加按钮
VS 单文档 添加按钮 今天做项目需要在单文档中创建按钮来响应函数,即点击按钮,调用某函数,特此记录. 1. 在XXXView中添加CButton变量,例如 CButton start; 2. 下来就 ...
- 整理一些.net core中的错误代码
在hosting .net core时,有些错误代码并不容易理解. 作为标记,方便查询,这些错误代码可能不会出现在VS的错误查找工具里,也不会出现在错误代码转字符描述的函数里. COR_E_AMBIG ...
- python 冒泡、二分查找
冒泡: import random def _sort(_lst): count = 1 while count < len(_lst): for i in range(0, len(_lst) ...