微信鏈接非80端口問題解決方案(偽處理)


 

背景:公司系統想要實現微信查詢功能,但是公司服務器么有申請80端口,由於測試階段,還不想去申請(主要怕麻煩)

由於自己有一個網絡空間,之前的解決方案是將微信的相關處理寫在我的空間里面,公司系統里面提供一個接口,然后我自己調用這個接口得到數據再返回給微信(因為微信不支持非80或443端口,而公司服務器么有開通響應端口)

遇到問題:首先自己網站項目多了一些沒必要的東西不說,開發調試的時候麻煩,因為是兩個項目,一個公司系統,一個自己的。。。

現在想如果把微信相關處理寫在公司系統里面,這樣就不用每次打開兩個項目了,微信既然不能直接連接到公司的非80端口系統,那么我在自己空間里面寫一個處理,將微信調用的各種參數以原樣的方式傳送到公司系統接口里面獲取數據,再原樣返回

(個人覺得有點委托的意思)

 

廢話不多說,正文開始:

 

方案流程:

image

項目中新建一個一般處理程序,用於微信調用:

image

代碼如下:

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //獲得URL參數
            string URLParam = HttpContext.Current.Request.Url.Query;
            string URL = ConfigurationManager.AppSettings["XAQYURL"];//從配置文件獲取URL
            //URL = "http://localhost:7067/WX/WXInterface.ashx";本地測試,要把服務器地址重新定義,發布的時候注釋掉即可
            string NewURL = String.Format("{0}{1}", URL, URLParam);//得到新的帶參數的URL地址
            string result;
            if (context.Request.HttpMethod == "GET")//如果是Get請求,直接以Get方式調用自己的接口,一般用在微信接入驗證
            {
                result = NetData.GetData(NewURL);
            }
            else//Post請求,一般用在發送消息
            {
                context.Request.InputStream.Position = 0;
                StreamReader reader = new StreamReader(context.Request.InputStream);
                string sReqData = reader.ReadToEnd();//加密XML信息
                result = NetData.Post(NewURL, sReqData);
            }
            HttpContext.Current.Response.Write(result);
        }
 

 

此時已經完成了跳轉

本地接收處理段代碼略,(前面有講過,詳見:《微信企業號開發日志》之企業號接入)

接下來本地測試下效果!

 

image

成功了,這樣我完成了微信鏈接非80端口的橋梁,理想情況下我上傳到FTP后就不用管了,我只是在我之前有80端口的項目上加了一個一般處理程序WXInterface.ashx,簡介了不少

 

把微信相關處理都放在了公司非80端口系統里面,以后工資申請了80端口以后,也不需要改動,直接微信上改動就行了

公司項目改動:

image

 

各自上傳,然后更改微信驗證地址:

image

 

 

附上NetData.GetData和NetData.Post的方法

   public string PostWithParm(string url, string data)
        {
            string returnData = null;
            try
            {
                byte[] buffer = Encoding.UTF8.GetBytes(data);
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url);
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.ContentLength = buffer.Length;
                Stream postData = webReq.GetRequestStream();
                webReq.Timeout = 99999999;
                //webReq.ReadWriteTimeout = 99999999;
                postData.Write(buffer, 0, buffer.Length);
                postData.Close();
                HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
                Stream answer = webResp.GetResponseStream();
                StreamReader answerData = new StreamReader(answer);
                returnData = answerData.ReadToEnd();
            }
            catch (Exception ex)
            {
                return "獲取錯誤:" + ex.Message;
            }
            return returnData.Trim() + "\n";
        }

        public string GetWebData(string URL)
        {
            String ReCode = string.Empty;
            try
            {
                HttpWebRequest wNetr = (HttpWebRequest)HttpWebRequest.Create(URL);
                HttpWebResponse wNetp = (HttpWebResponse)wNetr.GetResponse();
                wNetr.ContentType = "text/html";
                wNetr.Method = "Get";
                Stream Streams = wNetp.GetResponseStream();
                StreamReader Reads = new StreamReader(Streams, Encoding.UTF8);
                ReCode = Reads.ReadToEnd();

                //封閉臨時不實用的資料 
                Reads.Dispose();
                Streams.Dispose();
                wNetp.Close();
            }
            catch (Exception ex) { return ex.Message; }

            return ReCode;

        }

 

 

本節到此結束


免責聲明!

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



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