資源簡(jiǎn)介
對(duì)于當(dāng)前微信消息收發(fā) 使用C#實(shí)現(xiàn)較好的一個(gè)DEMO
Entities/Request*.cs 用于接收微信平臺(tái)自動(dòng)發(fā)送到服務(wù)器的實(shí)體(發(fā)送過(guò)來(lái)的是XML),包括文本、位置、圖片三類
Entities/Response*.cs 用于反饋給發(fā)送人的信息實(shí)體(最終會(huì)轉(zhuǎn)成XML),包括文本、新聞(圖文)兩類
Helpers/EntityHelper.cs 用于實(shí)體和XML之間的轉(zhuǎn)換(由于其中有許多需要特殊處理的字段和類型,這里不能簡(jiǎn)單用XML序列化)
Helpers/MsgTypeHelper.cs 用于獲取消息類型
CheckSignature.cs 驗(yàn)證請(qǐng)求合法性類
Enums.cs 各種枚舉
RequestMessageFactory.cs 用于自動(dòng)生成不同Request類型的實(shí)體,并作必要的數(shù)據(jù)填充
Senparc.Weixin.MP幾個(gè)關(guān)鍵類及重要方法(按一般使用過(guò)程排序)
生成驗(yàn)證字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根據(jù)微信平臺(tái)提供的數(shù)據(jù),SHA1加密后的驗(yàn)證字符串(注意token必須跟公眾平臺(tái)的設(shè)置一直)
驗(yàn)證請(qǐng)求:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),驗(yàn)證請(qǐng)求是否合法
獲取請(qǐng)求實(shí)體:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根據(jù)不同請(qǐng)求的類型,自動(dòng)生成可用于操作的實(shí)體(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是請(qǐng)求枚舉類型。
進(jìn)行判斷及各類操作。
根據(jù)需要,創(chuàng)建響應(yīng)類型的實(shí)體,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本類型信息。
由于目前微信只接受XML的返回?cái)?shù)據(jù),所以在返回之前還需要做一次轉(zhuǎn)換:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString();
至此整個(gè)微信公眾賬號(hào)的自動(dòng)響應(yīng)過(guò)程結(jié)束。
下面可以直接下載源代碼及示例(示例是ASP.NET MVC 4,.NET 4.0,為了提高兼容性,Senparc.Weixin.MP源代碼使用.NET 3.5):
壓縮包中包含三個(gè)文件夾:Senparc.Weixin.MP、Senparc.Weixin.MP.BuildOutPut、Senparc.Weixin.MP.Sample,分別對(duì)應(yīng)Senparc.Weixin.MP.dll源代碼項(xiàng)目、Senparc.Weixin.MP.dll輸出目錄、Web示例,Web示例建議放到公網(wǎng)測(cè)試,讓公眾平臺(tái)自動(dòng)發(fā)送
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
//using?System.Web.Security;
namespace?Senparc.Weixin.MP
{
????public?class?CheckSignature
????{
????????public?static?readonly?string?Token?=?“weixin“;//必須和公眾平臺(tái)的token設(shè)置一致,或在方法中指定
????????public?static?bool?Check(string?signature?string?timestamp?string?nonce?string?token?=?null)
????????{
????????????return?signature?==?GetSignature(timestamp?nonce?token);
????????}
????????public?static?string?GetSignature(string?timestamp?string?nonce?string?token?=?null)
????????{
????????????token?=?token????Token;
????????????var?arr?=?new[]?{?CheckSignature.Token?timestamp?nonce?}.OrderBy(z?=>?z).ToArray();
????????????var?arrString?=?string.Join(““?arr);
????????????//var?enText?=?FormsAuthentication.HashPasswordForStoringInConfigFile(arrString?“SHA1“);//使用System.Web.Security程序集
????????????var?sha1?=?System.Security.Cryptography.SHA1.Create();
????????????var?sha1Arr?=?sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
????????????StringBuilder?enText?=?new?StringBuilder();
????????????foreach?(var?b?in?sha1Arr)
????????????{
????????????????enText.AppendFormat(“{0:x2}“?b);
????????????}
????????????return?enText.ToString();
????????}
????}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????9728??2013-01-12?15:34??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\bin\Debug\Senparc.Weixin.MP.dll
?????文件??????15872??2013-01-12?15:34??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\bin\Debug\Senparc.Weixin.MP.pdb
?????文件???????1343??2013-01-12?18:12??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\CheckSignature.cs
?????文件????????356??2013-01-12?15:21??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\Article.cs
?????文件????????792??2013-01-12?20:05??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\RequestMessageba
?????文件????????277??2013-01-12?14:40??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\RequestMessageImage.cs
?????文件????????415??2013-01-12?14:39??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\RequestMessageLocation.cs
?????文件????????276??2013-01-12?14:38??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\RequestMessageText.cs
?????文件???????2423??2013-01-12?21:20??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\ResponseMessageba
?????文件????????521??2013-01-12?19:37??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\ResponseMessageNews.cs
?????文件????????235??2013-01-12?21:00??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Entities\ResponseMessageText.cs
?????文件????????435??2013-01-12?19:32??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Enums.cs
?????文件???????5138??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Helpers\EntityHelper.cs
?????文件????????538??2013-01-12?19:32??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Helpers\MsgTypeHelper.cs
?????文件???????6617??2013-01-12?19:37??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件????????687??2013-01-12?19:58??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\obj\Debug\Senparc.Weixin.MP.csproj.FileListAbsolute.txt
?????文件???????1520??2013-01-12?15:34??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\obj\Debug\Senparc.Weixin.MP.csprojResolveAssemblyReference.cache
?????文件??????14336??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\obj\Debug\Senparc.Weixin.MP.dll
?????文件??????30208??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\obj\Debug\Senparc.Weixin.MP.pdb
?????文件???????1372??2013-01-12?14:32??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Properties\AssemblyInfo.cs
?????文件???????1604??2013-01-13?00:01??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\RequestMessageFactory.cs
?????文件???????3126??2013-01-12?19:38??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP\Senparc.Weixin.MP.csproj
?????文件???????1461??2013-01-12?18:03??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.sln
?????文件??????14336??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin\Debug\Senparc.Weixin.MP.dll
?????文件??????30208??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin\Debug\Senparc.Weixin.MP.pdb
?????文件???????9216??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin\Debug\Senparc.Weixin.MP.Test.dll
?????文件??????22016??2013-01-12?21:50??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin\Debug\Senparc.Weixin.MP.Test.pdb
?????文件????????879??2013-01-12?18:03??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\CheckSignatureTest.cs
?????文件???????4425??2013-01-12?21:49??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\EntityHelperTest.cs
?????文件????????988??2013-01-12?19:35??微信公眾平臺(tái)(c#實(shí)現(xiàn))\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\MsgTypeHelperTest.cs
............此處省略633個(gè)文件信息
評(píng)論
共有 條評(píng)論