微信網頁授權操作邏輯封裝-C#例項
一、微信網頁授權登入
前提:
1.已經獲取的介面許可權,如果是測試賬號就已經有許可權了
2.配置介面的授權域名
步驟:
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(); }
封裝程式碼類定義:
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={0}&secret={1}&code={2}&grant_type=authorization_code", this.appid, this.secret, this.Code); return url; } /// <summary> /// 獲取重新整理AccessToke的地址 /// </summary> /// <returns></returns> private string GetReferesh_TokenUrl() { string url = string.Format("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}", this.appid, this.TokenData.refresh_token ); return url; } /// <summary> /// 獲取使用者基本資訊地址 /// </summary> /// <returns></returns> private string GetUserInfoUrl() { string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", this.TokenData.access_token, this.TokenData.openid); return url; } #endregion private void Error(string msg, Exception inner) { if (this.OnError != null) { this.OnError(new Exception(msg, inner)); } } } /// <summary> /// 授權之後獲取使用者基本資訊 /// </summary> public class OAuthUser { public string openid { get; set; } public string nickname { get; set; } public int sex { get; set; } public string province { get; set; } public string city { get; set; } public string country { get; set; } public string headimgurl { get; set; } /// <summary> /// 使用者特權資訊,json 陣列 /// </summary> public JArray privilege { get; set; } public string unionid { get; set; } } /// <summary> /// 獲取Access_Token或者重新整理返回的資料物件 /// </summary> public class OAuthAccess_Token { public string access_token { get; set; } public int expires_in { get; set; } public string refresh_token { get; set; } /// <summary> /// 使用者針對當前公眾號的唯一標識 /// 關注後會產生,返回公眾號下頁面也會產生 /// </summary> public string openid { get; set; } public string scope { get; set; } /// <summary> /// 當前使用者的unionid,只有在使用者將公眾號繫結到微信開放平臺帳號後 /// </summary> public string unionid { get; set; } } }
更多:
相關推薦
微信網頁授權操作邏輯封裝-C#例項
一、微信網頁授權登入 前提: 1.已經獲取的介面許可權,如果是測試賬號就已經有許可權了 2.配置介面的授權域名 步驟: 1.使用者同意授權,獲取code 2.根據code 獲取access_token及當前操作使用者的openid、unionid 3.根據openid獲
C#微信網頁授權登入(NET MVC)
##Token驗證 WeixinController.cs using System.Web.Mvc; namespace WeChat.Controllers { public class WeixinController : Controller
微信網頁授權登入(c# Webform)
##Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE
微信網頁授權獲取用戶信息等機制
json 開發者 userinfo 技術分享 nal amp 分隔 response unionid 參考官方文檔 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 1.用戶進入授權
微信網頁授權-公眾號支付(獲取openid、用戶信息等)
blog red code rect ref true 說明 oauth2 具體細節 名詞解釋: openid 用戶唯一標識,請註意,在未關註公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID 業務功能描述:實現H
微信網頁授權
cde 註意 connect encode res str abc 有關 href 有關微信網頁授權 let wechat = { getCode:function(appids){ /** * 獲取微信code
【TP3.2.3】微信網頁授權--基類
重新 exec 進入 index.php sset AR 關註 fun func 非常好用的微信授權 基類:其他的微信權限類都可以繼承至該類: <?php namespace Wechat\Controller; use Think\Controller;
手把手實現微信網頁授權和微信支付,附源代碼(VUE and thinkPHP)
nec ble 名單 ret 一次 hash 掃一掃 網頁 ada wechat github 手把手實現微信網頁授權和微信支付,附源代碼(VUE and thinkPHP) 概述 公眾號開發是痛苦的,痛苦在好多問題開發者文檔是沒有提到的,是需要你猜的. 在開發過程中翻
.netMVC企業微信網頁授權+註冊全局過濾器
glob for init cgi http 一個 使用 QQ == 微信網頁授權 達到效果:企業應用只能在微信中查看,在瀏覽器中打開企業頁面,顯示無權限! 原理,用session記錄用戶,如果用戶已經通過微信授權,記錄@Session["UserId"],如果用戶
解決微信網頁授權一個回調域名多個業務使用
ces 公眾號授權 存在 方案 安全問題 TP 公眾 處理 source 前言 我們都知道微信的網頁授權回調域名只能設置一個,但是多個業務使用同一個微信公眾號授權信息的話,就需要使用者內部進行處理了,下面給出我使用的一種簡陋的解決方案。 方法 正常流程 1: 第一步:用戶同
H5獲取微信網頁授權
esp lin storage {} cti 調用接口 set auth nav //判斷是否微信瀏覽器 isWeiXin: function(){ let ua = window.navigator.userAgent.toLowerCase(); retur
微信網頁授權報code been used, hints: [ req_id: XYv1Ha07042046 ]
web 獲取 UNC color 微信網頁授權 oauth image 授權 use 先貼上代碼: public function index() { $code = input(‘get.code‘); $tool = n
VueJs單頁應用實現微信網頁授權及微信分享功能示例
在實際開發中,無論是做PC端、WebApp端還是微信公眾號等型別的專案的時候,或多或少都會涉及到微信相關的開發,最近公司專案要求實現微信網頁授權,並獲取微信使用者基本資訊的功能及微信分享的功能,現在總算完成了,但開發過程中遇到好幾個坑。廢話不多說了,開始正題。 描述點 微信相關開發知識
微信網頁授權——獲取code、access_token、openid,及跨域問題解決
首先在微信開發文件中有提到微信網頁授權的操作步驟: 第一步:使用者同意授權,獲取code 在確保微信公眾賬號擁有授權作用域(scope引數)的許可權的前提下(服務號獲得高階介面後,預設擁有scope引數中的snsapi_base和snsapi_userinfo),引導關注者開啟如下頁面:
微信網頁授權獲取code
<script> (function(){ var code = GetQueryString('code'); if(code){ alert(code) return false; }else{ shouquan(); } function shouquan(){ var redi
微信網頁授權失敗原因總結
1.專案中網頁授權回撥地址與微信公眾號設定的回撥地址不一樣 2.如果公眾號為服務號,沒有把MP_verify_zoOZRR6Jqi5eQA1n.txt貼上進專案裡 3.如果公眾號為服務號,專案必須要用域名訪問地址 4.如果公眾號為測試號,也不可以用ip地址做專案訪問地址,因為用ip地址訪問的話
PHP 微信網頁授權獲取使用者資訊
class WxController extends Controller { //put your code here /** * 微信授權相關介面
微信網頁授權access_token 與 微信基礎支援的access_token
在此總結一下網頁授權access_token 與 微信基礎支援的access_token 的區別。 1. 網頁授權access_token 微信開放平臺的使用者掃碼登陸網站, 微信公眾號的H5頁面獲取使用者資訊, 微信小程式中的access_token均
普通js使用ajax,微信公眾號授權(微信網頁授權)
微信授權的整個流程: 引導使用者進入授權頁面同意授權,獲取code 通過code換取網頁授權access_token(與基礎支援中的access_token不同) 如果需要,開發者可以重新整理網頁授權access_token,避免過期 通過網頁授權access_tok
vue腳手架,微信公眾號授權(微信網頁授權)
如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 首先我做了一個H5小專案,然後申請公眾號,然後在【自定義選單】中輸入想填寫的,公眾號選單名稱,以及頁面地址: 然後,我們在我們的前端頁面寫呼叫伺服器介面,得到授權。當然