用.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. zoj 3627 Treasure Hunt II (贪心)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:zoj-3627 题意 直线上有n个城市, 第i个城市和i+1个城市是相邻的.  每个城市都有vi的金币.   ...

  2. 一款基于jQuery的支持鼠标拖拽滑动焦点图

    记得之前我们分享过一款jQuery全屏广告图片焦点图,图片切换效果还不错.今天我们要分享另外一款jQuery焦点图插件,它的特点是支持鼠标拖拽滑动,所以在移动设备上使用更加方便,你只要用手指滑动屏幕即 ...

  3. WPF 之 WPF应用程序事件

    当新建一个wpf应用程序,会自动生成一个App.xaml和MainWindow.xaml文件. 其中 App.xam 用来设置Application,应用程序的起始文件和资源及应用程序的一些属性和事件 ...

  4. java.util Pattern 和 Mathcer

    1.测试给定的正则表达式是否匹配输入的字符串,这里该正则表达式只使用一次 private String regex ; private String input; @Before public voi ...

  5. 1.6.8 Content Streams

    1. Content Streams 当RequestHandlers请求基于URL路径来访问时,SolrQueryRequest包含了请求的参数,同样包含了ContentStreams(包含了大容量 ...

  6. 通过布赛尔曲线以及CAShapeLayer的strokeStart 、strokeEnd 属性来实现一个圆形进度条

    #import <UIKit/UIKit.h> @interface CircleProgressView : UIView /**起始值(0-1)*/ @property(nonatom ...

  7. linux_过程问题记录

    常见问题1:-bash: rz: command not found 解决: 安装lrzsz: 解决命令:yum -y install lrzsz 常见问题2:linux 解压乱码 解决11.到htt ...

  8. js 回车键 跳转到下一个输入框

    window.document.onkeydown(){ if(event.keyCode==13) event.keyCode=9; }

  9. Problem:Minesweeper Master

    Google code jam Qualification Round 2014 题目链接:https://code.google.com/codejam/contest/dashboard?c=29 ...

  10. C++复习笔记

    好多东西都忘了,现在重新复习一遍,把遇到的要点都记录下来.随时更新. 指针 C保证在为数组分配存储空间的时候,指向数组之后的第一个位置的指针也是合法的.也就是说保证指针 a + SIZE 是合法的,但 ...