注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号

如何用Azure Web App Services接入微信公众号

简介

此示例演示如何创建Azure Web App Services、开发、部暑、接入微信公众号。

先决条件

Microsoft Visual Studio 2015

运行示例

• 登录http://portal.azure.com,创建Microsoft Azure 应用程序服务

• 设置FTP部署凭据

• 设置Web.config中TOKEN的value,Token可由开发者可以任意填写,用作生成微信公众号签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性。

• 通过FTP把程序发布部暑到Azure应用程序服务

• 登录微信公众平台https://mp.weixin.qq.com,创建公众平台测试账号

• 填写服务器配置,验证服务器地址的有效性,URL是开发者用来接收微信消息和事件的接口URL。TOKEN值需跟web.confi设置的值一致

• 关注测试公众号,发送信息到公众号,测试程序是否自动回复内容

代码

 public static void Valid()
{
string signature = HttpContext.Current.Request["signature"];
string timestamp = HttpContext.Current.Request["timestamp"];
string nonce = HttpContext.Current.Request["nonce"];
string echostr = HttpContext.Current.Request["echostr"]; if (HttpContext.Current.Request.HttpMethod == "GET")
{
if (CheckSignature(signature, timestamp, nonce))
{
HttpContext.Current.Response.Output.Write(echostr);
}
else
{
HttpContext.Current.Response.Output.Write("Failed valid");
}
HttpContext.Current.Response.End();
}
} public static void ResponseMsg()
{
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
try
{
string postString = string.Empty;
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
}
Hashtable postObj = ParseXml(postString);
string fromUsername = postObj["FromUserName"].ToString();
string toUsername = postObj["ToUserName"].ToString();
string keyword = postObj["Content"].ToString();
if (!String.IsNullOrEmpty(keyword))
{
String responseContent = string.Format(Message_Text, fromUsername, toUsername, DateTime.Now.Ticks,
"Welcome to OneCode OneScript!"
+ "\r\n<a href=\"https://gallery.technet.microsoft.com\">Click me</a>");
HttpContext.Current.Response.Write(responseContent);
}
else
{
HttpContext.Current.Response.Write("Input something...");
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.StackTrace);
}
}
} private static bool CheckSignature(String signature, String timestamp, String nonce)
{
String[] arr = new String[] { ConfigurationManager.AppSettings["TOKEN"].ToString(), 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());
return tmpStr != null ? tmpStr.Equals(signature) : false;
} private 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();
} private static Hashtable ParseXml(String xml)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
XmlNode bodyNode = xmlDocument.ChildNodes[0];
Hashtable ht = new Hashtable();
if (bodyNode.ChildNodes.Count > 0)
{
foreach (XmlNode xn in bodyNode.ChildNodes)
{
ht.Add(xn.Name, xn.InnerText);
}
}
return ht;
} private static string Message_Text
{
get { return @"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
</xml>"; }
}
 

更多信息

• 微信公众平台开发者文档

• What is Azure App Service?

如何用Azure Web App Services接入微信公众号的更多相关文章

  1. [.NET] 使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复

    使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复 目录 一.前提 二.基本配置信息简析 三.配置服务器地址(URL) 四.请求处理 一.前提 先申请微信公众号的授权,找到或配置 ...

  2. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  3. iOS版微信开发小结(微信支付,APP跳转微信公众号)

    最近公司心血来潮,一心要搞微信.废话不多说,直接上干货. 开发前准备: 1.在微信开发者平台获取开发者认证:(一年300元人民币) PS:具体流程按照微信流程指示操作即可,在这就不废话了. 2.下载微 ...

  4. 使用原app接口进行微信公众号开发

    1.跨域问题 原来的app项目已经上线,然而接下来就有意思了,突然上头说要把app的发件功能复制到微信公众号里.那么问题来了,微信公众号的页面是前端和交互式h5大哥写的. 那么就将页面丢微信里,请求我 ...

  5. 网站如何接入微信公众号JSAPI支付PHP版

    1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...

  6. [转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台

    先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号. function CheckSignature(const ...

  7. 做App还是微信公众号,你该如何抉择?

    我不够聪明,因为我经常出于好奇被自己提出的问题所困扰,于是乎就有些强迫症似的拼命去寻求答案——我只是想说服自己,让自己从困扰的谜团中清醒.坚定方向,进而能从容不迫的走下去... 最近在考虑一个问题:做 ...

  8. 使用localtunne一分钟搞定微信公众号接入

      记得15年那个刚刚进入工作的时候,公司有个微信公众号的项目,那个时候微信官方没有什么调试工具,也没有什么比较好的本地调试工具.当时有个功能需要调用微信JSSDK里面的扫一扫的功能.由于本地不能调试 ...

  9. Django+wechatpy接入微信公众平台以及授权登录

    确定Django环境可以正常运行,环境搭建见:Linux 搭建Nginx+uwsgi+Django环境 安装 wechatpy[cryptography] sudo pip3 install wech ...

随机推荐

  1. 如果你也会C#,那不妨了解下F#(3):F#集合类型和其他核心类型

    本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html 在第一篇中,我们介绍了一些基础数据类型,其实那篇标题中不应该含有"F#&q ...

  2. C#——this关键字(2,3)(含求助贴)

    这次来看一看this关键字的第二个用法:将对象作为参数传递到其他方法 ----------------------------------------------------------------- ...

  3. AOP的实现原理

    1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较. 类别 ...

  4. Quartz —— Spring 环境下的使用

    一.在 Spring 环境下 Quartz 的使用超级简单. 二.具体使用 1.添加对应的 spring-quartz 的配置文件. 2.新建要执行定时任务的目标类和目标方法,不需要继承 Job 接口 ...

  5. java 正则匹配括号对以及其他成对出现的模式

    最近,我们有个大调整,为了控制代码的质量,需要使用一些伪代码让业务人员编写应用逻辑(其实这么做完全是处于研发效能的考虑,95%以上的代码不需要特别注意都不会导致系统性风险,),然后通过工具自动生成实际 ...

  6. CSS3 @font-face的使用

    首先我们一起来看看@font-face的语法规则: @font-face { font-family: <YourWebFontName>; src: <source> [&l ...

  7. 怎样给div增加resize事件

    当浏览器窗口被调整到一个新的高度或宽度时,就会触发resize事件,这个事件在window上面触发,那么如何给div元素增加resize事件,监听div的高度或宽度的改变呢? 先来回答另一个问题,监听 ...

  8. json简单使用

    web工程中如何将大量数据从服务器端传送到浏览器一直是很重要的一个问题. 其中一个解决方法是在服务器端将将数据封装成json格式,然后传给前台.废话不多说,下面讲干货. 1.要用json必须下载一个库 ...

  9. 十种MYSQL显错注入原理讲解(二)

    上一篇讲过,三种MYSQL显错注入原理.下面我继续讲解. 1.geometrycollection() and geometrycollection((select * from(select * f ...

  10. swift-分支

    swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...