• 微信硬件平台(八) 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
    " +
                   "Host: " + host + "
    " + 
                   "Connection: close
    
    ");
        delay(600);
        //处理返回信息
        String line = client.readStringUntil('
    ');
        while (client.available() > 0) {
          line += client.readStringUntil('
    ');
          line +='
    ';
        }
        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
    " +
                   "Host: " + host + "
    " + 
                   "Connection: close
    
    ");
        delay(600);
          Serial.println();
        //处理返回信息
        String line = client.readStringUntil('
    ');
        while (client.available() > 0) {
          line += client.readStringUntil('
    ');
          line +='
    ';
        }
      //  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 
    ");
    }
    
    
    
    
    
    /*
    功能: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]);
        }
      }
    
             
    }
    

      

  • 相关阅读:
    mysql存储过程
    Mysql中的触发器
    快速开始、环境搭建、修改包名、新建模块、正式部署
    windows下redis下载安装
    Windows10下mysql 8.0.19 安装配置方法图文教程
    IDEA中安装SVN
    常见页面报错
    Python AttributeError: 'Module' object has no attribute 'STARTF_USESHOWINDOW'
    如何编写一篇高质量的技术博文?学习本文的排名靠前大法
    Linux use apktool problem包体变大GLIBC2.14等问题
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10464065.html
Copyright © 2020-2023  润新知