.net开发微信公众号(2)-验证服务器地址

  验证服务器地址

  上一篇我们说了如何开启开发者模式,填写了接收微信推送消息的URL,这一篇我们说下如何验证URL,只有验证完成了,URL才能正式启用。

  

  上面这些是微信公众平台开发文档里说的验证方法,非常清楚,小伙伴们一看就能明白。微信只给出了PHP的代码示例。杯具。

  我们就把它翻译成.net的,哈哈。

  1、新建一个解决方案,起一个MVC4的项目,如下图。这里是我建好的一个解决方案,在这里简单介绍一下。

  WechatService:画红框的项目,是一个MVC4的项目,接收微信发来的消息以及提供了一些外部程序调用的接口。如果WCF熟悉,也可以用WCF来做。

  Service.Common:放了一些通用的静态方法。

  Service.DB:和数据库相关的内容。

  Service.Wechat.Common:和微信平台接口相关的内容。

  Service.WechatPlatform:存一些微信账号信息的,比如Token之类的常量,如果需要使用多个微信公众平台,这里还可以用工厂模式扩展多平台。

  TestUnit:一个普通控制台程序,用来做简单的代码测试。

  

  2、在WechatService里面,我们新建一个空白control叫WechatController.cs文件,里面加一个Service的Action。

  

  调用一个Valid的方法,校验微信发来信息的有效性。我用完了就注释掉了。

1 //接受微信服务端发来的消息
2 public void Service()
3 {
4         Valid();
5 }    

  Valid的方法。

  WeLogger是个写txt日志文件的类。如果不用,可以直接删除整行。

 1         //用于申请“成为开发者”时向微信发送验证信息。
 2         public void Valid()
 3         {
 4             string echoStr = Request.QueryString["echoStr"];
 5             if (string.IsNullOrEmpty(echoStr))
 6             {
 7                 WeLogger.Debug("echoStr为空");
 8                 return;
 9             }
10             string signature = Request.QueryString["signature"];
11             string timestamp = Request.QueryString["timestamp"];
12             string nonce = Request.QueryString["nonce"];
13             if (WeUtility.CheckSignature(signature,timestamp,nonce))
14             {
15                 if (!string.IsNullOrEmpty(echoStr))
16                 {
17                     WeLogger.Info("echoStr值为:" + echoStr);
18                     Response.Write(echoStr);
19                     Response.End();
20
21                 }
22             }
23         }

  接下来在Service.Wechat.Common项目的WeUtility类里写一个CheckSignature静态方法

 1 public static bool CheckSignature(string signature, string timestamp, string nonce)
 2         {
 3             if (string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce))
 4             {
 5                 return false;
 6             }
 7             //这个变量要与网页里面填写的接口配置信息中填写的Token一致
 8             string Token = WeConst.Token;
 9             string[] ArrTmp = { Token, timestamp, nonce };
10             Array.Sort(ArrTmp);//排序
11             string tmpStr = string.Join("", ArrTmp);
12             tmpStr = UtilityFunc.SHA1_Hash(tmpStr);//对该字符串进行sha1加密
13             tmpStr = tmpStr.ToLower();
14
15             //获得加密后的字符串可与signature对比
16             //通过检验signature对请求进行校验,若正确,则原样返回echostr参数内容,接入生效,否则接入失败
17             if (tmpStr == signature)
18             {
19                 return true;
20             }
21             else
22             {
23                 return false;
24             }
25         }

  在Service.Common项目的UtilityFunc类里写一个SHA1_Hash静态方法

 1         /// <summary>
 2         /// 字符串转换SHA1
 3         /// </summary>
 4         /// <param name="str_sha1_in"></param>
 5         /// <returns></returns>
 6         public static string SHA1_Hash(string str_sha1_in)
 7         {
 8             SHA1 sha1 = new SHA1CryptoServiceProvider();
 9             byte[] bytes_sha1_in = UTF8Encoding.Default.GetBytes(str_sha1_in);
10             byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
11             string str_sha1_out = BitConverter.ToString(bytes_sha1_out);
12             str_sha1_out = str_sha1_out.Replace("-", "");
13             return str_sha1_out;
14         }

  这样就ok了,如果你在微信填的URL地址是http://xxx.xxx.xxx/Wechat/Service的话,就可以直接把程序打包发布到IIS上,然后登录微信公众平台,提交所有信息,验证通过即可激活开发者模式。

  Valid方法激活了开发者模式之后就可以直接删了或注释掉,以后不再用了。

  CheckSignature方法在之后接收所有微信推送过来的消息时验证都要用,所有都写到Service.Wechat.Common里了。

  

  这篇就结束了,非常简单。

  总结一下,在微信账号上填写好URL之后把验证代码写好发布,然后在微信账号里验证一下我们填的地址是有效的就激活成功了。

  PS:如果在Valid方法里不做任何验证,直接在response里输出echoStr,理论上验证也能通过。这里感觉可以偷个懒,小伙伴们可以试试。

  PS:洗洗睡了。

  

  

