• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现的微信网页授权操作逻辑封装示例

C#实现的微信网页授权操作逻辑封装示例

作者:天马3798 字体:[增加 减小] 来源:互联网 时间:2017-05-28

天马3798 通过本文主要向大家介绍了c#示例,c#代码示例,c#程序示例,网页制作代码示例,网页示例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#实现的微信网页授权操作逻辑封装。分享给大家供大家参考,具体如下:

一、微信网页授权登录

前提:

1.已经获取的接口权限,如果是测试账号就已经有权限了

2.配置接口的授权域名

更多说明可以参考方倍工作室:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html

或者官网API:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

步骤:

1.用户同意授权,获取code

2.根据code 获取access_token及当前操作用户的openid、unionid

3.根据openid获取用户基本信息(如果需要的话)

注:如果想在网站使用扫一扫,授权登录,可以讲 _oauth.GetCodeUrl() 授权地址生成二维码来使用

C#封装微信网页授权登录使用实例:

string appid = "wx145b4a8fd07b24e8";
string appsecrect = "fe6951dcb99772411c42f724b1336065";
string redirect_url = "配置域名下的回调地址";
OAuthManage _oauth = null;
/// <summary>
///控制器构造函数
/// </summary>
public UserController()
{
  _oauth = new OAuthManage(appid, appsecrect, redirect_url);
}
/// <summary>
/// 授权登录
/// </summary>
/// <returns></returns>
public ActionResult AuthLogin()
{
  ViewBag.url = _oauth.GetCodeUrl();
  return View();
}
/// <summary>
/// 回调处理
/// </summary>
/// <returns></returns>
public ActionResult OAuthHandle()
{
  string result = "";
  //注册事件处理
  _oauth.OnError = (e) =>
  {
    string msg = "";
    Exception inner = e;
    while (inner != null)
    {
      msg += inner.Message;
      inner = inner.InnerException;
    }
    result = msg;
    LogOperate.Write(msg);
  };
  _oauth.OnGetTokenSuccess = (token) =>
  {
    result += "<br/>";
    result += token.ToJsonString();
  };
  _oauth.OnGetUserInfoSuccess = (user) =>
  {
    result += "<br/>";
    result += user.ToJsonString();
  };
  //第二步
  _oauth.GetAccess_Token();
  //第三步
  _oauth.GetUserInfo();
  //显示结果
  ViewBag.msg = result;
  return View();
}

</div>

封装代码类定义:

