zoukankan      html  css  js  c++  java
  • 利用Senparc.Weixin SDK 实现微信用户的授权,并获取信息

    前一段时间在学校做过一个项目,就是利用的Senparc.Weixin SDK 做的,于是翻看以前代码,虽然有注释,但是还是看的迷迷糊糊的,干脆就单步执行一遍看看是怎么实现的,然后就重新写了个简易的授权的界面。贴上代码,温故而知新。

    用的MVC

      <appSettings>
        //配置文件里面写上自己的appid 和appsecret
        <add key="appID" value="xxxxxxxxxxxa"/>
        <add key ="appsecret" value="bxxxxxxxxx8"/>
      </appSettings>    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Configuration;
    using Senparc.Weixin;//引用sdk 命名空间
    using Senparc.Weixin.MP.AdvancedAPIs;
    using Senparc.Weixin.MP.AdvancedAPIs.OAuth;
    
    namespace WeChat.Controllers
    {
        //授权控制器
    public class OAuthController : Controller { //这两个已经在web.config里面写入,所以直接利用ConfiurationManager类下的AppSetting方法获取 public static readonly string appID = ConfigurationManager.AppSettings["appID"]; public static readonly string appsecret = ConfigurationManager.AppSettings["appsecret"]; public static readonly string Domin = "http://zhao.xxxx.xin";//这个是构造回调网页所需要的前缀, 一定要加上http:// 不然会出现redirect_uri错误 // GET: OAuth public ActionResult Index(string returnUrl) { //2.构造redirect_uri 也就是回调函数 $"" 相当于string.format在C#6.0之后出现的也是占位符 //new { returnUrl} 这个的意思就是匿名构造函数,为什么只有一个值,因为returnUrl=returnUrl 一致,所以可以直接写 /* *Url.Action("方法名","匿名方法") 需要回调函数,所以需要再写一个CallBack方法,如果不使用过滤器的话,就returnUrl="/" */ string redirect_uri = $"{Domin}{Url.Action("CallBack", new { returnUrl="/" })}"; //3.state 也是下面的方法需要的参数,这个参数是可以自定义的 string state = "wx" + DateTime.Now.Millisecond; Session["state"] = state;//一旦比较完之后需要清空必须清空 //1.OAuthApi下的GetAuthorizeUrl方法用来获取验证地址,第二个参数是redirect_uri,所以我们就需要构造这个参数 string redirect= OAuthApi.GetAuthorizeUrl(appID, redirect_uri, state, Senparc.Weixin.MP.OAuthScope.snsapi_base); return Redirect(redirect); } ////为什么需要CallBack,在获取到用户的授权之后,需要获取用户的code public ActionResult CallBack(string code, string state, string returnUrl) { if (Session["state"].ToString() != state) { Session["state"] = null; return Content("请重新进入"); } Session["state"] = null; //如果code返回的是个空值,则需要回到授权界面,重新授权 if (string.IsNullOrEmpty(code)) { return RedirectToAction("index"); } //通过回调函数返回的code来获取令牌 ,如果不懂可单步执行,看url的变化 var accessToken = OAuthApi.GetAccessToken(appID, appsecret, code);//这里返回的是一个对象,可以用弱类型var接收 if (accessToken.errcode != ReturnCode.请求成功) { //如果令牌的错误信息不等于请求成功,则需要重新返回授权界面 return RedirectToAction("index"); } Session["oauthAccessToken"] = accessToken;//保存起来过滤器判断 try { Session["userInfo"] = OAuthApi.GetUserInfo(accessToken.access_token, accessToken.openid); return Redirect(returnUrl); } catch { //如果没有获取到用户的信息,则需要重新进去授权界面

             string redirect_uri = $"{Domin}{Url.Action("CallBack", new { returnUrl="/" })}";

              string state1 = "wx"+DateTime.Now.Millisecond;
              Session["state"] =state1;//一旦比较完之后需要清空必须清空
              string redirect = OAuthApi.GetAuthorizeUrl(appID, redirect_uri, state1, Senparc.Weixin.MP.OAuthScope.snsapi_base);            return Redirect(redirect);

                }

            }
    }
  • 相关阅读:
    webBrowser控制新窗口
    MSIL指令速 查表
    [转载]最新.NET Reactor v4.0.0.0 注册机
    如何得到webbrowser的句柄
    【C#】获取本地Cookie的问题
    visio 2007 简体中文版下载
    VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
    ComponentOne Studio Enterprise 2010 v1
    [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
    用WPF实现打印及打印预览
  • 原文地址:https://www.cnblogs.com/xinqi1995/p/8039170.html
Copyright © 2011-2022 走看看