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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...