微信公眾平台開發 第一篇


一、通訊機制

二、注冊微信平台公眾帳號

https://mp.weixin.qq.com/

注冊完后,需要等待審核,官方說需要7天,快的話1-2天就可以了,未審核的帳號可以通過上面的網址登陸,但是會缺少部分功能(比如高級功能、服務等)。

三、微信公眾平台開發者官方文檔

http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5 

等待審核的時候,務必先閱讀此文檔。

四、配置接口信息

審核通過后,https://mp.weixin.qq.com/登陸帳號。申請成為開發者。

填寫URL和Token,其中URL是開發者用來接收微信服務器數據的接口URL。Token可由開發者任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。 

注:本例中已經存在一個服務器,域名為www.XXX.cn/XXX/WechatIndex.aspx

五、驗證URL

微信公眾平台提供了一個php的示例代碼:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip

我把它轉換為了C#代碼(WechatIndex.aspx.cs): 此代碼僅僅用於“成為開發者”的驗證URL

 1     public partial class WechatIndex : System.Web.UI.Page
 2     {
 3         //TOKEN是用來進行交互安全認證的,這里定義的變量要與接口配置信息中填寫的Token一致
 4         const string Token = "tuanfubao";
 5 
 6         protected void Page_Load(object sender, EventArgs e)
 7         {
 8             //校驗簽名,當填入的信息提交之后頁面有提示“你已成功成為公眾平台開發者,
 9             //可以使用公眾平台的開發功能”這個的時候,接下來你就需要注釋掉這個校驗的方法,使得后面的消息回復得以正常運作
10             Valid();
11         }
12 
13         private void Valid()  //用於申請“成為開發者”時向微信發送驗證信息。 14         {
15             string echoStr = Request.QueryString["echoStr"].ToString();
16             if (CheckSignature())
17             {
18                 if (!string.IsNullOrEmpty(echoStr))
19                 {
20                     Response.Write(echoStr);
21                     Response.End();
22                 }
23             }
24         }
25 
26         /// <summary>
27         /// 驗證微信簽名
28         /// </summary>
29         /// <returns></returns>
30         private bool CheckSignature()
31         {
32             string signature = Request.QueryString["signature"].ToString();
33             string timestamp = Request.QueryString["timestamp"].ToString();
34             string nonce = Request.QueryString["nonce"].ToString();
35             string[] ArrTmp = { Token, timestamp, nonce };
36             Array.Sort(ArrTmp);//字典排序
37             string tmpStr = string.Join("", ArrTmp);
38             tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//對該字符串進行sha1加密
39             tmpStr = tmpStr.ToLower();
40 
41             //開發者獲得加密后的字符串可與signature對比,標識該請求來源於微信。
42             //開發者通過檢驗signature對請求進行校驗,若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,否則接入失敗
43             if (tmpStr == signature)
44             {
45                 return true;
46             }
47             else
48             {
49                 return false;
50             }
51         }
52     }

開發者提交信息后,微信服務器將發送GET請求到填寫的URL上,GET請求攜帶四個參數:

參數 描述
signature  微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
timestamp  時間戳
nonce  隨機數
echostr  隨機字符串

 

 

 

 

 

 

 

開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。

加密/校驗流程如下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源於微信

六、成為開發者

提交后,驗證URL有效性成功后即接入生效,成為開發者。隨后要記得先關閉編輯模式然后開啟開發模式。

此后用戶每次向公眾號發送消息、或者產生自定義菜單點擊事件時,響應URL將得到推送。
用戶向公眾號發送消息時,公眾號方收到的消息發送者是一個OpenID,是使用用戶微信號加密后的結果,每個用戶對每個公眾號有一個唯一的OpenID。

 

 

 


免責聲明!

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



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