二、获取微信用户openId

摘要:
appid={0}&secret={1}&code={2}&grant_type=authorization_ code“,weixinAppid,weixinSecret,code);//appid和appsecretvarclient=newSystem.Net.WebClient();client.Encoding=System.Text.Encoding.UTF8;stringdata=client.DownloadString;JavaScript SerializerJss=newJavaScript Serializer();UserInfouserInfo=Jss。Deserialize<UserInfo>;returnuserInfo.OpenId;}publicclassUserInfo{//////用户是否订阅了公众号ID?当值为0时,表示用户不关注公众号,无法获取其余信息///publicSubscribe{get;set;}//////用户ID,当前官方帐户唯一////publicstringOpenId{get;set;}//////用户的昵称///publicstringNickName{get;set;}//////用户的性别。值1表示男性,值2表示女性,值0表示未知///publicSex{get;set;}//////Language////publicstringLanguage{get;set;}//////用户所在的城市///publicstringCity{get;set;}//////用户所在省///publicstringProvince{get;set;}//////用户的国家/地区///publicstringCountry{get;set;}//////用户头像。最后一个值表示方形化身的大小。当用户没有化身时,此项为空。
/// <summary>
/// 登录首页
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
    if (Session["isTrue"] == null)
    {
        string weixinAppid = System.Configuration.ConfigurationManager.AppSettings["weixinAppid"];
        string weixinBackUrl = System.Configuration.ConfigurationManager.AppSettings["weixinBackUrl"];
        var url = string.Format("//open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", weixinAppid, weixinBackUrl);
        return Redirect(url); //会跳转到weixinBackUrl填写的地址(NewHome)上并将code值发过去
    }
    return View();
}

public class NewHomeController : BaseController
{
    public ActionResult Index(string code)
    {
        string openId = GetOpenId(code);
    }
    
    /// <summary>
    /// 获取openId
    /// </summary>
    /// <param name="code"></param>
    /// <returns></returns>
    public static string GetOpenId(string code)
    {
        string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", weixinAppid, weixinSecret, code); //weixinAppid和weixinSecret为公众号的appID和appsecret

        var client = new System.Net.WebClient();
        client.Encoding = System.Text.Encoding.UTF8;
        string data = client.DownloadString(url);
        JavaScriptSerializer Jss = new JavaScriptSerializer();
        UserInfo userInfo = Jss.Deserialize<UserInfo>(data);
        return userInfo.OpenId;
    }
}

public class UserInfo
{
    /// <summary>
    /// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息
    /// </summary>
    public int SubScribe { get; set; }
    /// <summary>
    /// 用户的标识,对当前公众号唯一
    /// </summary>
    public string OpenId { get; set; }
    /// <summary>
    /// 用户的昵称
    /// </summary>
    public string NickName { get; set; }
    /// <summary>
    /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
    /// </summary>
    public int Sex { get; set; }
    /// <summary>
    /// 语言
    /// </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正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效
    /// </summary>
    public string Headimgurl { get; set; }
    /// <summary>
    /// 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
    /// </summary>
    public int Subscribe_time { get; set; }
    /// <summary>
    /// 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段
    /// </summary>
    public string Unionid { get; set; }
    /// <summary>
    /// 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
    /// </summary>
    public string Remark { get; set; }
    /// <summary>
    /// 用户所在的分组ID
    /// </summary>
    public int Groupid { get; set; }
}

免责声明:文章转载自《二、获取微信用户openId》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇文件系统FatFsR0.09a翻译(三):ff.hidea后台运行后占用端口无法关闭及解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

logstash中关于Jdbc输入配置选项详解

Setting Input type Required clean_run boolean No columns_charset hash No connection_retry_attempts number No connection_retry_attempts_wait_time number No jdbc_connec...

asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

一.   反向工程   反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC。对于其他开发环境,请选择.NET Core CLI工具(跨平台)。     (1) 在程序包管理器控制台(PMC)工具中使用命令Scaffold-DbContext 来进行反向工程。     (2) 在.NET...

Elasticsearch(八)【NEST高级客户端--Mapping映射】

要使用NEST与Elasticsearch进行交互,我们需要能够将我们的解决方案中的POCO类型映射到存储在Elasticsearch中的反向索引中的JSON文档和字段。本节介绍NEST中可用的所有不同功能,使POCO和Elasticsearch变得轻而易举。 在Elasticsearch中显式映射文档对于为给定的问题域提供定制搜索解决方案至关重要。虽然E...

Java 的设计模式之一装饰者模式

刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行为,这个类就叫装饰者类。被修饰的类叫被装饰者类,是已经存在有的功能。在装饰者类之间又可以互相装饰 特点:          1.装饰类通过构造方法来接收被装饰...

RSA加密解密及RSA签名和验证

此Demo包含两个文件,建立一个解决方案,然后建立两个文件,一个为Form,一个为Class,把代码分别复制进去即可 RSA正确的执行过程:加密解密:1、获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥2、加密3、解密签名和验证:签名:1、获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥2、获取待签名的Hash码3、签名其中...

[android] AndroidManifest.xml

<uses-sdk> 作用:使应用程序的兼容性更好,指明应用程序需要的最小API,编译API以及最大支持的API。值都是整数 <uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android...