C#(CSharp) 微信公众号开发一 基本配置

5 篇文章 0 订阅
1 篇文章 0 订阅

准备工作:

打开官网创建自己的微信公众号 官网

创建公众号完成打开基本配置->填写服务器配置

1.

说明:

URL: 填写自己的服务器的地址,可以接收到微信服务器发送的信息                                                笔者使用腾讯云的云服务器,新手还挺便宜的 腾讯云官网

Token: 用来验证微信发送的信息和获得公众号的Access_Token

EncodingAESKey: 加密密钥,微信回通过这个密钥把数据加密后,把数据传送给自己的服务器,自己的服务器需要通过这个密钥加密(前提是开启了安全模式),如果是明文模式不需要使用加密加密

消息加密解密方式:   明文模式:传送的数据不加密,直接传送,缺点就是不安全,容易被盗

                                 安全模式:微信回把数据进行EncodingAESKey这个密钥加密后传递给自己的服务器,服务器收到数据需要解密,这个安全系数高,传送的都是密文

 2.

配置完成之后,提交微信服务器需要验证自己的服务器地址是否可用

微信服务器会给URL这个服务器地址发送一个Get请求

参数内容:

参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

 验证这个信息是微信服务器发送过来的验证信息

方法一:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密 

 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

  static void Main(string[] args)
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                AddAddress("http://+:8080/WeChatThePublic/");

            HttpListener httpListener = new HttpListener();
            httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
            httpListener.Prefixes.Add("http://+:8080/WeChatThePublic/");//绑定地址
            httpListener.UnsafeConnectionNtlmAuthentication = true;
            httpListener.Start();


            while (true)
            {
                var context = httpListener.GetContext();//接受HTTP信息
                HttpListenerRequest aaa = context.Request;

                Console.WriteLine(aaa.HttpMethod);
                switch (aaa.HttpMethod)
                {
                    case "GET":
                        //这个是认证服务器的
                         CheckServer(context, aaa);
                        break;
                }
            }
        }


        private static void CheckServer(HttpListenerContext context, HttpListenerRequest aaa)
        {
            string signature = aaa.QueryString["signature"];

            string timestamp = aaa.QueryString["timestamp"];
            string nonce = aaa.QueryString["nonce"];
            string echostr = aaa.QueryString["echostr"];

            string[] strs = new string[] { "4", timestamp, nonce };
            Array.Sort(strs);
            string j = string.Join("", strs);

            //创建SHA1加密算法对象
            SHA1 sha1 = SHA1.Create();
            //将原始密码转换为字节数组
            byte[] originalPwd = Encoding.UTF8.GetBytes(j);
            //加密
            byte[] key = sha1.ComputeHash(originalPwd);


            StringBuilder sub = new StringBuilder();
            foreach (var t in key)
            {
                sub.Append(t.ToString("x2"));//转16进行显示
            }

            //如果加密后的信息等于signature,就是微信发送的信息
            if (string.Equals(sub.ToString(), signature, StringComparison.InvariantCultureIgnoreCase))
            {
                using (var response = context.Response)
                {
                    //是微信的服务器发送的信息,就把这个信息返给他
                    response.OutputStream.Write(Encoding.UTF8.GetBytes(echostr));
                }
            }

        }

 

方法二:

你可以直接把echostr这个值直接返回给微信服务器通过验证,但是这么做的话,以后有服务器发送了Get请求,就不知道是哪个服务器发送的啦

 static void Main(string[] args)
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                AddAddress("http://+:8080/WeChatThePublic/");

            HttpListener httpListener = new HttpListener();
            httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
            httpListener.Prefixes.Add("http://+:8080/WeChatThePublic/");//绑定地址
            httpListener.UnsafeConnectionNtlmAuthentication = true;
            httpListener.Start();


            while (true)
            {
                var context = httpListener.GetContext();//接受HTTP信息
                HttpListenerRequest aaa = context.Request;

                Console.WriteLine(aaa.HttpMethod);
                switch (aaa.HttpMethod)
                {
                    case "GET":
                        //这个是认证服务器的
                         CheckServer(context, aaa);
                        break;
                }
            }
        }


        private static void CheckServer(HttpListenerContext context, HttpListenerRequest aaa)
        {
            string signature = aaa.QueryString["signature"];

            string timestamp = aaa.QueryString["timestamp"];
            string nonce = aaa.QueryString["nonce"];
            string echostr = aaa.QueryString["echostr"];

            using (var response = context.Response)
            {
                //是微信的服务器发送的信息,就把这个信息返给他
                response.OutputStream.Write(Encoding.UTF8.GetBytes(echostr));
            }
        }

 这样就可以通过微信的验证啦

关注微信公众号【浪子独白】 回复 “c#微信公众号源码”

可以获得本人封装一套微信公众号开发源码!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值