.NET 微信开放平台接口

2019-03-02 00:55|来源: 网路

<%@ WebHandler Language= "C#" Class= "WeixinInterface" %>
 
using System;
using System.Web;
 
public class WeixinInterface : IHttpHandler
{
     HttpContext context = null ;
     string postStr = "" ;
     public void ProcessRequest(HttpContext param_context)
     {
         context = param_context;
 
         //以写日志为荣,以打断点为耻.
         //WriteLog("before valid \n");
         //valid();//用于验证
         //WriteLog("after valid, before post \n");
         if (context.Request.HttpMethod.ToLower() == "post" )
         {
             System.IO.Stream s = context.Request.InputStream;
             byte [] b = new byte [s.Length];
             s.Read(b, 0, ( int )s.Length);
             postStr = System.Text.Encoding.UTF8.GetString(b);
             if (! string .IsNullOrEmpty(postStr))
             {
                 responseMsg(postStr);
             }
             //WriteLog("-------AfterResponseMsg:-------\n" + postStr);
         }
     }
 
     public void valid()
     {
         var echostr = context.Request[ "echoStr" ].ToString();
         if (checkSignature() && ! string .IsNullOrEmpty(echostr))
         {
             context.Response.Write(echostr);
             context.Response.End(); //推送...不然微信平台无法验证token
         }
     }
 
     public bool checkSignature()
     {
         var signature = context.Request[ "signature" ].ToString();
         var timestamp = context.Request[ "timestamp" ].ToString();
         var nonce = context.Request[ "nonce" ].ToString();
         var token = "faketoken" ;
         string [] ArrTmp = { token, timestamp, nonce };
         Array.Sort(ArrTmp);     //字典排序
         string tmpStr = string .Join( "" , ArrTmp);
         tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1" );
         tmpStr = tmpStr.ToLower();
         if (tmpStr == signature)
         {
             return true ;
         }
         else
         {
             return false ;
         }
     }
 
     public string GetSha1(System.Collections.Generic.List< string > codelist)
     {
         codelist.Sort();
         var combostr = string .Empty;
         for ( int i = 0; i < codelist.Count; i++)
         {
             combostr += codelist[i];
         }
         return EncryptToSHA1(combostr);
     }
 
     public string EncryptToSHA1( string str)
     {
         System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
         byte [] str1 = System.Text.Encoding.UTF8.GetBytes(str);
         byte [] str2 = sha1.ComputeHash(str1);
         sha1.Clear();
         (sha1 as IDisposable).Dispose();
         return Convert.ToBase64String(str2);
     }
 
