本人小白.net出身,第一次做微信开发。又不会php和别的语言。只有用.net做了。
如有不对之处,还请指点。
1.win7 x64
2.vs2015
公众号首页地址:https://mp.weixin.qq.com ,没有公众号的点击注册,
注册过程就不用多说了。
我注册了一个,点击登录。如图:
进入后台以后,一番玩耍之后。进入正题。往下翻找到开发者工具,进入之后,别的先不管,点击开发者文档。
先看一下,大致了解文档结构。
首先,点击开发开发->接入指南。
首先看到,要填写基本设置。大概意思是微信服务器会往你填的地址发送一个get请求。传入4个参数。参数如下 :
打开基本设置页面,填写如下:
点击提交,会提示错误。提交不成功。
那么 ,我们就想到,要写一个web程序处理这个请求了。
打开vs2015,新建一个asp.net mvc应用程序。添加一个HomeControl ,在HomeControl里面添加一个public void wx(){}方法。
呃,这个步骤不懂的话,建议先去学一下asp.net mvc。
如图所示,给它返回echostr就说明验证成功了。那么,如果 你也可以省事,不去验证请求来源的真实性,直接 返回echostr.当然这样的产品是有风险的(什么风险我也不知道,不然它让验证干嘛,是吧^_^)。
public void wx()
{
#region 验证请求来源是否是微信
string signature = Request["signature"]?.ToString();
string timestamp = Request["timestamp"]?.ToString();
string nonce = Request["nonce"]?.ToString();
string echostr = Request["echostr"]?.ToString();
string token = "hellowb";
List<string> list = new List<string>() { token, timestamp, nonce };
list.Sort();
string data = string.Join("", list);
byte[] temp1 = Encoding.UTF8.GetBytes(data);
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
byte[] temp2 = sha.ComputeHash(temp1);
var hashCode = BitConverter.ToString(temp2);
hashCode = hashCode.Replace("-", "").ToLower();
if (hashCode == signature)
{
Response.Write(echostr);
Response.End();
}
#endregion
}
将网站布置到你的服务器上,占用80端口(只能使用80,不会布置网站的请自行百度)。然后回到微信后台基本配置页。如图
令牌你可以自己随便写一个自己喜欢的,然后代码里面对应着改就好。
点击提交。如果提示提交成功,那么 万事大吉。成功了。
当然还会有意外,如果 提示发生错误,请稍后重试。试着把url复制到浏览器里访问,看能不能通。
好了,现在验证成功了,就可以真正成为一个微信开发者了。
本次先从处理微信用户发送的消息为切入点。点击接收普通消息。如图
根据开发文档,了解到,如果用户关注了你,并给你发送了一个文本消息,微信服务器会给你填写的url(示例为 http://ip/home/wx)发送一个post 请求,内容为
是一个xml。那么 。添加一个xmlHelper类,
using System;
using System.Collections.Generic;
using System.Xml;
namespace wxApp
{
public class XmlHelper
{
public static Dictionary<string, string> GetMsgEntity(string text)
{
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(text);
Dictionary<string, string> dict = new Dictionary<string, string>();
XmlNodeList xml = doc.SelectSingleNode("/xml").ChildNodes;
foreach (XmlNode node in xml)
{
dict.Add(node.Name, node.InnerText);
}
return dict;
}
catch (Exception)
{
return new Dictionary<string, string>();
}
}
}
}
现在我们的url要能区分post get 请求了。改写如下
在HomeControl 新建一个private void ProcessPost(HttpRequestBase request)(){}方法.
private void ProcessPost(HttpRequestBase request)
{
var istream = Request.InputStream;
byte[] temp = new byte[istream.Length];
istream.Read(temp, 0, (int)istream.Length);
string xml = Encoding.UTF8.GetString(temp);
var dic = XmlHelper.GetMsgEntity(xml);
switch (dic["MsgType"])
{
case "text":
ProcessTextMsg(dic, request);
break;
default:
break;
}
}
在HomeControl 新建一个private void ProcessTextMsg(Dictionary
private void ProcessTextMsg(Dictionary<string, string> dic, HttpRequestBase request)
{
string tempxml = "<xml><ToUserName>ToUserName><FromUserName>FromUserName><CreateTime>-timeCreateTime><MsgType>MsgType><Content>Content>xml>";
tempxml = tempxml.Replace("-tname", dic["FromUserName"]);
tempxml = tempxml.Replace("-fname", dic["ToUserName"]);
tempxml = tempxml.Replace("-time", dic["CreateTime"]);
tempxml = tempxml.Replace("-content", $"MsgType:{dic["MsgType"]}\ncontent:{dic["Content"]}\nMsgId:{dic["MsgId"]}");
Response.Write(tempxml);
Response.End();
}
现在我们的处理方法就ok了。
打开微信,关注我们自己的公众号,发送一个消息,它就会回复一个消息了。
效果如下
其它消息处理也是如此,以此类推就可。
这次就写到这里了,欢迎留言。