asp.net微信公众平台开发

ASP.NET 微信公众号开发 DEMO 本例使用asp.net完成公众号的验证 及消息接受和回复。可以通过本架构进行更为复杂的开发。为使用C#开发微信公众号的同学提供指引 立即下载


http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97 

微信公众平台接口指南

微信公众平台的开发比较简单,首先是网址接入

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

参数描述
signature微信加密签名
timestamp时间戳
nonce随机数
echostr随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

加密/校验流程:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
<pre class="csharp" name="code">   /// <summary>
    /// 验证签名
    /// </summary>
    /// <param name="signature"></param>
    /// <param name="timestamp"></param>
    /// <param name="nonce"></param>
    /// <returns></returns>
    public static 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();
    }
 
接入后是消息推送当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上。
<pre class="html" name="code">    protected void Page_Load(object sender, EventArgs e)
    {

        if (Request.HttpMethod.ToUpper() == "GET")
        {
            // 微信加密签名  
            string signature = Request.QueryString["signature"];
            // 时间戳  
            string timestamp = Request.QueryString["timestamp"];
            // 随机数  
            string nonce = Request.QueryString["nonce"];
            // 随机字符串  
            string echostr = Request.QueryString["echostr"];
            if (WeixinServer.CheckSignature(signature, timestamp, nonce))
            {
                Response.Write(echostr);
            }

        }
        else if (Request.HttpMethod.ToUpper() == "POST")
        {

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

           processRequest(xml);
        }

 
    }


    /// <summary>
    /// 处理微信发来的请求 
    /// </summary>
    /// <param name="xml"></param>
    public void processRequest(String xml)
    {
        try
        {

            // xml请求解析  
            Hashtable requestHT = WeixinServer.ParseXml(xml);

            // 发送方帐号(open_id)  
            string fromUserName = (string)requestHT["FromUserName"];
            // 公众帐号  
            string toUserName = (string)requestHT["ToUserName"];
            // 消息类型  
            string msgType = (string)requestHT["MsgType"];

            //文字消息
            if (msgType == ReqMsgType.Text)
            {
               // Response.Write(str);

               string content = (string)requestHT["Content"];
                if(content=="1")
                {
                     // Response.Write(str);
                    Response.Write(GetNewsMessage(toUserName, fromUserName));
                    return;
                }
                if (content == "2")
                {
                    Response.Write(GetUserBlogMessage(toUserName, fromUserName));
                     return;
                }
                if (content == "3")
                {
                    Response.Write(GetGroupMessage(toUserName, fromUserName));
                   return;
                }
                if (content == "4")
                {
                    Response.Write(GetWinePartyMessage(toUserName, fromUserName));
                    return;
                }
                Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); 

           }
           else if (msgType == ReqMsgType.Event)
           {
               // 事件类型  
               String eventType = (string)requestHT["Event"];
               // 订阅  
               if (eventType==ReqEventType.Subscribe)
               {
                   
                   Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,"));
                   
               }
               // 取消订阅  
               else if (eventType==ReqEventType.Unsubscribe)
               {
                   // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息  
               }
               // 自定义菜单点击事件  
               else if (eventType==ReqEventType.CLICK)
               {
                   // TODO 自定义菜单权没有开放,暂不处理该类消息  
               }  
           }
           else if (msgType == ReqMsgType.Location)
           {
           }

  
        }
        catch (Exception e)
        {
            
        }
    }<PRE class=csharp name="code">    protected void Page_Load(object sender, EventArgs e)
    {

        if (Request.HttpMethod.ToUpper() == "GET")
        {
            // 微信加密签名  
            string signature = Request.QueryString["signature"];
            // 时间戳  
            string timestamp = Request.QueryString["timestamp"];
            // 随机数  
            string nonce = Request.QueryString["nonce"];
            // 随机字符串  
            string echostr = Request.QueryString["echostr"];
            if (WeixinServer.CheckSignature(signature, timestamp, nonce))
            {
                Response.Write(echostr);
            }

        }
        else if (Request.HttpMethod.ToUpper() == "POST")
        {

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

           processRequest(xml);
        }

 
    }


    /// <summary>
    /// 处理微信发来的请求 
    /// </summary>
    /// <param name="xml"></param>
    public void processRequest(String xml)
    {
        try
        {

            // xml请求解析  
            Hashtable requestHT = WeixinServer.ParseXml(xml);

            // 发送方帐号(open_id)  
            string fromUserName = (string)requestHT["FromUserName"];
            // 公众帐号  
            string toUserName = (string)requestHT["ToUserName"];
            // 消息类型  
            string msgType = (string)requestHT["MsgType"];

            //文字消息
            if (msgType == ReqMsgType.Text)
            {
               // Response.Write(str);

               string content = (string)requestHT["Content"];
                if(content=="1")
                {
                     // Response.Write(str);
                    Response.Write(GetNewsMessage(toUserName, fromUserName));
                    return;
                }
                if (content == "2")
                {
                    Response.Write(GetUserBlogMessage(toUserName, fromUserName));
                     return;
                }
                if (content == "3")
                {
                    Response.Write(GetGroupMessage(toUserName, fromUserName));
                   return;
                }
                if (content == "4")
                {
                    Response.Write(GetWinePartyMessage(toUserName, fromUserName));
                    return;
                }
                Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); 

           }
           else if (msgType == ReqMsgType.Event)
           {
               // 事件类型  
               String eventType = (string)requestHT["Event"];
               // 订阅  
               if (eventType==ReqEventType.Subscribe)
               {
                   
                   Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,"));
                   
               }
               // 取消订阅  
               else if (eventType==ReqEventType.Unsubscribe)
               {
                   // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息  
               }
               // 自定义菜单点击事件  
               else if (eventType==ReqEventType.CLICK)
               {
                   // TODO 自定义菜单权没有开放,暂不处理该类消息  
               }  
           }
           else if (msgType == ReqMsgType.Location)
           {
           }

  
        }
        catch (Exception e)
        {
            
        }
    }</PRE><BR>
