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

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; }
}

.NET 微信开发之 获取用户数据的更多相关文章

  1. C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

    我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...

  2. 微信获取用户数据后台写法,author2.0认证

    /* 微信授权接口 */ //1.设置路由 router.get('/wechat/userinfo', function(req, res) { var cb = req.query.cb; //设 ...

  3. 微信小程序之用户数据解密(七)

    [未经作者本人同意,请勿以任何形式转载] 经常看到有点的小伙伴在群里问小程序用户数据解密流程,所以打算写一篇关于小程序用户敏感数据解密教程: 加密过程微信服务器完成,解密过程在小程序和自身服务器完成, ...

  4. [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

    因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

  5. UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)

    原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...

  6. onLaunch与onLoad同步获取用户数据

    前言 在开发项目的时候遇到从全局获取用户信息,逻辑是从app.js中的onLauch获取,page页面的onLoad拿到数据填充到页面.遇到的问题是onLauch与onLoad是异步的,没办法从页面判 ...

  7. 微信OAuth授权获取用户OpenId-JAVA(个人经验)【申明:来源于网络】

    微信OAuth授权获取用户OpenId-JAVA(个人经验)[申明:来源于网络] 地址:https://my.oschina.net/xshuai/blog/293458

  8. 英特尔CEO科再奇:尚未发现通过漏洞获取用户数据的行为

    1月9日消息,英特尔CEO科再奇在美国西部时间1月8日举行的2018年CES中发表主题演讲,他在开场时面向产业界谈到了最近报道的安全研究发现.科再奇表示:“在我们开始之前,我想借此机会感谢整个行业,为 ...

  9. 微信小程序 获取用户信息并保存登录状态

    微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml

随机推荐

  1. 堆排序C++实现

    //heap sort //堆排序能够分为两个过程.其一是建堆.其二是出堆 //堆是一种全然二叉树,所以它能够用数组进行存储. //堆可分为最大堆和最小堆.最大堆指任一节点的值都大于其左右孩子节点的值 ...

  2. struts2的一些小问题

    1.action和ValueStack的关系2.ValueStack的类set()方法和setValue()方法的区别3.ValueStack的类push()方法的作用4.从ValueStack对象中 ...

  3. Deep Learning 27:Batch normalization理解——读论文“Batch normalization: Accelerating deep network training by reducing internal covariate shift ”——ICML 2015

    这篇经典论文,甚至可以说是2015年最牛的一篇论文,早就有很多人解读,不需要自己着摸,但是看了论文原文Batch normalization: Accelerating deep network tr ...

  4. Eclipse添加Qt插件

    此文件仅为步骤操作作一个记录,以便以后方便查阅. 1.操作大体参考这个网站:http://blog.csdn.net/defonds/article/details/5013412 2.我的运行环境: ...

  5. Ubuntu linux 返回上一次访问的目录

    cd - (cd空格 减号)返回最近一次访问的目录 这个非常方便.平时经常用终端切换目录,能够方便地回到原来的目录就很爽了. jiqing@jiqing-pad:/usr/local/redis/sr ...

  6. BZOJ_3172_[Tjoi2013]单词_后缀自动机

    BZOJ_3172_[Tjoi2013]单词_后缀自动机 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. ...

  7. 通过minicom传送文件的相关配置及使用方法

    写一下我使用串口向开发板传送文件中遇到的问题及解决办法: 使用的软硬件环境: 虚拟机:VMware® Workstation 8.0.1 Linux操作系统:Fedora 9 开发板:mini6410 ...

  8. bzoj 3872 [ Poi 2014 ] Ant colony —— 二分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符 ...

  9. Uncaught ReferenceError: is not defined

    今天,遍历一个HashSet集合对象,想用链接绑定集合对象的值,通过POST方式提交到控制器.结果程序无反应,按F12键进入调试模式,谷歌总是提示Uncaught ReferenceError:   ...

  10. 关于在Eclipse上运行Hadoop程序的日志输出问题

    在安装由Eclipse-Hadoop-Plugin的Eclipse中, 可以直接运行Hadoop的MapReduce程序, 但是如果什么都不配置的话你发现Eclipse控制台没有任何日志输出, 这个问 ...