微信硬件平台(八) 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 ...
随机推荐
- idea中查看方法参数;查看类、方法、属性注释
Ctrl+P:查看方法参数Ctrl+Q:查看类.方法.属性注释
- CSS字体样式属性
font-size 字号大小 一般推荐使用相对长度(px ,em),不推荐使用绝对长度(in,cmm,mm,pt) font-family 字体 1.可以同时指定多个字体,中间用英文状态的逗号隔开,英 ...
- [转]JS学习总结-技巧、方法、细节
变量转换 var myVar = "3.14159", str = ""+ myVar,// string类型 int = ~~myVar, // number ...
- CSS样式—— 字体、元素的垂直水平居中
1.CSS样式与HTML中标签属性的区别: 标签的属性是采用 属性名=“属性值” 表示的 CSS样式是采用名值对 属性名:属性值: 表示的 2.内联元素(行内元素)与块元素 (1)内联元素及其特点: ...
- Unity3D手机斗地主游戏开发实战(04)_出牌判断大小
之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...
- springboot 事务管理
添加注解就完事儿了 @Transactional 1,Propagation 事务的传播行为 Propagation.REQUIRED 如果存在事务,就加入,没有的话就创建(默认值) 比如 A 方法 ...
- java排序算法之希尔排序
希尔排序是冲破二次时间屏障的第一批算法之一. 它是通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到最后一趟(比较相邻元素)为止.因此希尔排序也叫缩减增量排序. 希尔排序使 ...
- Python 对服务器返回数据编码进行判断之chardet
对服务器返回数据编码进行判断之chardet by:授客 QQ:1033553122 测试环境 Win764Bit chardet-2.3.0 下载地址1:https://pypi.pytho ...
- VMWare上的ubuntu系统安装VMWare Tools(图文)
一.启动vm,点击这里安装 二.将文件复制到桌面 三.在终端用命令,把文件解压到桌面 四.执行安装命令 sudo ./vmware-install.pl 五.效果图
- Android 应用程序崩溃日志捕捉
程序崩溃是应用迭代中不可避免的问题,即使有着5年或者10年经验的程序猿也无法完全保证自己的代码没有任何的bug导致崩溃,现在有一些第三方平台可以帮助我们搜集应用程序的崩溃,比如友盟,详情如下图 虽然能 ...