<PRE></PRE>
<BR>
<BR>



        
C# asp.net微信公众号开发源码 C# asp.net微信公众号开发源码, 可完成微信公众号的一些开发接口 立即下载

相关推荐

Asp.Net版微信公众号开发源码Demo(入门版+进阶版)

本例使用asp.net完成公众号的验证 及消息接受和回复。可以通过本架构进行更为复杂的开发。同时又提供了进阶版希望能帮助到大家,为初学者提供指引的同时,又能深入研究升级公众号功能。

Asp.net core(c#)实现在微信公众号定时推送模板消息(包括获取access_token、openid与unionid)

至此,在微信公众号上进行模板添加的步骤已经完成,大家可以参考,详细添加可以看看官方介绍。到这里全部介绍完毕,大家可以参考一下!//设置时间间隔为1分钟执行代码。

nfkjdx的博客 5381

asp.net实现微信公众账号接口开发教程

说起微信公众帐号,大家都不会陌生,使用这个平台能给网站或系统增加一个新亮点,直接进入正题吧,在使用之前一定要仔细阅读官方API文档。 使用.net实现的方法: //微信接口地址 页面代码: weixin _wx = new weixin(); string postStr = ; if (Request.HttpMethod.ToLower() == post) { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (i

【已验证】使用.net做微信公众号后台

asp.net mvc 后台 + 微信开发入门 的研究 本人小白.net出身,第一次做微信开发。又不会php和别的语言。只有用.net做了。 打开基本设置页面,填写如下: 点击提交,会提示错误。提交不成功。 那么 ,我们就想到,要写一个web程序处理这个请求了。 打开vs2017,新建一个asp.net mvc应用程序。添加一个HomeControl ,在HomeControl里面添加一个public void wx(){}方法。 呃,这个步骤不懂的话,建议先去学一...

zgscwxd的博客 1725

ASP.NET微信开发(接口指南)

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数: 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 加密/校验流程: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 /

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 505

微信公众平台开发(一)——接入指南(asp.net)

第一步:申请消息接口 在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。 第二步:验证URL有效性 开发者提交信息后,微信服务器将发送GET请求到填写的URL上...

weixin_30636089的博客 469

自动驾驶关键技术(一):时间敏感网络TSN

时间敏感网络TSN的基本概念、协议族介绍和开发流程。

3079

开始一:C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)

C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)的代码以及我所遇到的问题 - huhuhuo 时间 2014-08-24 16:44:00           原文                  http://www.cnblogs.com/linhan/p/3932923.html 【引言】 利用asp.net搭建微信公众平台的案例并不多,微信官方

彭涛的专栏 2203

从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

材料准备 云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统)) 环境搭建 1. Python 3.7 话不多说直接上代码 sudo su yum -y install git yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

zhi_qian的博客 5647

从FER2013到AffectNet:表情识别数据集十年演进史与你的项目选型攻略

本文回顾了从FER2013到AffectNet等主流人脸表情识别数据集的十年演进历程,详细分析了各数据集的特点、适用场景及技术突破。针对不同项目需求,提供了从移动端应用到高精度研究的选型策略,特别强调AffectNet在现代FER项目中的核心价值,并给出混合数据集构建的实战方案。

weixin_26808439的博客 521

asp.net微信公众平台开发的技术研究

