MVC 微信開發獲取用戶OpenID

来源:http://www.cnblogs.com/ldyblogs/archive/2017/08/11/getOpenId.html
-Advertisement-
Play Games

第一次開發微信版網頁,對最重要的獲取微信OpenId,特此記錄下來 1.首先得有appid和appsecret 1 1. public class WeiXin { 2 3 public static string appid { 4 get { 5 string _appid = "wx3xxxx ...


 

 

第一次開發微信版網頁,對最重要的獲取微信OpenId,特此記錄下來

1.首先得有appid和appsecret

 1 1.    public class WeiXin {
 2 
 3         public static string appid {
 4             get {
 5                 string _appid = "wx3xxxxxxxxxxxxxxx";
 6                 return _appid;
 7             }
 8         }
 9         public static string aseret {
10             get {
11                 string appsecret = "b6719276d539796d94bxxxxxxxxxxxxxxx";
12                 return appsecret;
13             }
14         }
15 
16 }
準備AppId和Appsecret

2.只獲取用戶的openID,,在確保微信公眾賬號擁有授權作用域(scope參數)的許可權的前提下(服務號獲得高級介面後,預設擁有scope參數中的snsapi_base和snsapi_userinfo),引導關註者打開如下頁面,以snsapi_base為scope發起的網頁授權,並且是靜默授權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(下麵代碼中的url參數就是回調頁,靜態的可以寫成:string url = https://wx.baidu.com/controller/GetOpenId,註意URL需要進行HttpUtility.UrlEncode(url)編碼,還有回調頁的功能變數名稱需要和微信公眾號裡面設置的回調功能變數名稱相同)

 1 public class ApplyVIPController : Controller
 2  2     {
 3  3 
 4  4         // GET: /ApplyVIP/     
 5  5 
 6  6         public ActionResult Index(string url)
 7  7         {
 8  8             string _url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect",
 9  9                 WeiXin.appid,
10 10                 url,//回調頁URL
11 11                 Guid.NewGuid().ToString("N"));
12 12             return Redirect(_url);//這裡微信會自動取出回調頁URL,並且跳轉到該url所屬的頁面
13 13         }
靜默授權並且跳轉回調頁

3.獲取code,並且通過code獲取Openid,正確時返回的JSON數據包如下:{ "access_token":"ACCESS_TOKEN",    "expires_in":7200,   "refresh_token":"REFRESH_TOKEN",     "openid":"OPENID",    "scope":"SCOPE" },這裡面就包含了所需要的OPENID

 1  //controller
 2  public string GetOpenId() {
 3             string code = requset.querystring["code"];
 4             string openid = "";
 5             string json = "";
 6             string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code "//通過appid,appaseret,code
 7     , WeiXin.appid, WeiXin.aseret, code);
 8             HttpQuery.Get(url, null, msg => {
 9                 json = msg;
10             });
11             JObject job = (JObject)JsonConvert.DeserializeObject(json);
12             openid = job["openid"].ToString();
13             return openid;
14         }
獲取到openID

4.請求獲取Openid的httpquery.get()方法

 1 public class HttpQuery {
 2         private static readonly string DefaultUserAgent =
 3             "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
 4 
 5         public static void Get(string url, object data, Action<string> callback) {
 6             IDictionary<string, string> parameters = Getparameters(data);
 7 
 8             if (!(parameters == null || parameters.Count == 0)) {
 9                 url += "?";
10                 foreach (var item in parameters) {
11                     url += item.Key + "=" + item.Value + "&";
12                 }
13             }
14             CreateGetHttpResponse(url, null, null, null, callback);
15         }
16         /// <summary>  
17         /// 創建GET方式的HTTP請求  
18         /// </summary>  
19         /// <param name="url">請求的URL</param>  
20         /// <param name="timeout">請求的超時時間</param>  
21         /// <param name="userAgent">請求的客戶端瀏覽器信息,可以為空</param>  
22         /// <param name="cookies">隨同HTTP請求發送的Cookie信息,如果不需要身份驗證可以為空</param>  
23         /// <returns></returns>  
24         private static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent,
25             CookieCollection cookies, Action<string> callback, string encoding = "utf-8") {
26             if (string.IsNullOrEmpty(url)) {
27                 return null;
28                 //throw new ArgumentNullException("url");
29             }
30             try {
31                 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
32                 request.Method = "GET";
33                 request.UserAgent = DefaultUserAgent;
34                 if (!string.IsNullOrEmpty(userAgent)) {
35                     request.UserAgent = userAgent;
36                 }
37                 if (timeout.HasValue) {
38                     request.Timeout = timeout.Value;
39                 }
40                 if (cookies != null) {
41                     request.CookieContainer = new CookieContainer();
42                     request.CookieContainer.Add(cookies);
43                 }
44 
45                 HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;
46 
47                 StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),
48                     System.Text.Encoding.GetEncoding(encoding));
49 
50                 string html = "";
51                 //獲取請求到的數據
52                 html = reader.ReadToEnd();
53                 //關閉
54                 httpWebResponse.Close();
55                 reader.Close();
56       
57                     callback(html);
58                     return httpWebResponse;
59                 }
60             } catch {
61                 callback(null);
62             }
63             return null;
64         }
65 
66 }
Http GET請求

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • while迴圈 語法1: while [ 條件 ] do 命令序列 done 語法2: while read -r line do 命令序列 done (切記while和左中括弧一定要有空格) 例子 if判斷語句 語法1: if 條件 then 命令序列 fi 語法2: if 條件 then 條件序 ...
  • 1 、rsync介紹 rsync是實現全量及增量的本地或遠程數據鏡像同步備份的工具 rsync常用命令參數 2、rsync特性 ①支持拷貝特殊文件如軟鏈接,設備等 ②排除指定文件或目錄同步的功能,相當於打包命令tar排除功能 ③ 保持原文件或目錄的許可權、時間、硬鏈接、屬主、組等屬性不改變 ④實現增量 ...
  • 輸出重定向 重定向一般通過在命令間插入特定的符號來實現。特別的,這些符號的語法如下所示 command1 > file1 上面這個命令執行command1然後將輸出的內容存入file1。 註意任何file1內的已經存在的內容將被新內容替代。如果要將新內容添加在文件末尾,請使用>>操作符。 實例 執行 ...
  • 1. 引言 由於實習生轉正,公司給配了一臺新電腦,配置不用多說,16G記憶體,i7 7700的CPU,128SSD的系統盤,1T的機械硬碟,雖然只有一個破核顯。對於我個人而言,最重要的是系統從Windows7企業版升級到Windows10企業版,成為公司第一批使用Windows10的員工。 2. 在B ...
  • 一、直接使用C#操作資料庫的類庫ADO.NETADO.NET使用Connection對象來連接資料庫,使用Command或DataAdapter 對象來執行SQL語句,並將執行的結果返回給DataReader或DataAdapter,然後 再使用取得的DataReader或者DataAdapter對 ...
  • Entity Framework使用Code First方式時,實體之間已經配置好關係,根據實際情況某些情況下需要同時獲取導航屬性,比如獲取商品的同時需要獲取分類屬性(導航屬性),或者基於優化方面考慮等,下麵來看一個例子 例子中有會員實體類(Member)與角色實體類(Role),Role與Memb ...
  • 目前每日全網下發的推送消息大概是120億條,這些消息主要在Android設備上,平均每個Android用戶每天會收到30條以上的消息, 為什麼呢,主要是因為Android手機生態的原因,關閉消息太難. 所以Android設備的用戶每天生活在消息的轟炸之中,從業內的一些數據來看,現在Android的一... ...
  • “其實我們可以為治理霧霾做點什麼的。”在香港出生、美國上學、北京工作的伍毅恆一字一句地用普通話表達出了自己的願望。這天早上7點,北京市剛剛正式啟動了首次“霧霾紅色預警”。“這座大樓里,有我們最新的物聯網解決方案,供暖系統、空氣凈化和空調系統的所有數據我們都有,它們在雲端被處理,在我的圖表裡可以清楚看... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...