用.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. uoj #5. 【NOI2014】动物园 kmp

    #5. [NOI2014]动物园 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/5 Description 近日 ...

  2. hdu 5268 ZYB loves Score 水题

    ZYB loves Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  3. C#实现一个最简单的HTTP服务器

    简介 本文用C#实现了一个最简单的HTTP服务器类,你可以将它嵌入到自己的项目中,或者也可以阅读代码来学习关于HTTP协议的知识. 背景 高性能的WEB应用一般都架设在强大的WEB服务器上,例如IIS ...

  4. c#(asp.net)杂谈笔记

    1.js解析json格式的时间 //转换json格式时间的方法 如Date(1340239979000)转换为正常 function ConvertJSONDateToJSDateObject(JSO ...

  5. Android横竖屏切换及其相应布局载入问题

    第一.横竖屏切换连带载入多屏布局问题: 假设要让软件在横竖屏之间切换.因为横竖屏的高宽会发生转换,有可能会要求不同的布局. 能够通过下面两种方法来切换布局: 1)在res文件夹下建立layout-la ...

  6. 如何快速检查js语法学习Javascript

    这里给大家推荐一个快速进行语法检查的方法,可以发现绝大多数语法错误,也可以作为在线编辑器,提高编程效率. 地址:http://www.jslint.com/ 同时推荐一个在线学习Javascript的 ...

  7. jquery批量设置属性readonly和disabled

    分享下Jquery的api中对元素应用disabled和readonly属性的方法. 1,readonly 属性设置 $('input').attr("readonly",&quo ...

  8. nopCommerce 数据缓存

    为了提高一个系统或网站的性能和IO吞吐量,我们一般都会采用缓存技术.当然NopCommerce也不例外,本文我们就来给大家分析一下nop中Cache缓存相关类设计.核心源码及实现原理. 一.Nop.C ...

  9. char *a 与char a[] 的区别

    原文:http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html char *a = "hello" ...

  10. 用HashSet的add方法谈hashcode和equals方法重写

    本文主要通过用HashSet的add方法讲一下hashCode和equals方法重写.错误的地方望指正. 1.了解HashSet的add方法 了解一个方法的好办法是看源码,所以先看源码 private ...