.NET微信公众号获取OpenID和用户信息

本文实例为大家分享了微信公众平台实现获取用户OpenID的方法,供大家参考,具体内容如下

Index.aspx.cs代码:

 public partial class Index : System.Web.UI.Page
 {

  //用户id
  public string openid = "";

  //公众号信息部分
  public string appid = ConfigurationManager.AppSettings["AppId"];
  public string appsecret = ConfigurationManager.AppSettings["AppSecret"];
  public string redirect_uri =HttpUtility.UrlEncode("http://www.jb51.net");
  public string scope = "【删除这个并填入请求类型,例如:snsapi_userinfo】";

  #region 显示页面
  public string accesstoken;
  public string nickname;
  public string sex;
  public string headimgurl;
  public string province;
  public string country;
  public string language;
  public string city;

  public string privilege = "";
  #endregion

  protected void Page_Load(object sender, EventArgs e)
  {

   /*
   *微信认证获取openid部分:
   *临时认证code
   */
   //微信认证部分:第二步 获得code
   string code = Request["code"];
   if (string.IsNullOrEmpty(code))
   {
    //如果code没获取成功,重新拉取一遍
    OpenAccess();
   }
   //微信认证部分:第三步 获得openid
   string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, appsecret, code);
   string result = HttpClientHelper.GetResponse(url);
   LogHelper.WriteFile(result);
   JObject outputObj = JObject.Parse(result);

   //微信认证部分:第四步 获得更多信息
   accesstoken = outputObj["access_token"].ToString();
   openid = outputObj["openid"].ToString();
   url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN",accesstoken,openid);
   string result1 = HttpClientHelper.GetResponse(url);
   LogHelper.WriteFile(result1);
   JObject outputObj1 = JObject.Parse(result1);//将json转为数组
   //以下是第四步获得的信息:
    nickname = outputObj1["nickname"].ToString(); //昵称
    sex = outputObj1["sex"].ToString(); //性别什么的
    headimgurl = outputObj1["headimgurl"].ToString(); //头像url
    province = outputObj1["province"].ToString(); ;
    country = outputObj1["country"].ToString(); ;
    language = outputObj1["language"].ToString(); ;
    city = outputObj1["city"].ToString(); ;
   //将获得的用户信息填入到session中
   Session["openid"] = outputObj1["openid"];
   //转向回入口
   //OpenAccess();
  }

  /*
   * 接入入口
   * 开放到微信菜单中调用
   * @param $dir_url 来源url
   * @since 1.0
   * @return void
   */
  public void OpenAccess()
  {
   //判断session不存在
   if (Session["openid"] == null)
   {
    //认证第一步:重定向跳转至认证网址
    string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&&response_type=code&scope=snsapi_userinfo&m=oauth2#wechat_redirect", appid, redirect_uri);
    Response.Redirect(url);
   }
   //判断session存在
   else
   {
    //跳转到前端页面.aspx
    Response.Redirect(Request.Url.ToString());
   }
  }

 }

Index.aspx内容:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="TEST.Index" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <style type="text/css">
  td
  {
   word-wrap: break-word;
  }
 </style>
 <script type="text/javascript">

 </script>
</head>
<body>
 <form id="form1" runat="server">
 <div id="wu" runat="server">
  <table style="width: 100%;">
   <tr>
    <td style="width: 150px;">
     <p>
      openid:<%=openid%></p>
    </td>
    <td>
     <p>
      nickname:<%=nickname%></p>
    </td>
    <td>
     <p>
      sex:<%=sex%></p>
    </td>
   </tr>
   <tr>
    <td>
     <p>
      language:<%=language%></p>
    </td>
    <td>
     <p>
      city:<%=city%></p>
    </td>
    <td>
     <p>
      country:<%=country%></p>
    </td>
   </tr>
   <tr>
    <td>
     <p>
      headimgurl:<img width="50px;" src="<%=headimgurl %>" alt=""></p>
    </td>
    <td>
     <p>
      privilege:<%=privilege%></p>
    </td>
    <td>
    </td>
   </tr>
  </table>
 </div>
 </form>
</body>
</html>

HttpClientHelper.cs代码:

