对于当前微信消息收发 使用C#实现较好的一个DEMO
Entities/Request*.cs 用于接收微信平台自动发送到服务器的实体(发送过来的是XML),包括文本、位置、图片三类
Entities/Response*.cs 用于反馈给发送人的信息实体(最终会转成XML),包括文本、新闻(图文)两类
Helpers/EntityHelper.cs 用于实体和XML之间的转换(由于其中有许多需要特殊处理的字段和类型,这里不能简单用XML序列化)
Helpers/MsgTypeHelper.cs 用于获取消息类型
CheckSignature.cs 验证请求合法性类
Enums.cs 各种枚举
RequestMessageFactory.cs 用于自动生成不同Request类型的实体,并作必要的数据填充
Senparc.Weixin.MP几个关键类及重要方法(按一般使用过程排序)
生成验证字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根据微信平台提供的数据,SHA1加密后的验证字符串(注意token必须跟公众平台的设置一直)
验证请求:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),验证请求是否合法
获取请求实体:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根据不同请求的类型,自动生成可用于操作的实体(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是请求枚举类型。
进行判断及各类操作。
根据需要,创建响应类型的实体,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本类型信息。
由于目前微信只接受XML的返回数据,所以在返回之前还需要做一次转换:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString();
至此整个微信公众账号的自动响应过程结束。
下面可以直接下载源代码及示例(示例是ASP.NET MVC 4,.NET 4.0,为了提高兼容性,Senparc.Weixin.MP源代码使用.NET 3.5):
压缩包中包含三个文件夹:Senparc.Weixin.MP、Senparc.Weixin.MP.BuildOutPut、Senparc.Weixin.MP.Sample,分别对应Senparc.Weixin.MP.dll源代码项目、Senparc.Weixin.MP.dll输出目录、Web示例,Web示例建议放到公网测试,让公众平台自动发送
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9728 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPinDebugSenparc.Weixin.MP.dll
文件 15872 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPinDebugSenparc.Weixin.MP.pdb
文件 1343 2013-01-12 18:12 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPCheckSignature.cs
文件 356 2013-01-12 15:21 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesArticle.cs
文件 792 2013-01-12 20:05 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessagebase.cs
文件 277 2013-01-12 14:40 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageImage.cs
文件 415 2013-01-12 14:39 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageLocation.cs
文件 276 2013-01-12 14:38 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageText.cs
文件 2423 2013-01-12 21:20 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessagebase.cs
文件 521 2013-01-12 19:37 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessageNews.cs
文件 235 2013-01-12 21:00 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessageText.cs
文件 435 2013-01-12 19:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEnums.cs
文件 5138 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPHelpersEntityHelper.cs
文件 538 2013-01-12 19:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPHelpersMsgTypeHelper.cs
文件 6617 2013-01-12 19:37 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugDesignTimeResolveAssemblyReferencesInput.cache
文件 687 2013-01-12 19:58 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.csproj.FileListAbsolute.txt
文件 1520 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.csprojResolveAssemblyReference.cache
文件 14336 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.dll
文件 30208 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.pdb
文件 1372 2013-01-12 14:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPPropertiesAssemblyInfo.cs
文件 1604 2013-01-13 00:01 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPRequestMessageFactory.cs
文件 3126 2013-01-12 19:38 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPSenparc.Weixin.MP.csproj
文件 1461 2013-01-12 18:03 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.sln
文件 14336 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.dll
文件 30208 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.pdb
文件 9216 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.Test.dll
文件 22016 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.Test.pdb
文件 879 2013-01-12 18:03 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestCheckSignatureTest.cs
文件 4425 2013-01-12 21:49 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestEntityHelperTest.cs
文件 988 2013-01-12 19:35 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestMsgTypeHelperTest.cs
............此处省略633个文件信息
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“;//必须和公众平台的token设置一致,或在方法中指定
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();
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9728 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPinDebugSenparc.Weixin.MP.dll
文件 15872 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPinDebugSenparc.Weixin.MP.pdb
文件 1343 2013-01-12 18:12 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPCheckSignature.cs
文件 356 2013-01-12 15:21 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesArticle.cs
文件 792 2013-01-12 20:05 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageba
文件 277 2013-01-12 14:40 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageImage.cs
文件 415 2013-01-12 14:39 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageLocation.cs
文件 276 2013-01-12 14:38 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesRequestMessageText.cs
文件 2423 2013-01-12 21:20 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessageba
文件 521 2013-01-12 19:37 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessageNews.cs
文件 235 2013-01-12 21:00 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEntitiesResponseMessageText.cs
文件 435 2013-01-12 19:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPEnums.cs
文件 5138 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPHelpersEntityHelper.cs
文件 538 2013-01-12 19:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPHelpersMsgTypeHelper.cs
文件 6617 2013-01-12 19:37 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugDesignTimeResolveAssemblyReferencesInput.cache
文件 687 2013-01-12 19:58 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.csproj.FileListAbsolute.txt
文件 1520 2013-01-12 15:34 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.csprojResolveAssemblyReference.cache
文件 14336 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.dll
文件 30208 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPobjDebugSenparc.Weixin.MP.pdb
文件 1372 2013-01-12 14:32 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPPropertiesAssemblyInfo.cs
文件 1604 2013-01-13 00:01 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPRequestMessageFactory.cs
文件 3126 2013-01-12 19:38 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MPSenparc.Weixin.MP.csproj
文件 1461 2013-01-12 18:03 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.sln
文件 14336 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.dll
文件 30208 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.pdb
文件 9216 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.Test.dll
文件 22016 2013-01-12 21:50 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestinDebugSenparc.Weixin.MP.Test.pdb
文件 879 2013-01-12 18:03 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestCheckSignatureTest.cs
文件 4425 2013-01-12 21:49 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestEntityHelperTest.cs
文件 988 2013-01-12 19:35 微信公众平台(c#实现)Senparc.Weixin.MPSenparc.Weixin.MP.TestMsgTypeHelperTest.cs
............此处省略633个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)