• .NET 微信开发之 获取用户数据


    通过微信接口获取用户信息主要分为以下几个步骤:

    a、获取公众号的access_token

    b、通过查询所有用户OPenid接口获取所有用户。

    string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token;

    c、通过获取用户openid,然后通过openid获取用户数据

    d、把用户信息添加到数据库中。

    1、参数化查询以及添加用户信息到数据库方法

     public void AddToDataBase(UserJson userInfo)
            {
                using (SqlConnection conn = new SqlConnection(connStrings))
                {
                    conn.Open();
                    // openid, subscribe, nickname, sex, language, city, province, country, headimgurl, subscribetime, remark="";
                    string cmdText = @"insert into UserInfo values(@openid,@subscribe,@nickname,@sex,@language,@city,
                    @province,@country,@headimgurl,@subscribetime,@remark)";
                    SqlCommand cmd = new SqlCommand(cmdText, conn);
                    cmd.Parameters.AddWithValue("@openid",userInfo.openid);
                    cmd.Parameters.AddWithValue("@subscribe",userInfo.subscribe );
                    cmd.Parameters.AddWithValue("@nickname",userInfo.nickname);
                    cmd.Parameters.AddWithValue("@sex", userInfo.sex);
                    cmd.Parameters.AddWithValue("@language",userInfo.language );
                    cmd.Parameters.AddWithValue("@city", userInfo.city);
                    cmd.Parameters.AddWithValue("@province",userInfo.province);
                    cmd.Parameters.AddWithValue("@country", userInfo.country);
                    cmd.Parameters.AddWithValue("@headimgurl",userInfo.headimgurl);
                    cmd.Parameters.AddWithValue("@subscribetime",userInfo.subscribe_time);
                    cmd.Parameters.AddWithValue("@remark", userInfo.remark);
                    int res = cmd.ExecuteNonQuery();
                }
            }

    2、通过Openid调用微信接口获取用户数据

     public void GetUserInfo(string openid)
            {
                string url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
                string result = HttpGet(url, "");
                // json 反序列化为对象
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                UserJson UserInfo = serializer.Deserialize<UserJson>(result);  //通过这种方法反序列化,不出因为出现特殊字符而出错
                AddToDataBase(UserInfo);
            }

    3、获取所有openid

      string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token;
                    string openidList = HttpGet(url, "");
                    List<string> list = new List<string>();
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    UserListJsonResult result = serializer.Deserialize<UserListJsonResult>(openidList); //通过这种方法,反序列化成功
                  //  UserListJsonResult result = JsonHelper.GetObjFromJson<UserListJsonResult>(openidList);

    4、添加用户数据到数据库所需的类

     /// <summary>
            /// 获取关注用户列表的Json结果
            /// </summary>
            public class UserListJsonResult
            {
                /// <summary>
                /// 关注该公众账号的总用户数
                /// </summary>
                public int total { get; set; }
    
                /// <summary>
                /// 拉取的OPENID个数,最大值为10000
                /// </summary>
                public int count { get; set; }
    
                /// <summary>
                /// 列表数据,OPENID的列表
                /// </summary>
                public OpenIdListData data { get; set; }
    
                /// <summary>
                /// 拉取列表的后一个用户的OPENID
                /// </summary>
                public string next_openid { get; set; }
            }
    
            /// <summary>
            /// 列表数据,OPENID的列表
            /// </summary>
            public class OpenIdListData
            {
                /// <summary>
                /// OPENID的列表
                /// </summary>
                public List<string> openid { get; set; }
            }
    
    
            /// <summary>
            /// 高级接口获取的用户信息。
            /// 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID
            /// (加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。
            /// 公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
            /// </summary>
            public class UserJson
            {
                /// <summary>
                /// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
                /// </summary>
                public string subscribe { get; set; }
    
                /// <summary>
                /// 用户的标识,对当前公众号唯一
                /// </summary>
                public string openid { get; set; }
    
                /// <summary>
                /// 用户的昵称
                /// </summary>
                public string nickname { get; set; }
    
                /// <summary>
                /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
                /// </summary>
                public string sex { get; set; }
    
                /// <summary>
                /// 用户的语言,简体中文为zh_CN
                /// </summary>
                public string language { get; set; }
    
                /// <summary>
                /// 用户所在城市
                /// </summary>
                public string city { get; set; }
    
                /// <summary>
                /// 用户所在省份
                /// </summary>
                public string province { get; set; }
    
                /// <summary>
                /// 用户所在国家
                /// </summary>
                public string country { get; set; }
    
                /// <summary>
                /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
                /// </summary>
                public string headimgurl { get; set; }
    
                /// <summary>
                /// 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
                /// </summary>
                public string subscribe_time { get; set; }
    
                public string remark { get; set; }
            }
  • 相关阅读:
    基于windows server 2016和sqlserver 2016 AlwaysOn的群集配置
    Mysql基于Mysql Cluster+MysqlRouter的集群部署方案
    阿里云ECS部署Redis主备哨兵集群遇到的问题
    Informix数据库配置与连接
    Linux系统中Redis和Tomcat的PID文件路径设置
    Linux端口映射,80端口映射到8080端口
    Tomcat优化配置
    Tomcat配置自定义JAVA环境
    VMware虚拟机系统无法使用桥接联网
    PostgreSQL远程访问设置
  • 原文地址:https://www.cnblogs.com/luoyangcn/p/4391173.html
Copyright © 2020-2023  润新知