用.Net开发微信的时候第一步就是获取微信的网页授权,获取openid。

自己做个总结,以后也好用,这里只提供了获取openid的接口,后续程序有待开发

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Net;
using System.Web.Script.Serialization; namespace WechatHelper
{
/// <summary>
/// 在网站下创建WeChat文件夹,将微信页面放在WeChat文件夹下
/// 调用GetOpenID()方法。
/// </summary>
public class WeChatHelper
{
public static string appId = "在微信公共平台中拿";
public static string secret = "在微信公共平台中拿";
public static string code = ""; /// <summary>
/// 获取openID
/// </summary>
/// <param name="type">回调页面的绝对路径</param>
public static void GetOpenID(string type)
{
if ((HttpContext.Current.Request.Cookies["openid"]) == null)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
Dictionary<string, object> dict = new Dictionary<string, object>();
string code = GetCode(type); //获取code
AccessToken(code); //获取accessToken
HttpContext.Current.Response.Redirect("/WeChat/" + type + ".aspx");
}
}
/// <summary>
/// 获取code代码
/// </summary>
/// <returns></returns>
public static string GetCode(string TypeName)
{
if (HttpContext.Current.Request.QueryString["Code"] != null) //判断code是否存在
{
if (HttpContext.Current.Request.Cookies["Code"] == null) //判断是否是第二次进入
{
SetCookie("code", HttpContext.Current.Request.QueryString["Code"], ); //写code 保存到cookies
code = HttpContext.Current.Request.QueryString["Code"];
}
else
{
delCookies("code"); //删除cookies CodeURL(TypeName); //code重新跳转URL
}
}
else
{
CodeURL(TypeName); //code跳转URL
}
return code;
}
/// <summary>
/// 获取AccessToken
/// </summary>
/// <returns></returns>
public static string AccessToken(string code)
{
Dictionary<string, string> obj = new Dictionary<string, string>();
var client = new System.Net.WebClient();
var serializer = new JavaScriptSerializer();
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, secret, code);
client.Encoding = System.Text.Encoding.UTF8;
string dataaccess = "";
try
{
dataaccess = client.DownloadString(url);
}
catch (Exception e)
{
//存log方法
}
//获取字典
obj = serializer.Deserialize<Dictionary<string, string>>(dataaccess);
string accessToken = "";
if (obj.TryGetValue("access_token", out accessToken)) //判断access_Token是否存在
{
SetCookie("openid", obj["openid"], );
}
else //access_Token 失效时重新发送。
{
//存log方法
}
return accessToken;
}
/// <summary>
/// 设置cookies
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
/// <param name="time"></param>
public static void SetCookie(string name, string value, int time)
{
HttpCookie cookies = new HttpCookie(name);
cookies.Name = name;
cookies.Value = value;
cookies.Expires = DateTime.Now.AddDays(time);
HttpContext.Current.Response.Cookies.Add(cookies); }
/// <summary>
/// 跳转codeURL
/// </summary>
/// <param name="TypeName"></param>
public static void CodeURL(string TypeName)
{
string url = "";
string locationhref = "http://网站域名/WeChat/"+TypeName+".aspx";
url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect", appId, locationhref);
HttpContext.Current.Response.Redirect(url);
}
/// <summary>
/// 删除cookies
/// </summary>
/// <param name="name"></param>
public static void delCookies(string name)
{
foreach (string cookiename in HttpContext.Current.Request.Cookies.AllKeys)
{
HttpCookie cookies = HttpContext.Current.Request.Cookies[name];
if (cookies != null)
{
cookies.Expires = DateTime.Today.AddDays(-);
HttpContext.Current.Response.Cookies.Add(cookies);
HttpContext.Current.Request.Cookies.Remove(name);
}
}
}
}
}

微信(一) 获取openid 网页授权 C# WeChatHelper的更多相关文章

  1. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

  2. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息二

    前言 这一篇实现snsapi_userinfo,写这篇时其实我是有疑惑的,因为我并没有调试成功,但是我反复检查程序和思路是没有问题的,因为我使用的测试公众号,群里一个伙计说他之前调试时用的也是测试公众 ...

  3. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一

    前言 微信网页授权共分为两种方式:snsapi_base.snsapi_userinfo. snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面. snsapi_userinfo是在 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(76)-微信公众平台开发-网页授权

    前言 网页授权是:应用或者网站请求你用你的微信帐号登录,同意之后第三方应用可以获取你的个人信息 网上说了一大堆参数,实际很难理解和猜透,我们以实际的代码来演示比较通俗易懂 配置 实现之前我们必须配置用 ...

  5. 微信开发之Author网页授权

     微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的&q ...

  6. 绑定微信以及获取openId

    由于公司最近在做一个微信公众号的项目,需要获取用户openId,我再一次踏入了微信的坑! 先在这里告诫后来的同志,如果一样要开始做有关微信的东西,最好是有前辈,或者直接看完文档,不懂或者纳闷的地方直接 ...

  7. [转] Android进阶——安卓接入微信,获取OpenID

    PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息 http://blog.csdn.net/hao ...

  8. asp.net mvc 根据浏览器判断,如果是微信浏览器则进行网页授权,否则直接访问

    遇到这个需求,想到的第一点就是,这个肯定是需要写在一个通用的地方.方便调用.一般可以定义个 父类控制器在OnActionExcuting方法执行前写逻辑,先上代码,一边写代码一边讲解: /// < ...

  9. 微信企业号获取OpenID过程

    define('CorpID', "wx82e2c31215d9a5a7"); define('CorpSecret', ""); //当前管理组 设置-> ...

随机推荐

  1. Android学习之路

    Android基础 整理下个人认为新手们必须要掌握的知识点,顺便也会附带相应觉得不错的讲解博客地址. 两分钟彻底让你明白Android Activity生命周期(图文)! Activity实际开发中使 ...

  2. GPS获取Location 获取所在地点的经纬度

    利用手机获取所在地点的经纬度: Location 在Android 开发中还是经常用到的,比如 通过经纬度获取天气,根据Location 获取所在地区详细Address (比如Google Map 开 ...

  3. [Angular2 Router] Load Data Based on Angular 2 Route Params

    You can load resource based on the url using the a combination of ActivatedRouteand Angular 2’s Http ...

  4. Swift2.0 中的String(一):常用属性

    字符串算是平常用的比较多.花样也比较多的一个类型,昨天有空把相关的一些常用操作都写了一遍,总结出来.其实iOS里面的字符串更复杂,还有NSString系列等等,那些API太多将来需要用的时候再慢慢学. ...

  5. Android端百度地图API使用详解

    百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...

  6. hql & mysql 札记

    最近在某D实习,刚去就开始各种写HQL,碰壁很多次. 几个知识点记录一下,逐个攻破. sql 中的case when, 选择循环的写法.(http://www.cnblogs.com/zengen/a ...

  7. 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#

    #10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...

  8. 【Android 界面效果39】android:inputType问题

    1.  在XML代码中实现比较简单, 直接设置android:inputType="textMultiLine": [mw_shl_code=java,true]<EditT ...

  9. ajax 请求

    案例: <html><head><script type="text/javascript">function loadXMLDoc(){var ...

  10. POJ 2236 Wireless Network (并查集)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 18066   Accepted: 761 ...