时间: 2024-12-27 19:54:41

.net开发微信公众号(2)-验证服务器地址的相关文章

.net开发微信公众号(1)-启用开发者中心

开篇介绍 今天新开一个微信公众号开发经验分享的系列,主要是和大家分享在.net下开发微信公众号后台的一些经验,希望能给在.net下做微开发的小伙伴们一些参考.最近由于工作需要,开发了一个微信公众账号.我本人其实一直是做winform方向开发的,asp.net接触的也不多,现学现卖,有啥不足或不对的地方,希望大家发邮件告诉我,[email protected],一起学习,一起进步. 微信公众号其实火了很长一段时间了,应该是从2012开始火起来的.最近正好做一个这样的项目,在网上找资料的时候发现大家

PHP开发微信公众号(一)二维码的获取

要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 申请成功后,你会得到一个appID 和 appsecret,这个就相当于你的开发者账号和密码. 开发模式如下图: 1.Access_Token的获取 对于这个access_token就是一个访问标识,其实不用想得太高深,它就好比是你进图书馆需要的图书卡:

Thinkphp5 微信公众号token验证不成功的原因

最近要启动微信项目,上个月就开始了解微信的开发,这个月要启动项目,配置微信公众号信息一直失败.为此,我甚至手工写了微信提交过来的记录,如: &timestamp=1510210523&nonce=2414550015&signature=30b9eeb6b1134d0a53623375c48ca734c41facb5&echostr=6863786913073725439 我眼睛看着验证信息没错,输出的echostr跟get提交来的一模一样,但是还是会出错.忍无可忍,一直无

Spring Boot 开发微信公众号后台

Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前一阵子上线了一个公众号内回复口令解锁网站文章的功能,还有之前就有的公众号内回复口令获取超 2TB 免费视频教程的功能(免费视频教程),这两个都是松哥基于 Spring Boot 来做的,最近松哥打算通过一个系列的文章,来向小伙伴们介绍下如何通过 Spring Boot 来开发公众号后台. 1. 缘起

从零开始开发微信公众号系列篇一:微信测试号申请

从零开始开发微信公众号系列片将会讲述微信账号申请,微信各个接口的实现,同时会为每个接口提供实现的demo.同时,此系列博文也不乏引用博友的一些思想内容,如有问题,欢迎联系于我,谢谢!由于该系列博文是工作之余总结的,有时没及时更新还望博友监督,提醒以达到共勉.俗话说,磨刀不误砍柴工,要进行微信公众号开发首先你得做好以下准备工作,那现在我们先来磨刀.很多人为微信开发账号发愁,这一点不用担心,腾讯还是挺人性化的,作为开发者可以申请测试号来进行微信公众号开发,这样我们就可以不用花冤枉钱去申请微信的订阅号

用java开发微信公众号:接收和被动回复普通消息(三)

上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息2.图片消息3.语音消息4.视频消息5.小视频消息6.地理位置消息7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息2.回复图片消息3.回复语音消息4.回复视频消息5.回复音乐消息6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本来就是一个交互场景,一

自己的服务器通过微信公众号Token验证测试的代码(Python版)

我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意把Token的值改成你自己的值,然后在微信后台填对你的服务器的公网IP,提交就可以通过验证了 #coding=utf-8 html = '''True ''' import socket import signal import errno import re import os import ha

C#开发微信公众号-学习笔记

由于最近要做微信服务号的开发,所以开始找相关说明和接口文档开始学,故把学习过程及注意事项记录一下,帮助想学习的快速上手.废话不多少了,直接上干货! 1.申请微信公众号 这个就不需要多说了吧,大家直接照着提示步骤走就行 2.建立服务器和微信端的链接 这一步的操作其实就是确认一下你的公众号跟你的服务器匹配成功了,所要做的工作其实很简单,就是微信会给你的服务器发一个请求,传过去几个参数,然后你把其中的timestamp,nonce参数获取到,在把你在微信设置服务器的页面填写的token这三个值按字典排

利用H5开发微信公众号

一. 首先授权配置 公众号设置 -->功能设置 设置业务域名!  这里的MP_verify_w7tdZrafqhkK9Mcj.txt文件,需要放到你项目的根目录下,例子:你的项目war包叫 test.war ,里面包含了src,WEB-INFO两个文件夹,则把MP_verify_w7tdZrafqhkK9Mcj.txt放到这两个文件夹的同级目录下;即现在test.war下有两个文件夹一个txt文件:src,WEB-INFO,MP_verify_w7tdZrafqhkK9Mcj.txt. 后面就需