利用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);

            }

 }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM