這裡給出的demo是具備整體框架的微信公眾平台源碼, 所謂demo就是拿過去就可以直接演示使用的東西, 當然不會具備非常詳細的具體到業務層面、數據層面的東西, 每個人都可以在此基礎上自由發揮, 只要看完前6篇的也一定能開發出自己的東西。 demo簡單易理解,任何人都可以看明白,這裡說明下demo跟我實際項目中的區別: 1、demo沒有連接數據庫。 demo下載可以直接使用,連接數據庫並不是每個人都很方便,且第1篇中已經把完完整整的數據庫開源了,包括設計時的可視化界面, 想要連接數據庫的,創建數據庫之後添加一個EF連接就好, 連接方法在第2篇 2、demo沒有封裝接收到的微信消息模型。 因為收到的消息封裝的目的是為了進行消息記錄,添加到數據庫,既然沒有1,這個就也沒有了, 消息封裝第3篇已經寫出; 3、demo入口處沒有驗證加密簽名。 因為demo是要任何人拿回去就能用的,如果加上加密簽名驗證很多人可能調不通,本地測試的話根本沒有加密簽名供驗證(實際上本地測試可以直接return true),為了任何人都能弄懂,就把驗證方法去掉了, 驗證方法的代碼在第2篇一字不漏; 4、demo沒有IOC注入和緩存相關。 並不是每個業務需求都用得上緩存和IOC注入,也並不是每個人都接觸過這些, 為了通用,就去掉了。 若你在其他項目中遇到IOC注入和緩存處理相關的問題,都可以問我, 很樂意解答 總結:demo就是個完整的微信公眾平台簡易的框架,且適合任何一個開發者; 實際項目需要使用的數據庫相關的在之前文章也全都有代碼和操作方法; 根據demo任何人都可以超快速的做出屬於自己的微信公眾平台。 最重要的是分享整體思想~ 微信公眾平台其實很簡單,大多數人都是沒有理清消息接收、處理的來龍去脈,就拿入口來說,就這些不同的case可能很多開發者都要很久才能理清(與技術能力無關,主要是有些朋友不能一下子想明白),分享出這個demo源碼,讓任何人都可以入門 復制代碼 1 public void LookMsgType(string msgType) 2 { 3 4 #region 判斷消息類型 5 switch (msgType) 6 { 7 case "text": 8 RText mText = new RText(); 9 mText = ReadXml.GetModel<RText>(mText, xmlModel); 10 BLLWei.DoText(dbHome, mText);//文本消息 11 break; 12 case "image": 13 RImg mImg = new RImg(); 14 mImg = ReadXml.GetModel<RImg>(mImg, xmlModel); 15 BLLWei.DoImg(dbHome,mImg);//圖片 16 break; 17 case "voice": //聲音 18 RVoice mVoice = new RVoice(); 19 mVoice = ReadXml.GetModel<RVoice>(mVoice, xmlModel); 20 BLLWei.DoVoice(dbHome,mVoice); 21 break; 22 23 case "video"://視頻 24 RVideo mVideo = new RVideo(); 25 mVideo = ReadXml.GetModel<RVideo>(mVideo, xmlModel); 26 BLLWei.DoVideo(dbHome, mVideo); 27 break; 28 29 case "location"://地理位置 30 RLocation mLocation = new RLocation(); 31 mLocation = ReadXml.GetModel<RLocation>(mLocation, xmlModel); 32 BLLWei.DoLocation(dbHome,mLocation); 33 break; 34 case "link"://鏈接 35 RLink mLink = new RLink(); 36 mLink = ReadXml.GetModel<RLink>(mLink, xmlModel); 37 BLLWei.DoLink(dbHome,mLink); 38 break; 39 #region 事件 40 case "event": 41 42 switch (ReadXml.ReadModel("Event", xmlModel)) 43 { 44 case "subscribe": 45 46 if (ReadXml.ReadModel("EventKey", xmlModel).IndexOf("qrscene_") >= 0) 47 { 48 RCodeNotSub mNotSub = new RCodeNotSub(); 49 mNotSub = ReadXml.GetModel<RCodeNotSub>(mNotSub, xmlModel); 50 BLLWei.DoCodeNotSub(dbHome,mNotSub);//未關注的新用戶,掃描帶參數的二維碼關注 51 } 52 else 53 { 54 RSub mSub = new RSub(); 55 mSub = ReadXml.GetModel<RSub>(mSub, xmlModel); 56 BLLWei.DoSub(dbHome,mSub);//普通關注 57 } 58 break; 59 case "unsubscribe": 60 RUnsub mUnSub = new RUnsub (); 61 mUnSub = ReadXml.GetModel<RUnsub>(mUnSub, xmlModel); 62 BLLWei.DoUnSub(dbHome,mUnSub);//取消關注 63 break; 64 65 case "SCAN": 66 RCodeSub mCodeSub = new RCodeSub(); 67 mCodeSub = ReadXml.GetModel<RCodeSub>(mCodeSub, xmlModel); 68 BLLWei.DoCodeSub(dbHome,mCodeSub);//已經關注的用戶掃描帶參數的二維碼 69 break; 70 case "LOCATION"://用戶上報地理位置 71 72 RSubLocation mSubLoc = new RSubLocation(); 73 mSubLoc = ReadXml.GetModel<RSubLocation>(mSubLoc, xmlModel); 74 75 BLLWei.DoSubLocation(dbHome, mSubLoc); 76 break; 77 case "CLICK"://自定義菜單點擊 78 79 RMenuClick mMenuClk = new RMenuClick(); 80 mMenuClk = ReadXml.GetModel<RMenuClick>(mMenuClk, xmlModel); 81 BLLWei.DoMenuClick(dbHome, mMenuClk); 82 break; 83 case "VIEW"://自定義菜單跳轉事件 84 85 RMenuView mMenuVw = new RMenuView(); 86 mMenuVw = ReadXml.GetModel<RMenuView>(mMenuVw, xmlModel); 87 BLLWei.DoMenuView(dbHome, mMenuVw); 88 break; 89 }; 90 break; 91 #endregion 92 } 93 #endregion 94 } 復制代碼 後續我還會寫文章,分享過程, 只為了分享開發歷程,大家可以看到我這麼些篇文章中所有的截圖都把微信號、名稱等P掉了,雖然寫文章時截圖也是用的沒有任何用戶的一般號做測試的。