微信硬件平台(八) 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)
效果展示 实现原理 1. html结构: <div id="contain"> <span id="share">分享</span ...
- CSS3动画属性:变形(transform)
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix. 语法 t ...
- RabbitMQ 环境搭建
安装基础环境 yum install net-tools yum install yum yum install gcc glibc-devel make ncurses-devel openssl- ...
- Python函数式编程(二):常见高级函数
一个函数的参数中有函数作为参数,这个函数就为高级函数. 下面学习几个常见高级函数. ---------------------------------------------------------- ...
- Kotlin入门(28)Application单例化
Application是Android的又一大组件,在App运行过程中,有且仅有一个Application对象贯穿应用的整个生命周期,所以适合在Application中保存应用运行时的全局变量.而开展 ...
- Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础
原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...
- SQL学习总结-思维导图
- springboot 学习之路 6(定时任务)
目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...
- 《node.js权威指南》读书笔记
第一章 node.js介绍 非阻塞型I/O机制 当在访问数据库取得搜索结果的时候,在开始访问数据库之后,数据库返回结果之前,存在一段等待时间. 在传统的单线程处理机制中,在执行了访问数据库的代码之后, ...
- 批量修改所有服务器的dbmail配置
最近遇到这样一个案例,需要修改所有SQL Server的Database Mail的SMTP,原来的SMTP为10.xxx.xxx.xxx, 现在需要修改为192.168.xxx.xxx, 另外需要规 ...