namespace WXPackage
{
  /// <summary>
  /// 网页授权逻辑处理,
  /// 处理三步操作,处理成功,返回用户基本信息
  /// </summary>
  public class OAuthManage
  {
    #region 基本信息定义
    /// <summary>
    /// 公众号的唯一标识
    /// </summary>
    private string appid;
    /// <summary>
    /// 公众号的appsecret
    /// </summary>
    private string secret;
    /// <summary>
    /// 回调url地址
    /// </summary>
    private string redirect_uri;
    /// <summary>
    /// 获取微信用户基本信息使用snsapi_userinfo模式
    /// 如果使用静默授权,无法获取用户基本信息但可以获取到openid
    /// </summary>
    private string scope;
    public OAuthManage(string appid, string appsecret, string redirect_uri, bool IsUserInfo = true)
    {
      this.appid = appid;
      this.secret = appsecret;
      this.redirect_uri = redirect_uri;
      this.scope = IsUserInfo ? "snsapi_userinfo" : "snsapi_base";
    }
    #endregion
    #region 请求过程信息
    /// <summary>
    /// 第一步获取到的Code 值
    /// </summary>
    public string Code { get; set; }
    /// <summary>
    /// 第二步获取到的access_token及相关数据
    /// </summary>
    public OAuthAccess_Token TokenData = null;
    #endregion
    #region 事件定义
    /// <summary>
    /// 当处理出现异常时,触发
    /// </summary>
    public Action<Exception> OnError = null;
    /// <summary>
    /// 当获取AccessToken成功是触发
    /// </summary>
    public Action<OAuthAccess_Token> OnGetTokenSuccess = null;
    /// <summary>
    /// 当获取用户信息成功时触发
    /// </summary>
    public Action<OAuthUser> OnGetUserInfoSuccess = null;
    #endregion
    #region 第二步,回调处理
    /// <summary>
    /// 第二步,通过code换取网页授权access_token
    /// </summary>
    public void GetAccess_Token()
    {
      try
      {
        //1.处理跳转
        this.Code = ReqHelper.GetString("code");
        if (string.IsNullOrEmpty(this.Code))
          throw new Exception("获取code参数失败或用户禁止授权获取基本信息");
        //1.发送获取access_token请求
        string url = GetAccess_TokenUrl();
        string result = NetHelper.Get(url);
        //2.解析相应结果
        TokenData = JsonConvert.DeserializeObject<OAuthAccess_Token>(result);
        if (TokenData == null)
          throw new Exception("反序列化结果失败,返回内容为:" + result);
        //3.获取成功
        if (OnGetTokenSuccess != null)
          OnGetTokenSuccess(TokenData);
      }
      catch (Exception ex)
      {
        Error("第二步,通过code换取网页授权access_token异常", ex);
      }
    }
    /// <summary>
    /// 刷新当前access_token
    /// </summary>
    public OAuthAccess_Token RefreshAccess_Token()
    {
      try
      {
        //1.发送请求
        string url = GetReferesh_TokenUrl();
        string result = NetHelper.Get(url);
        //2.解析结果
        OAuthAccess_Token token = JsonConvert.DeserializeObject<OAuthAccess_Token>(result);
        if (token == null)
          throw new Exception("反序列化结果失败,返回内容:" + result);
        return token;
      }
      catch (Exception ex)
      {
        Error("刷新当前access_token失败", ex);
        return null;
      }
    }
    #endregion
    #region 第三步,获取用户基本信息
    /// <summary>
    /// 第三步,获取基本信息
    /// </summary>
    public void GetUserInfo()
    {
      try
      {
        //1.发送get请求
        string url = GetUserInfoUrl();
        string result = NetHelper.Get(url);
        //2.解析结果
        OAuthUser user = JsonConvert.DeserializeObject<OAuthUser>(result);
        if (user == null)
          throw new Exception("反序列化结果失败,返回内容:" + result);
        //3.获取成功
        if (OnGetUserInfoSuccess != null)
          OnGetUserInfoSuccess(user);
      }
      catch (Exception ex)
      {
        Error("第三步、获取用户基本信息异常", ex);
      }
    }
    #endregion
    #region 静态方法
    /// <summary>
    /// 验证授权凭证是否有效
    /// </summary>
    /// <param name="access_token">access_token</param>
    /// <param name="openid">用户针对当前公众号的openid</param>
    /// <returns></returns>
    public static bool CheckWebAccess_Token(string access_token, string openid)
    {
      try
      {
        string url = string.Format("https://api.weixin.qq.com/sns/auth?access_token={0}&openid={1}",
       access_token,
       openid);
        string result = NetHelper.Get(url);
        JObject obj = JObject.Parse(result);
        int errcode = (int)obj["errcode"];
        return errcode == 0;
      }
      catch (Exception ex)
      {
        throw new Exception("," + ex.Message);
      }
    }
    #endregion
    #region 获取请求连接
    /// <summary>
    /// 获取Code的url 地址
    /// </summary>
    /// <returns></returns>
    public string GetCodeUrl()
    {
      string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=STATE#wechat_redirect",
        this.appid,
        SecurityHelper.UrlEncode(this.redirect_uri),
        this.scope);
      return url;
    }
    /// <summary>
    /// 获取access_token的url地址
    /// </summary>
    /// <returns></returns>
    private string GetAccess_TokenUrl()
    {
      string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c#中合并excel表格的方法示例
  • C#裁剪,缩放,清晰度,水印处理操作示例
  • C#获取HTML文本的第一张图片与截取内容摘要示例代码
  • C#实现创建桌面快捷方式与添加网页到收藏夹的示例
  • C#实现的微信网页授权操作逻辑封装示例
  • C#代码实现短信验证码接口示例
  • C#信号量用法简单示例
  • C#实现冒泡排序算法的代码示例
  • C#微信公众号与订阅号接口开发示例代码
  • C#中使用基数排序算法对字符串进行排序的示例

相关文章

  • 2017-05-28C#实现将PPT转换成HTML的方法
  • 2017-05-28Dictionary扩展基础类向字典中添加键和值
  • 2017-05-28C#获取文件MD5值的实现示例
  • 2017-05-28C#遍历文件夹及其子目录的完整实现方法
  • 2017-05-28C#常见的几种集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍历方法对比
  • 2017-05-28C#泛型集合Dictionary<K,V>的使用方法
  • 2017-05-28c# ArrayList的使用方法小总结
  • 2017-05-28C#检查键盘大小写锁定状态的方法
  • 2017-05-28c#实现摄像头拍照功能示例
  • 2017-05-28c#静态方法和非静态方法详细介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#利用ReportViewer生成报表
    • C#中sleep和wait的区别分析
    • 程序中两个Double类型相加出现误差的解决办法
    • C#组件FormDragger窗体拖拽器详解
    • C#串口通信程序实例详解
    • C#向图片添加水印的两种不同场景与解决方法
    • 理解C#编程中的静态类和静态成员以及密封类
    • c#中Linq to Sql 增删除的实例
    • C#中系统时间和UNIX时间戳互相转换
    • c#构造ColorComboBox(颜色下拉框)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有