童鞋们直接看代码吧:(我这里是ashx处理程序写的类,开发过网站的一般都知道)

<%@ WebHandler Language="C#" class="weixin" %>

using System;
using System.Web;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Security.Policy;
using System.Collections;
using System.Xml;

public class weixin : IHttpHandler {
    protected string TOKEN = "asdasd"; //TOKEN 必须跟你在微信公众平台上写的token是一致的
    public void ProcessRequest (HttpContext context) {
        //context.Response.ContentType = "text/plain";
        context.Response.Clear(); //清除所有之前生成的Response内容
        Handlewinxin(context);  //进入专业微信处理程序
        context.Response.End();
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="content"></param>
    public void Handlewinxin(HttpContext context)
    {
        
        if (context.Request.HttpMethod.ToUpper() == "GET")
        {
            // 微信加密签名  
            string signature = context.Request.QueryString["signature"];
            // 时间戳  
            string timestamp = context.Request.QueryString["timestamp"];
            // 随机数  
            string nonce = context.Request.QueryString["nonce"];
            // 随机字符串  
            string echostr = context.Request.QueryString["echostr"];
            if (CheckSignature(signature, timestamp, nonce))
            {
                context.Response.Write(echostr);
            }
            
        }
        else if (context.Request.HttpMethod.ToUpper() == "POST")
        {

StreamReader stream = new StreamReader(context.Request.InputStream);
            string xml = stream.ReadToEnd();

processRequest(xml, context);
        }
    }
    /// <summary>
    /// 验证签名
    /// </summary>
    /// <param name="signature"></param>
    /// <param name="timestamp"></param>
    /// <param name="nonce"></param>
    /// <returns></returns>
    public bool CheckSignature(String signature, String timestamp, String nonce)
    {
        String[] arr = new String[] { TOKEN, timestamp, nonce };
        // 将token、timestamp、nonce三个参数进行字典序排序  
        Array.Sort<String>(arr);

StringBuilder content = new StringBuilder();
        for (int i = 0; i < arr.Length; i++)
        {
            content.Append(arr[i]);
        }

String tmpStr = SHA1_Encrypt(content.ToString());

// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信  
        return tmpStr != null ? tmpStr.Equals(signature) : false;
    }

/// <summary>
    /// 使用缺省密钥给字符串加密
    /// </summary>
    /// <param name="Source_String"></param>
    /// <returns></returns>
    public static string SHA1_Encrypt(string Source_String)
    {
        byte[] StrRes = Encoding.Default.GetBytes(Source_String);
        HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
        StrRes = iSHA.ComputeHash(StrRes);
        StringBuilder EnText = new StringBuilder();
        foreach (byte iByte in StrRes)
        {
            EnText.AppendFormat("{0:x2}", iByte);
        }
        return EnText.ToString();
    }
    /// <summary>
    /// 处理微信发来的请求
    /// </summary>
    /// <param name="xml"></param>
    public void processRequest(String xml,HttpContext context)
    {
        //待下一章节全部贴出代码
    }

}

token验证-微信公众平台开发3(asp.net)的更多相关文章

  1. 微信公众平台开发小记(ASP.NET)

    微信的好东西,提供了很大的平台去发挥,公司最近推出微信公众账号,也接触了一些东西, 最终决定用asp.net来开发服务端程序. 微信公众平台的API很简单,利用XML来规范格式,并且所有的数据都在CD ...

  2. 基于PHP的微信公众平台开发(TOKEN验证,消息回复)

    微信公众平台开发 实现步骤: 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAE ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  4. 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...

  5. 微信公众平台开发教程(一)_微信接入校验以及token获取

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础. 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 ...

  6. php版微信公众平台开发之验证步骤实例详解

    本文实例讲述了php版微信公众平台开发之验证步骤.分享给大家供大家参考,具体如下: 微信公众平台开发我们现在做得比较多了,这里给各位介绍的是一个入门级别的微信公众平台验证基础知识了,有兴趣的和小编来看 ...

  7. 微信公众平台开发(26) ACCESS TOKEN

    本文介绍微信公众平台下Access Token的概念及获取方法. 一.Access Token access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常 ...

  8. 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法

    微信公众平台开发时,须要验证消息是否来自微信server,这要用到sha1加密算法.官网上给的是php的sha函数,C++中要用到以下这个函数: 一.引入头文件: #include<openss ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...

随机推荐

  1. UITextView如何关闭键盘

    UITextField可以响应键盘上的完成按钮,关闭键盘,而UITextView不一样,它的return按钮或者Done按钮执行的是换行功能,不能达到关闭键盘的目的.解决方法有两个:一个是通过捕捉to ...

  2. CentOS学习笔记--vi程序编辑器

    vi程序编辑器 Linux里经常需要修改一些配置文件,这时就需要一个编辑器,几乎所有的Linux版本都提供了vi这个编辑器. 文件内容查阅cat命令 如果我们要查阅一个文件的内容时,该如何是好呢?这里 ...

  3. CSS3实现轮播图效果

    CSS3实现轮播图主要是由css:background-position和css3:animation实现.且实现此轮播需要一张四个图横着相连的图片. 注(Internet Explorer 10.F ...

  4. 兼容firefox的iframe高度自适应代码

    网上关于iframe高度自适应的代码有很多,但比较杂乱,本文根据实用性整理了以下代码: JavaScript部分: 折叠JavaScript Code复制内容到剪贴板 <script type= ...

  5. C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  6. c#中判断对象为空的几种方式(字符串等)

    (1)先了解几个与空类型相关的关键字和对象  Null : 关键字表示不引用任何对象的空引用,它是所有引用类型变量的默认值,在2.0版本之前也就只有引用变量类型可以为null,如(string a=n ...

  7. encodeURIComponent编码后java后台的解码

    解决方法一: JavaScript: window.self.location="searchbytext.action?searchtext="+encodeURICompone ...

  8. nginx学习笔记1

    Nginx是使用c语言编写的,查看nginx编译时参数的设定  使用nginx -V命令查看 可以使用nginx -h命令查看命令帮助 配置文件中将worker process绑定到cpu的特定内核上 ...

  9. 深入浅出MongoDB(一)NoSQL

    从本文开始,我们一起学习一下MongoDB相关内容,在学习MongoDB之前,首先要做的就是学习NoSQL. 为什么要学习NoSQL,原因很简单,因为MongoDB是NoSQL数据库的一种,换言之,如 ...

  10. python restful 框架之 eve 外网访问设置

    官网地址: http://python-eve.org/ 配合mongodb进行crud使用起来很方便,但是部署的时候遇到一个问题,按照官网和Deom说的,servername使用 '127.0.0. ...