public class HttpClientHelper
 {
  /// <summary>
  ///  get请求
  /// </summary>
  /// <param name="url"></param>
  /// <returns></returns>
  public static string GetResponse(string url)
  {
   if (url.StartsWith("https"))
   {
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
   }

   var httpClient = new HttpClient();
   httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));

   HttpResponseMessage response = httpClient.GetAsync(url).Result;

   if (response.IsSuccessStatusCode)
   {
    string result = response.Content.ReadAsStringAsync().Result;
    return result;
   }
   return null;
  }

  public static T GetResponse<T>(string url)
   where T : class, new()
  {
   if (url.StartsWith("https"))
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

   var httpClient = new HttpClient();
   httpClient.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
   HttpResponseMessage response = httpClient.GetAsync(url).Result;

   T result = default(T);

   if (response.IsSuccessStatusCode)
   {
    Task<string> t = response.Content.ReadAsStringAsync();
    string s = t.Result;

    result = JsonConvert.DeserializeObject<T>(s);
   }
   return result;
  }

  /// <summary>
  ///  post请求
  /// </summary>
  /// <param name="url"></param>
  /// <param name="postData">post数据</param>
  /// <returns></returns>
  public static string PostResponse(string url, string postData)
  {
   if (url.StartsWith("https"))
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

   HttpContent httpContent = new StringContent(postData);
   httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
   var httpClient = new HttpClient();

   HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

   if (response.IsSuccessStatusCode)
   {
    string result = response.Content.ReadAsStringAsync().Result;
    return result;
   }
   return null;
  }

  /// <summary>
  ///  发起post请求
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="url">url</param>
  /// <param name="postData">post数据</param>
  /// <returns></returns>
  public static T PostResponse<T>(string url, string postData)
   where T : class, new()
  {
   if (url.StartsWith("https"))
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

   HttpContent httpContent = new StringContent(postData);
   httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
   var httpClient = new HttpClient();

   T result = default(T);

   HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

   if (response.IsSuccessStatusCode)
   {
    Task<string> t = response.Content.ReadAsStringAsync();
    string s = t.Result;

    result = JsonConvert.DeserializeObject<T>(s);
   }
   return result;
  }

  /// <summary>
  ///  V3接口全部为Xml形式,故有此方法
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="url"></param>
  /// <param name="xmlString"></param>
  /// <returns></returns>
  public static T PostXmlResponse<T>(string url, string xmlString)
   where T : class, new()
  {
   if (url.StartsWith("https"))
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

   HttpContent httpContent = new StringContent(xmlString);
   httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
   var httpClient = new HttpClient();

   T result = default(T);

   HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

   if (response.IsSuccessStatusCode)
   {
    Task<string> t = response.Content.ReadAsStringAsync();
    string s = t.Result;

    result = XmlDeserialize<T>(s);
   }
   return result;
  }

  /// <summary>
  ///  反序列化Xml
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="xmlString"></param>
  /// <returns></returns>
  public static T XmlDeserialize<T>(string xmlString)
   where T : class, new()
  {
   try
   {
    var ser = new XmlSerializer(typeof (T));
    using (var reader = new StringReader(xmlString))
    {
     return (T) ser.Deserialize(reader);
    }
   }
   catch (Exception ex)
   {
    throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);
   }
  }
 }

结果如图:

