微信公众号接收普通消息/C#

看了这么相关的内容,都没有比较完整的说明,只能自己拼凑凑.分享一下给大伙.代码简单易看明白.

这里我没有正式的服务号就先用测试代替一下.

在开发之前看下官方文档. (https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html)

一开始看官方文档真的是有小小的懵,文档只给出 xml格式的代码,还有一些文字,没有头没尾.后来看了一些相关信息后发现是需要配置微信的环境的.上教程:

打开测试-配置信息/
这里的url是放你的项目的一个自己写的请求地址/token是为了安全验证随便写.
注:url不可以放本地地址例如192.168.0.1,这些是不可以的,需要放域名,推荐使用网址穿透进行测试,网址穿透例如花生壳这些软件等等
在这里插入图片描述
第一次进入提交验证
在这里插入图片描述

上代码:

public string ProcessRequest()
{
	//这个是第一进入时需要验证一下
    if (Request.HttpMethod == "GET")
    {
        //wx响应携带参数
        string signature = Request.QueryString["signature"];
        string timestamp = Request.QueryString["timestamp"];
        string nonce = Request.QueryString["nonce"];
        string echostr = Request.QueryString["echostr"];
        //微信签名加密
        if (Encryption(signature, timestamp, nonce, echostr))
        {
            return echostr;//原来有的拐带的参数就可以配置成功
        }
    }

    if (Request.HttpMethod == "POST")
    {
        //接收响应xml转换成字符xml字符串
        Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
        byte[] requestByte = new byte[requestStream.Length];
        requestStream.Read(requestByte, 0, (int)requestStream.Length);
        string requestStr = Encoding.UTF8.GetString(requestByte);//接收到的xml字符串

        string XML = "";
        if (!string.IsNullOrEmpty(requestStr))//粉丝发送消息给你
        {
            //反序列化xml
          	//这里有一段处理xml字符代码,因我这处理比过于复杂就不展示了,可自行查看xml处理字符的相关资料
          	
			//[处理xml代码...]

            //粉丝发送消息类型处理
            switch (info.MsgType)  //msgType-处理好后的得到字段
            {
                case "text"://文本
                	//粉丝发来文本消息/根据自己逻辑需要进行处理
                    string content = info.Content;
                    
                    //回复粉丝内容/内容必须是xml格式
                    XML = string.Format(Message_Text, info.FromUserName, info.ToUserName, DateTime.Now.ToBinary(), "知道啦知道啦,我是超级无敌大帅哥!");
                    break;
                case "image"://图片

                    break;
                case "event"://事件

                    break;
                default:
                    break;
            }
        }

        Response.Write(XML);
        Response.End();
    }
    return "验证失败";
}
/// <summary> 微信签名加密
/// </summary>
/// <returns></returns>
public static bool Encryption(string signature, string timestamp, string nonce, string echostr) 
{
    string token = "huangzhuoda";//跟公众号保持一致

    //将token、timestamp、nonce三个参数进行字典序排序
    List<string> list = new List<string>();
    list.Add(token);
    list.Add(timestamp);
    list.Add(nonce);
    list.Sort();

    //将三个参数字符串拼接成一个字符串进行sha1加密
    string res = string.Join("", list.ToArray());
    Byte[] data1ToHash = Encoding.ASCII.GetBytes(res);
    byte[] hashvalue1 = ((HashAlgorithm)CryptoConfig.CreateFromName("SHA1")).ComputeHash(data1ToHash);

    StringBuilder sb = new StringBuilder();
    foreach (byte b in hashvalue1)
    {
        sb.Append(b.ToString("x2"));
    }
    //string s = BitConverter.ToString(hashvalue1).Replace("-", string.Empty).ToLower();
    if (signature == sb.ToString())
    {
        return true;
    }
    else
    {
        return false;
    }
}
/// <summary>
/// 普通文本消息
/// </summary>
public static string Message_Text
{
    get
    {
        return @"<xml>
                <ToUserName><![CDATA[{0}]]></ToUserName>
                <FromUserName><![CDATA[{1}]]></FromUserName>
                <CreateTime>{2}</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[{3}]]></Content>
                </xml>";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值