使用C# .net开发微信公众号之服务器URL配置
服務器URL配置 是微信公眾號開發里非常重要的一個步驟。
雖然微信公眾平臺已經給了我們很多 必要的功能 像:查看用戶,查看用戶消息,給用戶回復消息,自動給用戶回復消息,根據用戶消息內容回復給用戶圖文消息等等等。。。但是 有些我們需要實現的很多業務功能 微信公眾號的后臺是實現不了的。比如我們要根據用戶的消息、菜單的點擊事件來實現相應的業務邏輯是沒辦法實現的。那么這個時候,我們就要用到微信提供給我們的 配置服務器URL的功能了。這個URL可以是 一個aspx頁面 比如:www.xxxx.com/index.aspx ?還可以是一個webservice的地址。?當然不管是頁面還是webservice?都要部署在一個對外的服務器上(需要外網ip或者域名),這樣微信的服務器才能給我們設置的的URL地址發送消息。下面是微信開發手冊里的內容,對于一些個別特別的內容我給大家解釋一下(大家可以跳過下面的說明因為是從微信開發手冊復制來的說明后面有一些我認為會對大家造成疑惑的地方的一些介紹):
接入指南
接入概述
接入微信公眾平臺開發,開發者需要按照如下步驟完成:
1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯
下面詳細介紹這3個步驟。
第一步:填寫服務器配置
登錄微信公眾平臺官網后,在公眾平臺官網的開發-基本設置頁面,勾選協議成為開發者,點擊“修改配置”按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信消息和事件的接口URL。Token可由開發者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密密鑰。
同時,開發者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交后都會立即生效,請開發者謹慎填寫及選擇。加解密方式的默認狀態為明文模式,選擇兼容模式和安全模式需要提前配置好相關加解密代碼,詳情請參考消息體簽名及加解密部分的文檔。
?
第二步:驗證消息的確來自微信服務器
開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數如下表所示:
| 參數 | 描述 |
| signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
| timestamp | 時間戳 |
| nonce | 隨機數 |
| echostr | 隨機字符串 |
?
開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下:
| 1)將token、timestamp、nonce三個參數進行字典序排序 2)將三個參數字符串拼接成一個字符串進行sha1加密 3)開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信 |
?
檢驗signature的PHP示例代碼:
private function checkSignature()
{
? ? ? ? $signature = $_GET["signature"];
? ? ? ? $timestamp = $_GET["timestamp"];
? ? ? ? $nonce = $_GET["nonce"];
? ? ? ??
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
?
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
PHP示例代碼下載:下載
第三步:依據接口文檔實現業務邏輯
驗證URL有效性成功后即接入生效,成為開發者。你可以在公眾平臺網站中申請微信認證,認證成功后,將獲得更多接口權限,滿足更多業務需求。
成為開發者后,用戶每次向公眾號發送消息、或者產生自定義菜單、或產生微信支付訂單等情況時,開發者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件,開發者可以依據自身業務邏輯進行響應,如回復消息。
公眾號調用各接口時,一般會獲得正確的結果,具體結果可見對應接口的說明。返回錯誤時,可根據返回碼來查詢錯誤原因。全局返回碼說明
用戶向公眾號發送消息時,公眾號方收到的消息發送者是一個OpenID,是使用用戶微信號加密后的結果,每個用戶對每個公眾號有一個唯一的OpenID。
此外,由于開發者經常有需在多個平臺(移動應用、網站、公眾帳號)之間共通用戶帳號,統一帳號體系的需求,微信開放平臺(open.weixin.qq.com)提供了UnionID機制。開發者可通過OpenID來獲取用戶基本信息,而如果開發者擁有多個應用(移動應用、網站應用和公眾帳號,公眾帳號只有在被綁定到微信開放平臺帳號下后,才會獲取UnionID),可通過獲取用戶基本信息中的UnionID來區分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號,用戶的UnionID是唯一的。換句話說,同一用戶,對同一個微信開放平臺帳號下的不同應用,UnionID是相同的。詳情請在微信開放平臺的資源中心-移動應用開發-微信登錄-授權關系接口調用指引-獲取用戶個人信息(UnionID機制)中查看。
----------------------------------------下面進入正題-------------------------------------------
注意,微信公眾號接口必須以“http://”或“https://”開頭,分別支持80端口和443端口。
第一步中:
1.?填寫服務器地址(URL)這個URL就是我們發布到我們服務器上的一個網站 或者WebService或者WebAPI的地址。這個地址必須要以http:// 或https:// 開頭
2. Token 這個Token我們可以隨便填 這個Token是必填字段(這個Token的作用說重要也不重要,說不重要吧,他還和安全有點關系,起到一個驗證的作用 所以我們先設置一個吧)
3.?EncodingAESKey 是一個加密解密的密鑰 ? 如果我們對 消息有安全方面的要求的話,我們可以根據這個密鑰來加解密消息。如果我們在下一個選項中選擇了 安全模式的話 那么我們接受到的消息都是微信根據密鑰加密過的,我們在使用的時候要根據密鑰來解密,發送消息是要根據密鑰加密; 而如果我們使用明文方式 就不在需要加解密這個步驟,但是安全性自然低很多。。大家根據需要來選擇就行了。
第二步中:
1.我們在第一步設置完URL直接點保存 會出現這樣的提示:
圖片什么時候掛掉了..... 就是驗證失敗的提示,因為我們還沒有部署我們的網站或者websevice,自然驗證不了
我們只是設置了地址,在這個地址我們還要寫一些接入的代碼。我們接著往下看第二步。
開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上
我們在提交配置的時候 微信服務器會發送一個get請求到我們設置的URL地址 請求的GET請求攜帶的參數如下所示:
?
| 參數 | 描述 |
| signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
| timestamp | 時間戳 |
| nonce | 隨機數 |
| echostr | 隨機字符串 |
?
我們需要對微信發送來的請求進行校驗 ?校驗的流程如下:
?
| 1)將token、timestamp、nonce三個參數進行字典序排序 2)將三個參數字符串拼接成一個字符串進行sha1加密 3)開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信 |
我把我寫的代碼貼出來供大家參考:
public void getMessage() { string token = "123456";if (string.IsNullOrEmpty(token)){return;}string echoString = HttpContext.Current.Request.QueryString["echoStr"];string signature = HttpContext.Current.Request.QueryString["signature"];string timestamp = HttpContext.Current.Request.QueryString["timestamp"];string nonce = HttpContext.Current.Request.QueryString["nonce"];if (!string.IsNullOrEmpty(echoString)){HttpContext.Current.Response.Write(echoString);HttpContext.Current.Response.End();} }其中signature是 微信根據我們第一步中設置的token 和 timestamp 還有 nonce 先進行 字典排序 然后再經過sha1
加密后生成的。 我上面的代碼是沒有進行驗證這個步驟的。 ? 如果我們要進行安全驗證就要 把我們設置的token 、接
收到的timestamp、接收到的nonce 進行字典排序 然后 sha1加密 ?后與接收到的signature 進行比對 如果比對成功
則返回 echoString 否則 什么都不返回 或者 返回空。 這些代碼我們可以寫在 ?aspx 頁面的后臺代碼 aspx.cs 的?
page_load 里。如果我們寫的是webservice 那么我們在設置URL的時候一定要在URL中把方法名帶上 比如:?
www.xxxx.xom/getmsg.asmx/getMessage
以上就是我們配置URL的全部步驟,到此我們就完成了配置URL。以后不管是用戶的消息,還是微信推送的消息 微信
服務器都會轉發到我們設置的這個服務器地址來。。。但是這也帶來了別的問題,就是微信服務器給我們的服務器轉
發消息,我們必須給他回復,不然就會有比較嚴重的問題出現。 比如用戶給我們的公眾號發送消息,然后微信服務器
轉發消息到我們的服務器 但是我們沒有給這個消息回復內容,這個用戶就會看到 此公眾號暫時無法提供服務?的提
示,然后我們就要對消息進行一些處理了。
這一篇就先講到這下一篇 ?使用C# .net開發微信公眾號之自動回復消息?中我再給大家講解 在我們服務器端進行消息回復。歡迎大家持續關注!! 謝謝。
此方式或許有不妥之處,熱烈歡迎大家吐槽。。。?錯誤之處也請大家指正,謝謝??----- ? ?WeepingWeeper
謝謝大家觀看參考,讓我們一同進步。
微信的其他接口調用在持續更新中。。。歡迎關注持續關注。。
總結
以上是生活随笔為你收集整理的使用C# .net开发微信公众号之服务器URL配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保密局计算机网络的安全检查与防护,自治区
- 下一篇: 落魄前端,整理给自己的前端知识体系复习大