php专区

 首页 > php专区 > PHP应用 > 开放平台 > .NET微信开发之 获取用户数据 - 微信公众平台开发

.NET微信开发之 获取用户数据 - 微信公众平台开发

分享到:
【字体:
导读:
         [导读] 通过微信接口获取用户信息主要分为以下几个步骤:a、获取公众号的access_tokenb、通过查询所有用户OPenid接口获取所有用户。string url = https: api weixin qq com cgi-bin user get?access_token=...

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

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(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 list = new List();
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                UserListJsonResult result = serializer.Deserialize(openidList); //通过这种方法,反序列化成功
              //  UserListJsonResult result = JsonHelper.GetObjFromJson(openidList);

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

 /// 
        /// 获取关注用户列表的Json结果
        /// 
        public class UserListJsonResult
        {
            /// 
            /// 关注该公众账号的总用户数
            /// 
            public int total { get; set; }

            /// 
            /// 拉取的OPENID个数,最大值为10000
            /// 
            public int count { get; set; }

            /// 
            /// 列表数据,OPENID的列表
            /// 
            public OpenIdListData data { get; set; }

            /// 
            /// 拉取列表的后一个用户的OPENID
            /// 
            public string next_openid { get; set; }
        }

        /// 
        /// 列表数据,OPENID的列表
        /// 
        public class OpenIdListData
        {
            /// 
            /// OPENID的列表
            /// 
            public List openid { get; set; }
        }


        /// 
        /// 高级接口获取的用户信息。
        /// 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID
        /// (加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。
        /// 公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
        /// 
        public class UserJson
        {
            /// 
            /// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
            /// 
            public string subscribe { get; set; }

            /// 
            /// 用户的标识,对当前公众号唯一
            /// 
            public string openid { get; set; }

            /// 
            /// 用户的昵称
            /// 
            public string nickname { get; set; }

            /// 
            /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
            /// 
            public string sex { get; set; }

            /// 
            /// 用户的语言,简体中文为zh_CN
            /// 
            public string language { get; set; }

            /// 
            /// 用户所在城市
            /// 
            public string city { get; set; }

            /// 
            /// 用户所在省份
            /// 
            public string province { get; set; }

            /// 
            /// 用户所在国家
            /// 
            public string country { get; set; }

            /// 
            /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
            /// 
            public string headimgurl { get; set; }

            /// 
            /// 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
            /// 
            public string subscribe_time { get; set; }

            public string remark { get; set; }
        }

分享到:
微信支付——入门篇(转掌眼) - 微信公众...
公众号支付有2种支付方式:   JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付。商户网页前端通过使用微信提供的 JS API,调用微信支付模块。这种方式,适合 需要在商户网页进行选购下单的购买流程。   Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链...
微信红包系统设计 优化 - 微信公众平台...
微信红包系统设计 & 优化 浏览次数:151次 腾讯大讲堂 2015年04月02日 字号: 大 中 小 分享到:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多0     编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10.1亿次,系...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……