用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载)

最近研究了下服务号的服务器配置和企业号的回调模式。真正实现完后,觉得很简单,但一开始还是走了点弯路,所以写了个web程序,只用改下配置文件里的参数就可以直接用了。下面介绍下详细的用法以及实现步骤。

一、用法

1. 下载web程序

http://yunpan.cn/cjeTSAKwUVmv9  访问密码 7ab3

2. 修改配置文件web.config

<appSettings>
   <!--微信的Token-->
   <add key="WeixinToken" value="dd"/>
   <add key="AppId" value="wxdbddd2bc"/>
   <add key="AppSecret" value="82f7ddd88e196"/>
 
   <!--企业号配置信息-->
   <add key="CorpToken" value="fddd"/>
   <add key="CorpId" value="wx1156d982ddda8"/>
   <add key="EncodingAESKey" value="aNvJOkGYddyGwf5Rg"/>
 
 </appSettings>

3. 发布到你的服务器上

4. 服务号和企业号里分别填上url及参数:

企业号:

服务号:

二、实现方法

1. 新建一个web程序

2. 添加二个ashx文件(这里不用aspx页面,是为了更简便),参考官方文档,实现校验流程

服务号:

完整源码:

public class MPService : IHttpHandler {  public void ProcessRequest(HttpContext context) { string postString = string.Empty; if (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET") { Auth(); } }  public bool IsReusable { get { return false; } }  /// <summary> /// 处理微信服务器验证消息 /// </summary> private void Auth() { string token = ConfigurationManager.AppSettings["WeixinToken"].ToString(); string signature = HttpContext.Current.Request.QueryString["signature"]; string timestamp = HttpContext.Current.Request.QueryString["timestamp"]; string nonce = HttpContext.Current.Request.QueryString["nonce"]; string echostr = HttpContext.Current.Request.QueryString["echostr"];  if (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET") { //get method - 仅在微信后台填写URL验证时触发 if (CheckSignature(signature, timestamp, nonce, token)) { WriteContent(echostr); //返回随机字符串则表示验证通过 } else { WriteContent("failed:" + signature + "," + GetSignature(timestamp, nonce, token) + "。" + "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"); } HttpContext.Current.Response.End(); } }    private void WriteContent(string str) { HttpContext.Current.Response.Output.Write(str); }   /// <summary> /// 检查签名是否正确 /// </summary> /// <param name="signature"></param> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="token"></param> /// <returns></returns> public static bool CheckSignature(string signature, string timestamp, string nonce, string token) { return signature == GetSignature(timestamp, nonce, token); }  /// <summary> /// 返回正确的签名 /// </summary> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="token"></param> /// <returns></returns> public static string GetSignature(string timestamp, string nonce, string token) { string[] arr = new[] { token, timestamp, nonce }.OrderBy(z => z).ToArray(); string arrString = string.Join("", arr); System.Security.Cryptography.SHA1 sha1 = System.Security.Cryptography.SHA1.Create(); byte[] sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString)); StringBuilder enText = new StringBuilder(); foreach (var b in sha1Arr) { enText.AppendFormat("{0:x2}", b); } return enText.ToString(); } }

官方接入文档: http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html

企业号:

完整源码:

public class QYService : IHttpHandler {  public void ProcessRequest(HttpContext context) { string postString = string.Empty; if (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET") { Auth(); } }  public bool IsReusable { get { return false; } }  /// <summary> /// 成为开发者的第一步,验证并相应服务器的数据 /// </summary> private void Auth() { string token = ConfigurationManager.AppSettings["CorpToken"];//从配置文件获取Token


string encodingAESKey = ConfigurationManager.AppSettings["EncodingAESKey"];//从配置文件获取EncodingAESKey


string corpId = ConfigurationManager.AppSettings["CorpId"];//从配置文件获取corpId  string echoString = HttpContext.Current.Request.QueryString["echoStr"]; string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企业号的 msg_signature string timestamp = HttpContext.Current.Request.QueryString["timestamp"]; string nonce = HttpContext.Current.Request.QueryString["nonce"];  string decryptEchoString = ""; if (CheckSignature(token, signature, timestamp, nonce, corpId, encodingAESKey, echoString, ref decryptEchoString)) { if (!string.IsNullOrEmpty(decryptEchoString)) { HttpContext.Current.Response.Write(decryptEchoString); HttpContext.Current.Response.End(); } } }  /// <summary> /// 验证企业号签名 /// </summary> /// <param name="token">企业号配置的Token</param> /// <param name="signature">签名内容</param> /// <param name="timestamp">时间戳</param> /// <param name="nonce">nonce参数</param> /// <param name="corpId">企业号ID标识</param> /// <param name="encodingAESKey">加密键</param> /// <param name="echostr">内容字符串</param> /// <param name="retEchostr">返回的字符串</param> /// <returns></returns> public bool CheckSignature(string token, string signature, string timestamp, string nonce, string corpId, string encodingAESKey, string echostr, ref string retEchostr) { WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, corpId); int result = wxcpt.VerifyURL(signature, timestamp, nonce, echostr, ref retEchostr); if (result != 0) { //LogTextHelper.Error("ERR: VerifyURL fail, ret: " + result); return false; }  return true;  //ret==0表示验证成功,retEchostr参数表示明文,用户需要将retEchostr作为get请求的返回参数,返回给企业号。 // HttpUtils.SetResponse(retEchostr); } }

官方接入文档:  http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F

3. 配置文件

<system.web> <compilation debug="true" targetFramework="4.0" /> <httpHandlers> <add verb="*" path="MPService.ashx" type="Wechat.Config.MPService,Wechat.Config" validate="true"/> <add verb="*" path="QYService.ashx" type="Wechat.Config.QYService,Wechat.Config" validate="true"/> </httpHandlers></system.web>

时间: 2024-10-31 12:22:26

用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载)的相关文章

用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)

本文讲述使用Senparc.Weixin框架来快速处理各种接收事件推送.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下类型: 1 subscribe/unsubscribe: 关注/取消关注事件 2 scan: 扫描带参数二维码事件 3 location: 上报地理位置事件 4 click: 自定义菜单事件     1) click: 点击菜单拉取消息时的事件推送     2) view: 点击菜单跳转链接时的事件推送     3) 

用c#开发微信(3)基于Senparc.Weixin框架的接收普通消息处理 (源码下载)

本文讲述使用Senparc.Weixin框架来快速处理各种接收的普通消息.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下7种类型: 1 文本消息 2 图片消息 3 语音消息 4 视频消息 5 小视频消息 6 地理位置消息 7 链接消息 实现非常简单,自定义一个继承MessageHandler的类,重写这7种类型的方法即可.注意:DefaultResponseMessage必须重写,用于返回没有处理过的消息类型(也可以用于默认消息,如帮助

openlayers4 入门开发系列之前端动态渲染克里金插值 kriging 篇(附源码下载)

前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子,这个也是学习 openlayers4 的好素材. openlayers4 入门开发系列的地图服务基于 Geoserver 发布的,关于 Geoserver 方面操作的博客,可以参考以下几篇文章: geoserver 安装部署步骤 geoserver 发布地图服务 WMS geoserver 发布地

微信公众服务号开发

1 公司提供接口,微信平台可以通过访问我们的接口,进行数据交互,通过xml. 2 http://mp.weixin.qq.com/ 微信服务号平台,输入用户名密码进入高级功能-开发者模式, 3 申请服务号之后,微信会提供appid和AppSecret两个参数,根据这两个参数可以获取token,token作为你服务号和微信交互的证明. 4 接下里就是完成自己的接口部分的开发,然后接口的服务器配置地址输入微信服务号的服务器配置url,本地的项目地址是不行的,得是能访问的地址 5 接口的开发,接受xm

微信公众服务号申请、认证(开通支付)-微信开发图文教程

微信公众服务号申请 百度图文教程 http://jingyan.baidu.com/article/e9fb46e190a51a7521f766d7.html 微信服务号认证(开通支付) 百度图文教程 http://jingyan.baidu.com/article/cd4c2979cd8369756e6e60e0.html 比百度更详细的教程 http://www.ivlian.com/index!newsDetail.action?id=40 版权声明:本文为博主原创文章,未经博主允许不得转

微信开发H5十二人牛牛出租源码下载搭建

微信开发H5十二人牛牛出租源码下载搭建h5.fanshubbs.com联系Q1687054422不同于传统的手游商店下载模式,HTML5 手机网页游戏是可以直接运行在微信内置的浏览器里. 先上图,感知一下具体样子: 而我想分享的是我们在具体开发实现过程中,基于微信的Html5 WebApp需要去克服的一些坑:这个小游戏的基本规则是:限定用户每天刮书次数是2次 (自由刮一次和分享后再刮一次),每天都可刮奖为此,我们希望实现的思路首先是限定在只能使用微信中玩,实现代码如下:if (!HttpCont

Java微信公众平台开发模式+自定义按钮源码

首先,想用开放模式需要先成为开发者.成为开发者有两种写法. 一是:通过jsp页面,用out.print("echostr")//SHA1加密的字符串: 二是:通过Servlet.doGet返回exhostr,给微信平台. 这里我只写第二种方式的请求(这里的请求是以get方式请求),代码如下: import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.ut

微信营销服务平源码下载地址

毫无疑问,在中国,移动互联网将是未来最大的趋势,如果你想在这个平台上,轻 松 创 业,快 速 赚 钱.下面的内容,将是您通向成功大门的 秘 密 武 器. 借力使力更省力 你可能是一个人,你可能是一个团队,你可能拥有一个公司,但无论如何,我们要想轻 松 赚 钱,最重要的一点,就是借力.而在移动互联网上,我们便可以借助于一强大的移动互联网平台--微信公众平台.http://pan.baidu.com/s/1c0tio9a微信营销服务平源码下载地址

微信公众号H5游戏平台完整源码下载(几十款游戏和应用)

点击打开链接微信公众号H5游戏平台完整源码下载(几十款游戏和应用)完整打包下载,价值超高. 微信Html5游戏平台源码,包括40款h5小游戏和21款有趣的测试,大家可以直接打开浏览器本地测试. 下面展示部分效果图 11.png (149.71 KB, 下载次数: 0) 下载附件 H5游戏平台完整源码下载 3 分钟前 上传 22.png (45.41 KB, 下载次数: 0) 下载附件 H5游戏平台完整源码下载 3 分钟前 上传 33.png (115.83 KB, 下载次数: 0) 下载附件 H