微信通過openID發送消息/後臺post、get提交並接收數據

来源:https://www.cnblogs.com/SeNaiTes/archive/2018/04/02/8684689.html
-Advertisement-
Play Games

控制器:下麵是post發送消息(微信不支持從前臺發送數據,之前試過,報錯,需要跨域,跨域的問題解決後還不行,最後發現之後後端提交 WXApi類: #region 驗證Token是否過期 /// /// 驗證Token是否過期 /// public static bool TokenExpired(s... ...


控制器:下麵是post發送消息(微信不支持從前臺發送數據,之前試過,報錯,需要跨域,跨域的問題解決後還不行,最後發現之後後端提交
WXApi類:
#region 驗證Token是否過期
        /// <summary>
        ///  驗證Token是否過期
        ///</summary>
        public static bool TokenExpired(string access_token)
        {
            string jsonStr = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", access_token));
            if (Tools.GetJsonValue(jsonStr, "errcode") == "42001")
            {
                return true;
            }
            return false;
        }
        #endregion
        #region 獲取Token
        /// <summary>
        ///  獲取Token
        /// </summary>
        public static string GetToken(string appid, string secret)
        {
            string strJson = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret));
            return Tools.GetJsonValue(strJson, "access_token");
        }
        #endregion


Tools類:
 #region 獲取Json字元串某節點的值 
        /// <summary>  
        /// /// 獲取Json字元串某節點的值  
        /// /// </summary>  
        public static string GetJsonValue(string jsonStr, string key)
        {
            string result = string.Empty; if (!string.IsNullOrEmpty(jsonStr))
            {
                key = "\"" + key.Trim('"') + "\""; int index = jsonStr.IndexOf(key) + key.Length + 1;
                if (index > key.Length + 1)
                {
                    //先截逗號,若是最後一個,截“}”號,取最小值    
                    int end = jsonStr.IndexOf(',', index); if (end == -1)
                    {
                        end = jsonStr.IndexOf('}', index);
                    }
                    result = jsonStr.Substring(index, end - index);
                    result = result.Trim(new char[] { '"', ' ', '\'' }); //過濾引號或空格 
                }
            }
            return result;
        }
        #endregion
HttpRequestUtil類:
 #region 請求Url,不發送數據
        /// <summary> 
        /// 請求Url,不發送數據
        /// </summary>
        public static string RequestUrl(string url)
        {
            return RequestUrl(url, "POST");
        }
        #endregion
        #region 請求Url,不發送數據
        /// <summary>
        /// 請求Url,不發送數據
        /// </summary>
        public static string RequestUrl(string url, string method)
        {
            // 設置參數 
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = method;
            request.ContentType = "text/html";
            //request.GetRequestStream()
            //request.
            request.Headers.Add("charset", "utf-8");  //發送請求並獲取相應回應數據
            Stream postStream = request.GetRequestStream();
            //postStream.Write(,0,bytearra)
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程式才開始向目標網頁發送Post請求
            //Stream responseStream = 
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);//返回結果網頁(html)代碼             
            string content = sr.ReadToEnd();
            return content;
        }
        #endregion
        
下麵是會返回錯誤44002的:原因是post數據未發送(沒有提交數據),也是控制器中:
  #region 請求Url,不發送數據
        /// <summary> 
        /// 請求Url,不發送數據
        /// </summary>
        public static string RequestUrl(string url)
        {
            return RequestUrl(url, "POST");
        }
        #endregion
        #region 請求Url,不發送數據
        /// <summary>
        /// 請求Url,不發送數據
        /// </summary>
        public static string RequestUrl(string url, string method)
        {
            // 設置參數 
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = method;
            request.ContentType = "textml";
            request.Headers.Add("charset", "utf-8");  //發送請求並獲取相應回應數據
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程式才開始向目標網頁發送Post請求
            Stream responseStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
            //返回結果網頁(html)代碼 
            string content = sr.ReadToEnd();
            return content;
        }
        #endregion

 

#region 
        public string send(string openida, string senddata)
        {
            string posturl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + WXApi.GetToken(appID, appsecret);//發送地址 
            string postData = "{\"touser\":\"" + openida + "\",\"msgtype\":\"text\",\"text\":{\"content\":\"" + senddata + "\"}}";//發送消息的字元串 openida為openid,senddata為發送內容  
            return GetPage(posturl, postData);//以post的形式發送出去
        }
        #endregion
        #region 
        public string GetPage(string posturl, string postData)///向微信伺服器發送post請求(主要是發送消息)  
        {
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            // 準備請求...    
            try
            {
                // 設置參數    
                request = WebRequest.Create(posturl) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";//post的形式  
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //發送請求並獲取相應回應數據    
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程式才開始向目標網頁發送Post請求    
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回結果網頁(html)代碼    
                string content = sr.ReadToEnd();
                string err = string.Empty;
                return content;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                //Response.Write(err);
                //return string.Empty;
                return err;
            }
        }
        #endregion

 

獲取AppID和:appsecret ,(在控制器上面寫上)
     public static readonly string appID = ConfigurationManager.AppSettings["appID"];
        public static readonly string appsecret = ConfigurationManager.AppSettings["appsecret"];
web.config中需要寫入下麵信息:
 <appSettings>
    <add key="appID" value="wxf39b0be4b27f0016" />
    <add key="appsecret" value="667b57fe3f9126b4c0960b1300c858db" />
 </appSettings>

 


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

-Advertisement-
Play Games
更多相關文章
  • 這是一篇很基礎的,大佬就不要看了,也不要噴,謝謝🌺🐔😂😂😂。 在看實例之前,我們先看一下頁面導航Navigate的定義 有三種方法,其中兩種是可以傳遞參數的 傳遞分兩種,一種帶參數的,一種利用全局變數。 1.帶parameter類型的傳遞 看一個小李子: xaml代碼定義很簡單, 主要看一 ...
  • 本文將用簡單的示例讓你瞭解如何通過ILAsm與ILDasm修改你的exe、dll文件 ...
  • 1. 伺服器端代碼 2. 客戶端代碼 3. 運行截圖 ...
  • 我想這個問題,是大家關註的問題,這個問題,我非常關註。 背景:在公司開發項目,我們一般都要把項目推送到公司領導創建的一個遠程倉庫裡邊去,但是我們同時也有自己的小倉庫,這樣的話,如何方便的將我們的代碼,給公司倉庫推送一次,然後給自己的倉庫推送一份呢? 1.在我們項目根目錄打開git 終端 現在這個項目 ...
  • 1. 自定義 Master,Kongfu 類 2. 測試代碼 ...
  • 話說現在檢測人臉的技術有很多。有線上AI服務,比如Megvii Face++,Microsoft Cognitive Services,Tencent AI等等。還有本地的庫實現的,比如OpenCV。 但是這些這篇文章都不討論,微軟在 .NETCore裡面也提供了一種本地檢測人臉的API,那就是Wi ...
  • 我最近打算學習 WPF ,在尋找 MVVM 框架的時候發現了 PRISM ,在此之前還從一些博客上瞭解了其他的 MVVM 框架,比如 "淺談WPF中的MVVM框架 MVVMFoundation" 中提到的 MVVMFoundation ,再比如 "ViewModel從未如此清爽 輕量級WPF MVV ...
  • 微軟發佈asp.net core已經過去很長的時間了,我還沒有接觸,從現在開始一點點去學習。 一、Db_First 1、新建一個asp.net core mvc的項目 2、通過NuGet,安裝Entity Framework Core Install-Package Microsoft.Entity ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...