欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【.net开发微信公众平台实例教程】,下面是详细的讲解!
.net开发微信公众平台实例教程
/// <summary>/// 验证微信签名
/// </summary>
/// <returns></returns>
private bool CheckSignature()
{
string signature=Request.QueryString["signature"].ToString();
string timestamp=Request.QueryString["timestamp"].ToString();
string nonce=Request.QueryString["nonce"].ToString();
string[] ArrTmp={ Token, timestamp, nonce };
Array.Sort(ArrTmp);//字典排序
string tmpStr=string.Join("", ArrTmp);
tmpStr=FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//对该字符串进行sha1加密
tmpStr=tmpStr.ToLower();//对字符串中的字母部分进行小写转换,非字母字符不作处理
//WriteLog(tmpStr, Server);//计入日志
if (tmpStr==signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
{
return true;
}
else
return false;
}
/// <summary>
/// 获取post返回来的数据
/// </summary>
/// <returns></returns>
private string PostInput()
{
Stream s=System.Web.HttpContext.Current.Request.InputStream;
byte[] b=new byte[s.Length];
s.Read(b, 0, (int)s.Length);
return Encoding.UTF8.GetString(b);
}
/// <summary>
///返回微信信息结果
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(string weixinXML)
{
try
{
XmlDocument doc=new XmlDocument();
doc.LoadXml(weixinXML);//读取XML字符串
XmlElement rootElement=doc.DocumentElement;
XmlNode MsgType=rootElement.SelectSingleNode("MsgType");//获取字符串中的消息类型
string resxml="";
if (MsgType.InnerText=="text")//如果消息类型为文本消息
{
var model=new
{
ToUserName=rootElement.SelectSingleNode("ToUserName").InnerText,
FromUserName=rootElement.SelectSingleNode("FromUserName").InnerText,
CreateTime=rootElement.SelectSingleNode("CreateTime").InnerText,
MsgType=MsgType.InnerText,
Content=rootElement.SelectSingleNode("Content").InnerText,
MsgId=rootElement.SelectSingleNode("MsgId").InnerText
};
resxml +="<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";
if (!string.IsNullOrEmpty(model.Content))//如果接收到消息
{
if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好
{
resxml +="<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好,有事请留言,偶会及时回复你的。]]></Content><FuncFlag>0</FuncFlag></xml>";
}
}
else//没有接收到消息
{
resxml +="<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,感谢您对我的关注,有事请留言。]]></Content><FuncFlag>0</FuncFlag></xml>";
}
Response.Write(resxml);
}
if (MsgType.InnerText=="image")//如果消息类型为图片消息
{
var model=new
{
ToUserName=rootElement.SelectSingleNode("ToUserName").InnerText,
FromUserName=rootElement.SelectSingleNode("FromUserName").InnerText,
CreateTime=rootElement.SelectSingleNode("CreateTime").InnerText,
MsgType=MsgType.InnerText,
PicUrl=rootElement.SelectSingleNode("PicUrl").InnerText,
MsgId=rootElement.SelectSingleNode("MsgId").InnerText
};
resxml +="<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[欢迎您的光临!]]></Title><Description><![CDATA[非常感谢您的关注!]]></Description><PicUrl><![CDATA[http://...jpg]]></PicUrl><Url><![CDATA[http://www.baidu.com/]]></Url></item></Articles><FuncFlag>0</FuncFlag></xml>";
Response.Write(resxml);
}
else//如果是其余的消息类型
{
var model=new
{
ToUserName=rootElement.SelectSingleNode("ToUserName").InnerText,
FromUserName=rootElement.SelectSingleNode("FromUserName").InnerText,
CreateTime=rootElement.SelectSingleNode("CreateTime").InnerText,
};
resxml +="<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,感谢您对我的关注,有事请留言,我会及时回复你的哦。]]></Content><FuncFlag>0</FuncFlag></xml>";
Response.Write(resxml);
}
}
catch (Exception ex)
{
throw ex;
}
Response.End();
}
/// <summary>
/// datetime转换成unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime=TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// 写日志(用于跟踪),可以将想打印出的内容计入一个文本文件里面,便于测试
/// </summary>
public static void WriteLog(string strMemo, HttpServerUtility server)
{
string filename=server.MapPath("/logs/log.txt");//在网站项目中建立一个文件夹命名logs(然后在文件夹中随便建立一个web页面文件,避免网站在发布到服务器之后看不到预定文件)
if (!Directory.Exists(server.MapPath("//logs//")))
Directory.CreateDirectory("//logs//");
StreamWriter sr=null;
try
{
if (!File.Exists(filename))
{
sr=File.CreateText(filename);
}
else
{
sr=File.AppendText(filename);
}
sr.WriteLine(strMemo);
}
catch
{
}
finally
{
if (sr !=null)
sr.Close();
}
}
关于.net开发微信公众平台实例教程的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