从我的研究出发,不拘泥与技术细节的阐述。 当时接手微信公众平台开发还觉得这技术比较新,查找资料之后才发现是最近比较火。其实技术已经出现两三年了。简单来说是微信提供给我们的平台,使得企业服务号或者个人订阅号能够利用微信这个平台进行开发,为关注的用户提供服务。 做微信公众平台的开发要了解三大块:你自己的服务器,微信服务器,用户微信客户端。 你和你的客户之间的交流都是通过微信服务器。微信服务器的作

yutianxin123的专栏 1190

手把手教你用Apple Developer App完成苹果开发者账号注册(含证件验证失败解决方案)

本文详细指导如何通过Apple Developer App完成苹果开发者账号注册,特别针对证件验证失败问题提供解决方案。从准备工作到注册流程,再到验证失败的处理方法,帮助开发者顺利完成注册,避免常见错误。

moss5的博客 1156

ASP.NET MVC5微信公众平台整合开发实战教程

《ASP.NET MVC5&微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)》课程讲师:57Code课程分类:ASP.NET MVC适合人群:中级课时数量:29课时用到技术:深入MVC开发模式、C#核心语言特性、C#核心语言特性(二)、视图引擎Razor涉及项目:体育商店、微信公众平台开发咨询QQ:1337...

weixin_34087301的博客 459

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4758

精度0.01%决定续航多20km|新能源汽车研发测试:功率分析仪到底有多硬核?

新能源汽车测试、功率分析仪、电驱系统、效率MAP、谐波THD、GB/T18488、CLTC工况、三电测试、台架标定、能量流分析。中的核心作用,用公式、思维导图、实战金句与避坑指南,帮研发测试人员把准数据、提效率、降返工,看完就能落地用。点击关注,进公众号主页查看历史文章,**台架接线图、效率MAP模板、GB/T18488测试清单等。优化弱磁/调制策略,高效区占比提升5%,CLTC续航直接+8~20km。同样工况,两次数据差0.8%,报告根本没法交。结果:数据飘、定位慢、反复返工、认证不过。

优快云-新能源汽车研发测试专业博主 169

ASP.NET MVC4 微信公众平台开发测试一: 验证

ASP.NET MVC4 微信公众平台开发测试一: 验证 背景,想做一个微信公众号的自动回复系统,于是想动手写一下。记录这些,是一边写程序一边写在这里,也是记录一下自己的思路。 微信公众平台开发时,需要进行接口配置,此时需要验证信息,填写信息完毕,会按进行验证。 因开发尚处测试阶段,使用微信的沙箱测试号进行测试。 服务器端,建立了...

weixin_30906701的博客 244

乌鸦搜索算法(CSA)详解:从鸟类智能到优化引擎

乌鸦搜索算法(Crow Search Algorithm,CSA)是2016年由Askarzadeh等人提出的一种新型元启发式优化算法,该算法灵感来源于自然界中乌鸦群体的智能觅食行为。这一创新性算法已成为群体智能优化算法家族中的重要成员,与粒子群优化、遗传算法等传统算法相比,CSA具有原理新颖、参数设置简单、全局搜索能力强等特点。

qq_42212808的博客 1278

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

微信的好东西,提供了很大的平台去发挥,公司最近推出微信公众账号,也接触了一些东西, 最终决定用asp.net来开发服务端程序。 微信公众平台的API很简单,利用XML来规范格式,并且所有的数据都在CDATA中,不会担心 转换的问题,所以开发出一个简单的应用确实是很简单的,难得是结合运营把账号做大。 消息接口指南中介绍了如何成为开发者:网址接入认证、消息推送和消息回复...

anjie9876的博客 117

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ASP.NET MVC5微信公众平台整合开发实战视频教程

主要讲解微信公众平台整合开发实战,深入MVC开发模式视频引擎Razor的基础上开发微信公众平台,了解最前言的技术。 下载地址:百度网盘下载 转载于:https://www.cnblogs.com/raineliflor/p/10398308.html...

weixin_30550081的博客 447

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

asp.net 微信公众平台开发(一)公众账号的注册、设置、登录

微信公众平台的传输机制。 首先,我们是开发者,我们需要面对的对象有三个,我们的服务器、微信服务器、微信客户端(用户)。 当用户发送一条请求过来时,首先通过微信服务器,再由微信服务器向我们的服务器发起请求,我们的服务器通过对请求处理后返回相应的结果到微信服务器,再由微信服务器返回消息给用户。

ColorWaterer的专栏 1718
上一篇: 微信Token验证
下一篇: 汉字在线转化unicode编码
GoodShot
博客等级 码龄22年 968粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值