     public void responseMsg( string postStr)
     {
         System.Xml.XmlDocument postObj = new System.Xml.XmlDocument();
         postObj.LoadXml(postStr);
         WriteLog( "responseMsg:-------" + postStr);
         var FromUserNameList = postObj.GetElementsByTagName( "FromUserName" );
         string FromUserName = string .Empty;
         for ( int i = 0; i < FromUserNameList.Count; i++)
         {
             if (FromUserNameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
             {
                 FromUserName = FromUserNameList[i].ChildNodes[0].Value;
             }
         }
         var toUsernameList = postObj.GetElementsByTagName( "ToUserName" );
         string ToUserName = string .Empty;
         for ( int i = 0; i < toUsernameList.Count; i++)
         {
             if (toUsernameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
             {
                 ToUserName = toUsernameList[i].ChildNodes[0].Value;
             }
         }
         var keywordList = postObj.GetElementsByTagName( "Content" );
         string Content = string .Empty;
         for ( int i = 0; i < keywordList.Count; i++)
         {
             if (keywordList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
             {
                 Content = keywordList[i].ChildNodes[0].Value;
             }
         }
         var time = DateTime.Now;
         var textpl = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName>" +
             "<FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>" +
             "<CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType>" +
             "<Content><![CDATA[欢迎来到微信世界---" + Content + "]]></Content><FuncFlag>0</FuncFlag></xml> " ;
         context.Response.Write(textpl);
         context.Response.End();
     }
     
     private DateTime UnixTimeToTime( string timeStamp)
     {
         DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime(1970, 1, 1));
         long lTime = long .Parse(timeStamp + "0000000" );
         TimeSpan toNow = new TimeSpan(lTime);
         return dtStart.Add(toNow);
     }
 
     private int ConvertDateTimeInt(System.DateTime time)
     {
         System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime( new System.DateTime(1970, 1, 1));
         return ( int )(time - startTime).TotalSeconds;
     }
 
     private void WriteLog( string strMemo)
     {
         string filename = "D:/WEBHOME/logs/log.txt" ;
         if (!System.IO.Directory.Exists( "D:/WEBHOME/logs/" ))
             System.IO.Directory.CreateDirectory( "D:/WEBHOME/logs/" );
         System.IO.StreamWriter sr = null ;
         try
         {
             if (!System.IO.File.Exists(filename))
             {
                 sr = System.IO.File.CreateText(filename);
             }
             else
             {
                 sr = System.IO.File.AppendText(filename);
             }
             sr.WriteLine(strMemo);
         }
         catch
         {
         }
         finally
         {
             if (sr != null )
                 sr.Close();
         }
     }
 
     public bool IsReusable
     {
         get
         {
             return false ;
         }
     }
}

 

1.如果是为了验证微信接口的token是否通过, 将valid注释去掉

2.如果要返回给用户值, 注释掉valid


转自:http://www.cnblogs.com/rexql/articles/3078906

相关问答

更多
  • 能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发
  • 只有服务号才有这9大接口,他能帮让服务号提供更好的服务,进行微信营销,望采纳 关注微商-唯购
  • 云海中腾OA办公自动化系统,基于java开发平台,MVP架构,配备各版本移动客户端,阿里钉钉、微信企业号接口,大量控件直接免费内置,产品包含200多个标准化的功能组件。 1、电子邮件、手机短信、即时通讯、论坛和讨论区等功能组件,建立起企业内部沟通和通讯平台; 2、公告通知、新闻管理、日程管理、工作计划、工作日志、投票管理等功能组件,建立起企业行政办公平台; 3、工作流系统提供灵活、可视化的“智能表单设计器”和“流程设计器”,提供强大的工作流引擎和业务引擎,提供完备的流程处理、监控、超时催办、数据分析等功能, ...
  • 不对,您误会了,我说的是微信公众平台的开发啊。可以选用php和.net开发,但是网上只有php开发的教程
  • 登录 注册 微信开放平台 首页 资源中心 管理中心 数据中心 帐号中心第三方平台 开启公测 全新的开放类型,让开发者帮助公众号解决垂直行业需求 了解更多 微信登录
  • 微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ...
  • 没有哪个好哪个不好一说,只有适不适合,语言只是工具,看你自己会什么,或者习惯使用什么语言,不过网上关于开发微信PHP的DEMO比.NET的多一些,遇到不会的比较好查资料。
  • 微网站开发模式教程:   第一步:申请消息接口   在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名。   第二步:验证URL有效性   开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:   开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回 echostr参数内容,则接入生效,成为开发 ...
  • 普通网站要改成微信网站,可以利用公共号的功能进行改造!一般需要启用微信公共号的开发者进行独立开发。 常见的微信网站一般需要公共号。需要调用微信公共号的功能,特别是菜单功能。 有很多微信公共号第三方平台往往有很多网站模板,都可以轻松实现微站的制作。并可以提供各种附加的增值功能,让微信网站更有利于营销。 使用第三方平台,需要将微信公共号绑定到平台网站。一般该类网站都会有说明和指导,研究一下自己也可以动手去操作。 也可以直接找专门的网站建设类的服务公司,付费设计,可以实现个性化需求。
  • 各个行业都有的。可以看下小猪CMS,,you shiyong