本文已被整理到了《ASP.NET微信开发教程汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信公众号菜单配置微信小程序实例详解

    先提条件是你的公众号版定了小程序 第一种:直接配置     第二张:代码配置 1.进入在线接口调试工具        2.选择自定义菜单 菜单body为json格式: { "button": [ { "type": "miniprogram", "name": "合作", "url": "http://form.mikecrm.com/2xb9aT", "a

  • 微信公众号模板消息群发php代码示例

    微信模板消息只能发给一个人,如果要群发,需要通过php循环,依次发送. 注意,如果模板消息发信息时有时无,不稳定,可能你的access_token令牌更新缓存不及时,过期了.可以根据日志文件查看.建议300秒更新一下.否则会很烦. 模板id需要自己去公众号中设置行业后得到. <?php //使用方法.直接在页面的逻辑中增加fahuo_wechat();即可.函数要事先引用. function fahuo_wechat($shopid){ if(_cfg("sendmobile")

  • 微信公众号支付H5调用支付解析

    最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付   需要我们配置微信公众号支付地址和测试白名单. 比如:支付JS页面的地址为 http://www.xxx.com/shop/pay/             那此处配置www.xxx.com/shop/pay/ 二.开发流程 借用微信公众号支付api(地址 http://pay.weixin.q

  • 微信公众号实现会员卡领取功能

    1.会员卡的领取也需要js-sdk接口(可以参考获取微信公众号获取用户的地理位置信息)(借鉴网址:http://gaoboy.com/article/25.html) 2. 比获取用户地理位置信息多了一个是需要单独获取签名包,签名方式也和获取用户地理位置的不同(这里再说一下获取签名包的方式)    获取js-sdk签名包: 1.当前的url.时间戳.随机字符串.jsapiticket进行组合 //调用js-sdk的签名包 public function getSignPackage() { $j

  • java微信公众号开发案例

    微信公众号开发一般是针对企业和组织的,个人一般只能申请订阅号,并且调用的接口有限,下面我们就来简单的描述下接入公众号的步骤: 1.首先你需要一个邮箱在微信公众号平台进行注册:      注册的方式有订阅号.公众号.小程序和企业号,个人我们这里只能选择订阅号 2.注册完后,我们登录到公众号平台--->开发--->基本配置,这里需要填写URL和token,URL就是我们使用服务器的接口: 3.Java Web服务器程序编译好且在服务器上部署可以运行的话,可在微信公众号进行在线接口调试: 1).选择

  • .NET微信公众号获取OpenID和用户信息

    本文实例为大家分享了微信公众平台实现获取用户OpenID的方法,供大家参考,具体内容如下 Index.aspx.cs代码: public partial class Index : System.Web.UI.Page { //用户id public string openid = ""; //公众号信息部分 public string appid = ConfigurationManager.AppSettings["AppId"]; public string

  • 微信小程序如何获取openid及用户信息

    微信小程序获取openid及用户信息的方法 1. 获取openid 1.1 获取code 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的会话密钥(session_key).用户数据的加解密通讯需要依赖会话密钥完成. wx.login({ //获取code success: function(res) { code = res.code //返回code } }) 1.2 获取openid 拿到上一步获取的code,结合小程序 appid

  • 微信公众号-获取用户信息(网页授权获取)实现步骤

    根据微信公众号开发官方文档: 获取用户信息步骤如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需scope为 snsapi_userinfo) 1 获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

  • Java微信公众号开发之通过微信公众号获取用户信息

    最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了. 1.首先需要到微信网站去设置一下,我是直接用的微信测试号. 接口配置信息必须要填写的,所以说必须能将自己的服务发布出去 到此微信配置完毕,接下来就是直接上代码了 2.获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息

  • Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注:  这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. 我们很多场景可能需要用户信息 微信公众号获取微信用户信息需要的条件: 1.获取用户openId.可以在用户绑定APP的时候用code换取,也可以在用户关注公众号的时候获取,或者小程序授权时获取.微信公众号code换取openId(详见附录) 2.获取该微信公众号 access_token.方法可

  • 微信公众号之主动给用户发送消息功能

    前一段时间项目中遇到一个稍微麻烦一点的问题. 即客户要求,他在后台编辑好文章后要主动给每个用户都发送消息,并可以让用户点击直接进入文章页面. 于是乎,当时脑子一热,想着没什么大的问题,so easy.模板消息不就得了. 后来在写代码的过程中却发现,并不行. 微信公众号中模板消息有很严格的限制. 1.必须有用户主动触发事件方可发送模板消息 2.模板消息一分钟只能发送六十条,超过六十条,不好意思.你懂. 于是乎,就想到了另一种方法:群发消息 但是一看文档中群发消息的限制,发现悲催了 群发消息服务号每

  • 微信公众号获取access_token的方法实例分析

    本文实例讲述了微信公众号获取access_token的方法.分享给大家供大家参考,具体如下: 上一版需求做了微信公众号开发,秀了一波操作,也遇到了很多坑.现在把微信公众号一些基本的操作记录一下. 微信公众号获取access_token  官方文档地址 access_token是公众号的全局唯一接口调用凭据,我们和微信服务器进行交互,服务器通过access_token判断我们是谁(哪个公众号服务的请求).所以 我们在开发过程中服务端拿到的access_token是一定不能显式暴露给外部,否则将导致

  • Java实现微信公众号获取临时二维码功能示例

    本文实例讲述了Java实现微信公众号获取临时二维码功能.分享给大家供大家参考,具体如下: 我们做微信公众号开发时为了推广,可能需要服务端去生成公众号的临时二维码,然后再进行一定的图片合成操作,制作一张漂亮的推广海报.别人扫一下二维码进入关注公众号界面,点击关注我们可以拿到二维码里面的信息官网地址 记录一下获取临时二维码操作过程. 1.获取access_token 上一篇文章写了 就不赘述了: 2.根据access_token获取二维码ticket,获取到了二维码ticket就基本山是成功了: 3

  • 微信公众号获取用户地理位置并列出附近的门店的示例代码

    思路分析: 1.在微信公众号内获取用户地理位置 需要js-sdk签名包(关于如何获取文档有介绍) 2.根据获取的地理位置ajax去后台请求,通过sql语句,查询中距离最近的门店(sql语句在网上搜的,位置是通过后台添加的) 3.根据城市查询门店列表,使用通过表单提交事件,ajax请求后台获取列表 4.百度地图导航页面要注意引入地址 一.开始开发 1.该功能的实现需要调用微信公众号的js-sdk接口实现 简介: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使

  • ASP.NET Core2静默获取微信公众号的用户OpenId实例代码

    前言 最近在做个微信公众号的项目,需要将入口放置在公众号二级菜单内,通过点击该菜单链接后进入到该项目中去,进入到项目后程序会自动通过微信公众号的API完成用户的OpenId获取.需求很简单,实现起来也不复杂,于是在一番折腾后需求实现了.为此,写下此文仅为初次接触的朋友提供个小小的帮助. 准备 老规矩,在开始动手前,咱们先简单介绍下实现的组成部分,如下: 微信公众号静默获取用户OpenId:要实现该功能,可以通过微信公众号提供的"网页授权"接口完成(官网描述:以snsapi_base为s

随机推荐