2019独角兽企业重金招聘Python工程师标准>>>

阅读目录

  • 一、用法
  • 二、实现方法

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

本文原文地址:用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入

回到顶部

一、用法

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页面,是为了更简便),参考官方文档,实现校验流程

服务号:

完整源码:

/// <summary>
/// 处理微信服务器验证消息
/// </summary>
public void Auth()
{
string token = ConfigurationManager.AppSettings[Token].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 void ProcessRequest(HttpContext context)
{
string postString = string.Empty;
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET")
{
Auth();
}
}
 
/// <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"/>
<add verb="*" path="TestAccountService.ashx" type="Wechat.Config.TestAccountService,Wechat.Config" validate="true"/>
</httpHandlers>
</system.web>

如果直接用Senparc.Weixin微信开发框架来实现,就更简单了:

 
rotected void Page_Load(object sender, EventArgs e)
 
private readonly string Token = ConfigurationManager.AppSettings["token"];//与微信公众账号后台的Token设置保持一致,区分大小写。
string signature = Request["signature"];
string timestamp = Request["timestamp"];
string nonce = Request["nonce"];
string echostr = Request["echostr"];
if (Request.HttpMethod == "GET")
{
//get method - 仅在微信后台填写URL验证时触发
if (CheckSignature.Check(signature, timestamp, nonce, Token))
{
Response.Output.Write(echostr); //返回随机字符串则表示验证通过
}
else
{
Response.Output.Write("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。" +
"如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
}
Response.End();
}
}

用c#开发微信 系列汇总


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

转载于:https://my.oschina.net/airship/blog/3004698

用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入相关推荐

  1. php微信地图定位导航,微信公众服务号下实现地图语音导航的方案

    微信公众服务号下实现地图语音导航的方案 如何在微信公众号里面实现多商家用户,店铺详情页的语音导航功能这个问题一直困惑着我. 现在有一个解决方案供大家参考. 具体步骤如下: 1.打开:http://ma ...

  2. java实现获取微信公众服务号消息

    原文:java实现获取微信公众服务号消息 源代码下载地址:http://www.zuidaima.com/share/1823698247126016.htm 微信服务号的发送被动响应消息,简单说就是 ...

  3. 微信公众服务号怎么一天发一条图文消息?

    订阅号每天发一条消息,服务号一个月发四条消息,这已经是微信定下的规定,所以在很多人申请的时候就非常纠结,服务号才有自定义菜单啊,但是一个月才4条.今天来给大家分享一下,服务号怎么一天发一条消息. 工具 ...

  4. 微信公众服务号,运营过程中如何更好的完善细节问题

    现在微信10亿多的用户,试问一下有几没有关注公众号的,从这里可以了解到公众号的流量,大部分来源于微信平台的内部,还有我们都清楚公众号,可以分为订阅号.服务号.企业号,不管哪一种类型的公众号要有流量,就 ...

  5. 微信服务号自定义服务器配置及验证

    公众号自定义URL配置及验证 接口配置信息 登录微信公众平台,点击左侧导航栏上的基本配置按钮,会出现如下图信息: 在这个界面,我们可以设置微信服务号的自定义服务器地址URL.Token.消息加解密秘钥 ...

  6. 【.Net微信_服务号】1.微信JSSDK支付

    最近刚接触微信就接到了一个微信支付的功能,连着调了四天,晚上睡觉都在想代码,也是被折腾的不轻,感觉处处都是问题,经过自己的一些探索,在此做一些总结,以便以后遇到类似的问题能及时得到解决,我觉得微信支付 ...

  7. 微信jsapi支付获取code_JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)

    写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...

  8. 公众号开发配置,服务号对接第三方服务器配置方法

    很多公司企业在注册服务号后,通常需要对接第三方的开发平台,进行一些功能的完善补充. 市面上第三方平台非常之多,但是因微信官方限制,所需要的配置总结下来就这么几点,下面给大家讲解下配置的要点: 一.授权 ...

  9. 微信公众号python开发_用python如何开发微信公共帐号?

    我的第一个Python项目就是做的微信公众号机器人,按照当时我的思路来讲讲如何学习使用Python来开发微信公众号:大家伙收藏顺手点个赞呗. 微信公众号功能开发分为两大块:需要调用微信内部功能.不需要 ...

最新文章

  1. oracle10g获取Date类型字段无时分秒解决办法!
  2. Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper
  3. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例
  4. VR游戏开发者如何避免“移动引起眩晕”
  5. 【7】AccessDB快速数据访问
  6. Get JSON with the jQuery getJSON Method
  7. Android 应用安全性改进: 全面助力打造 零漏洞 应用
  8. 前端学习(1865)vue之电商管理系统电商系统之实现表单的数据绑定
  9. 若依后端实现pdfjs预览PDF文件
  10. JSK-217 阶乘【大数】
  11. 学习Javascript闭包(Closure)(转载+理解心得)
  12. 生成式预训练之MASS
  13. Xshell6和Xftp6 破解免安装版(亲测可用)
  14. 泰格收银系统_泰格超市收银系统
  15. 基于Dlib库构建人脸识别数据集
  16. Yamaha Vocaloid 5.6.2 x64 WiN 歌声合成器
  17. 用html、css实现网页聊天页面
  18. access 数据库写按日期查询SQL
  19. 2020/1/17用python制作二维码
  20. 格林函数求解泊松方程介绍

热门文章

  1. BZOJ 2752: [HAOI2012]高速公路(road)
  2. 织梦dedecms dede plus文件作用介绍及安全设置
  3. Hadoop 资源列表
  4. Android Service 服务(二)—— BroadcastReceiver
  5. [Hadoop in China 2011] 何鹏:Hadoop在海量网页搜索中应用分析
  6. Android开发环境——模拟器AVD相关内容汇总
  7. DDD CQRS架构和传统架构的优缺点比较
  8. Pycharm使用技巧(转载)
  9. 006商城项目:该项目的路径访问问题
  10. 冒烟测试与回归测试的区别