知识点
相关文章
更多最近更新
更多微信公众平台开发(ASP.NET)
2019-03-02 01:05|来源: 网路
运行环境
.NET
准备工作
1.在微信公众平台申请开发者。
2.功能页面完成后上传至自己的网站并能在外网正常访问该URL,端口必须为80(以下统称:目标接口)
3.在微信公众平台开启开发模式。
开发流程
1.验证签名,微信服务器会发一个GET请求到目标接口,接收参数后开始验证;具体操作请参阅官方文档"接入指南"
http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97官方文档,讲解的很清楚,验证方法在下面的代码中有
2.首先接收微信服务器发送的请求,然后进行处理,请求为xml格式,携带公众号、发送方微信号、消息类型,消息内容等结点。
3.根据消息类型,从数据库读取相关预设内容返回,要求响应时间在5秒内,返回格式同样是xml格式。
备注
个人申请只能申请订阅号,不过只能使用基础接口,企业、事业单位或政府机构可以申请服务号,申请后可以申请微信认证,认证后订阅号将获得自定义菜单接口权限,服务号将获得高级接口中所有接口权限,认证300元/次,
政府以及部分其他组织类型的公众帐号,免收认证费用。
输出内容一定要使用UTF-8的编码方式,否则中文会产生乱码。
如果消息中需要换行,使用\r\n来换行。
支持html的a标签,但是如果是换行是紧邻关系的话可能无法识别换行。
该文只说明一些简单的实现方式,其余操作请自行查阅微信公众平台接口文档
微信公众平台:
https://mp.weixin.qq.com/
扫描二维码,添加我的微信公众号。
示例代码
1 using System; 2 using System.IO; 3 using System.Text; 4 using System.Web; 5 using System.Web.Security; 6 using System.Xml; 7 8 public class WeChat : IHttpHandler 9 { 10 public void ProcessRequest(HttpContext context) 11 { 12 weixin wx = new weixin(); 13 String postStr = String.Empty; 14 15 if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST") 16 { 17 Stream s = HttpContext.Current.Request.InputStream; 18 Byte[] b = new Byte[s.Length]; 19 s.Read(b, 0, (Int32)s.Length); 20 postStr = Encoding.UTF8.GetString(b); 21 22 if (!String.IsNullOrEmpty(postStr)) 23 { 24 wx.Handle(postStr); 25 } 26 } 27 else 28 { 29 wx.Auth(); 30 } 31 } 32 33 public bool IsReusable 34 { 35 get 36 { 37 return false; 38 } 39 } 40 } 41 42 public class weixin 43 { 44 private String Token = "改写为自己的Token"; 45 private String DefaultResponseContent = "欢迎关注小牛路过"; 46 47 public void Auth() 48 { 49 String echoStr = HttpContext.Current.Request.QueryString["echoStr"]; 50 51 if (CheckSignature()) 52 { 53 if (!String.IsNullOrEmpty(echoStr)) 54 { 55 HttpContext.Current.Response.Write(echoStr); 56 HttpContext.Current.Response.End(); 57 } 58 } 59 } 60 //处理微信公众平台POST过来的数据 61 public void Handle(String postStr) 62 { 63 XmlDocument doc = new XmlDocument(); 64 doc.LoadXml(postStr); 65 66 XmlElement rootElement = doc.DocumentElement; 67 XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); 68 69 RequestXML requestXML = new RequestXML(); 70 requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; 71 requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; 72 requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText; 73 requestXML.MsgType = MsgType.InnerText; 74 75 if (requestXML.MsgType == "text") 76 { 77 requestXML.Content = rootElement.SelectSingleNode("Content").InnerText; 78 } 79 80 else if (requestXML.MsgType == "location") 81 { 82 requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; 83 requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; 84 requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText; 85 requestXML.MapInfo = rootElement.SelectSingleNode("Label").InnerText; 86 } 87 88 else if (requestXML.MsgType == "image") 89 { 90 requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; 91 } 92 93 ResponseMsg(requestXML); 94 } 95 96 /// 验证微信签名 97 private bool CheckSignature() 98 { 99 String signature = HttpContext.Current.Request.QueryString["signature"]; 100 String timestamp = HttpContext.Current.Request.QueryString["timestamp"]; 101 String nonce = HttpContext.Current.Request.QueryString["nonce"]; 102 String[] ArrTmp = { Token, timestamp, nonce }; 103 104 Array.Sort(ArrTmp); 105 String tmpStr = String.Join("", ArrTmp); 106 107 tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); 108 tmpStr = tmpStr.ToLower(); 109 110 if (tmpStr == signature) 111 { 112 return true; 113 } 114 else 115 { 116 return false; 117 } 118 } 119 120 /// <summary> 121 /// 回复消息 122 /// </summary> 123 /// <param name="weixinXML"></param> 124 private void ResponseMsg(RequestXML requestXML) 125 { 126 String responseContent = String.Empty; 127 128 if (requestXML.MsgType == "text") 129 { 130 responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "从数据库读取的内容"); 131 } 132 133 HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; 134 HttpContext.Current.Response.Write(responseContent); 135 } 136 137 /// 返回格式化文本XML内容 138 private String FormatTextXML(String fromUserName, String toUserName, String content) 139 { 140 return "<xml><ToUserName><![CDATA[" + fromUserName + "]]></ToUserName><FromUserName><![CDATA[" + toUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + content + "]]></Content><FuncFlag>1</FuncFlag></xml>"; 141 } 142 143 private int ConvertDateTimeInt(System.DateTime time) 144 { 145 System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 146 return (int)(time - startTime).TotalSeconds; 147 } 148 } 149 150 151 //微信请求类 152 public class RequestXML 153 { 154 private String toUserName = String.Empty; 155 156 /// <summary> 157 /// 公众号 158 /// </summary> 159 public String ToUserName 160 { 161 get { return toUserName; } 162 set { toUserName = value; } 163 } 164 165 private String fromUserName = ""; 166 167 /// <summary> 168 /// 发送方微信号 169 /// </summary> 170 public String FromUserName 171 { 172 get { return fromUserName; } 173 set { fromUserName = value; } 174 } 175 176 private String createTime = String.Empty; 177 178 /// <summary> 179 /// 创建时间 180 /// </summary> 181 public String CreateTime 182 { 183 get { return createTime; } 184 set { createTime = value; } 185 } 186 187 private String msgType = String.Empty; 188 189 /// <summary> 190 /// 信息类型 地理位置:location,文本消息:text,消息类型:image 191 /// </summary> 192 public String MsgType 193 { 194 get { return msgType; } 195 set { msgType = value; } 196 } 197 198 private String content = String.Empty; 199 200 /// <summary> 201 /// 信息内容 202 /// </summary> 203 public String Content 204 { 205 get { return content; } 206 set { content = value; } 207 } 208 209 private String location_X = String.Empty; 210 211 /// <summary> 212 /// 地理位置纬度 213 /// </summary> 214 public String Location_X 215 { 216 get { return location_X; } 217 set { location_X = value; } 218 } 219 220 private String location_Y = String.Empty; 221 222 /// <summary> 223 /// 地理位置经度 224 /// </summary> 225 public String Location_Y 226 { 227 get { return location_Y; } 228 set { location_Y = value; } 229 } 230 231 private String scale = String.Empty; 232 233 /// <summary> 234 /// 地图缩放大小 235 /// </summary> 236 public String Scale 237 { 238 get { return scale; } 239 set { scale = value; } 240 } 241 242 private String mapInfo = String.Empty; 243 244 /// <summary> 245 /// 地理位置信息 246 /// </summary> 247 public String MapInfo 248 { 249 get { return mapInfo; } 250 set { mapInfo = value; } 251 } 252 253 private String picUrl = String.Empty; 254 255 /// <summary> 256 /// 图片链接 257 /// </summary> 258 public String PicUrl 259 { 260 get { return picUrl; } 261 set { picUrl = value; } 262 } 263 }
转自:http://www.cnblogs.com/firstgreen/p/3586162
相关问答
更多-
微信公众平台能使用Java开发吗[2022-09-14]
能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发 -
微信公众平台开发模式是怎样的?有没有模板?[2022-03-27]
首先订阅号要通过微信认证才可以成为拥有自定义菜单不通过验证成为开发者也无法获得自定义菜单其次成为开发者要有个能够公网访问的URL也就是通常使用的网址现常用的有新浪的sae平台或者百度的开发者平台然后在该网.址下部署微信提供的接口文件修改接口文件中的token然后在token一栏中填写修改过后的token即可。‘动拇指’的团队做的,需要的话可以问.问去 -
微信公众平台开发有哪些要注意的?[2022-10-26]
微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ... -
微信公众平台开发商排名靠前的有哪些个?[2022-06-23]
小猪cms还凑合,,有源码的 ,每周更新两三个模板的 ,你可以看下 ,, -
微信公众平台开发者中心[2022-09-08]
登录微信公众平台,点击左下角的 开发者工具,即可看到相关文档。 -
微信公众平台微网站开发流程是什么?[2023-09-21]
微网站开发模式教程: 第一步:申请消息接口 在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名。 第二步:验证URL有效性 开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数: 开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回 echostr参数内容,则接入生效,成为开发 ... -
微信公众号一元购平台怎么开发[2022-05-27]
用第三方平台做个商城就可以了 -
请问微信公众平台定制开发该怎么做?[2022-11-16]
听起来像是最近比较火的摇一摇和微信现场互动,这两个都是微信第三方公司开发的微信应用。现在做这种程序开发的很多。而且现在除了上面那些应用,还有照片打印机,微信wifi等硬件产品,这些东西都是为了帮助商家的微信公众号吸收粉丝的,如果单纯做活动,用这些软件只是增加了娱乐性和互动性,如果长远来看,要是想做下公司的微信营销, 58招财猫, 咨询一下; -
微信公众号平台开发价格大概多少[2023-05-13]
这个需要根据你找什么样的开发商,然后开发什么样的功能,如果是该需要对接你们系统之类的功能比较复杂,有几千的,也有好几万的,这个看你的需求 -
微信公众号平台开发报价多少合适[2022-11-10]
微信公众平台的开发价格取决于功能和具体的外包公司,不同的地域价格也会略有差异。 我们给客户做的微信有30000元的也有10000多元的。 建议先把微信开发的需求整理好,然后多找几家公司进行报价。综合对比来选择。