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