用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载)
2015-05-13 08:48
567 查看
最近研究了下服务号的服务器配置和企业号的回调模式。真正实现完后,觉得很简单,但一开始还是走了点弯路,所以写了个web程序,只用改下配置文件里的参数就可以直接用了。下面介绍下详细的用法以及实现步骤。
本文原文地址:用c#开发微信(1)服务号的服务器配置和企业号的回调模式-url接入(源码下载)
http://yunpan.cn/cjeTSAKwUVmv9访问密码7ab3
服务号:
完整源码:
官方接入文档:http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html
企业号:
完整源码:
官方接入文档:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F
如果直接用Senparc.Weixin微信开发框架来实现,就更简单了:
用c#开发微信系列汇总
本文原文地址:
一、用法
1.下载web程序
2.修改配置文件web.config
<appSettings>
<!--微信的Token-->
<addkey="WeixinToken"value="dd"/>
<addkey="AppId"value="wxdbddd2bc"/>
<addkey="AppSecret"value="82f7ddd88e196"/>
<!--企业号配置信息-->
<addkey="CorpToken"value="fddd"/>
<addkey="CorpId"value="wx1156d982ddda8"/>
<addkey="EncodingAESKey"value="aNvJOkGYddyGwf5Rg"/>
</appSettings>
3.发布到你的服务器上
4.服务号和企业号里分别填上url及参数:
企业号:服务号:
二、实现方法
1.新建一个web程序
2.添加二个ashx文件(这里不用aspx页面,是为了更简便),参考官方文档,实现校验流程
服务号:完整源码:
///<summary>
///处理微信服务器验证消息
///</summary>
publicvoidAuth()
{
stringtoken=ConfigurationManager.AppSettings[Token].ToString();
stringsignature=HttpContext.Current.Request.QueryString["signature"];
stringtimestamp=HttpContext.Current.Request.QueryString["timestamp"];
stringnonce=HttpContext.Current.Request.QueryString["nonce"];
stringechostr=HttpContext.Current.Request.QueryString["echostr"];
if(HttpContext.Current.Request.HttpMethod.ToUpper()=="GET")
{
//getmethod-仅在微信后台填写URL验证时触发
if(CheckSignature(signature,timestamp,nonce,token))
{
WriteContent(echostr);//返回随机字符串则表示验证通过
}
else
{
WriteContent("failed:"+signature+","+GetSignature(timestamp,nonce,token)+"。"+
"如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
}
HttpContext.Current.Response.End();
}
}
privatevoidWriteContent(stringstr)
{
HttpContext.Current.Response.Output.Write(str);
}
///<summary>
///检查签名是否正确
///</summary>
///<paramname="signature"></param>
///<paramname="timestamp"></param>
///<paramname="nonce"></param>
///<paramname="token"></param>
///<returns></returns>
publicstaticboolCheckSignature(stringsignature,stringtimestamp,stringnonce,stringtoken)
{
returnsignature==GetSignature(timestamp,nonce,token);
}
///<summary>
///返回正确的签名
///</summary>
///<paramname="timestamp"></param>
///<paramname="nonce"></param>
///<paramname="token"></param>
///<returns></returns>
publicstaticstringGetSignature(stringtimestamp,stringnonce,stringtoken)
{
string[]arr=new[]{token,timestamp,nonce}.OrderBy(z=>z).ToArray();
stringarrString=string.Join("",arr);
System.Security.Cryptography.SHA1sha1=System.Security.Cryptography.SHA1.Create();
byte[]sha1Arr=sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
StringBuilderenText=newStringBuilder();
foreach(varbinsha1Arr)
{
enText.AppendFormat("{0:x2}",b);
}
returnenText.ToString();
}
官方接入文档:
企业号:
完整源码:
publicvoidProcessRequest(HttpContextcontext)
{
stringpostString=string.Empty;
if(HttpContext.Current.Request.HttpMethod.ToUpper()=="GET")
{
Auth();
}
}
///<summary>
///成为开发者的第一步,验证并相应服务器的数据
///</summary>
privatevoidAuth()
{
stringtoken=ConfigurationManager.AppSettings["CorpToken"];//从配置文件获取Token
stringencodingAESKey=ConfigurationManager.AppSettings["EncodingAESKey"];//从配置文件获取EncodingAESKey
stringcorpId=ConfigurationManager.AppSettings["CorpId"];//从配置文件获取corpId
stringechoString=HttpContext.Current.Request.QueryString["echoStr"];
stringsignature=HttpContext.Current.Request.QueryString["msg_signature"];//企业号的msg_signature
stringtimestamp=HttpContext.Current.Request.QueryString["timestamp"];
stringnonce=HttpContext.Current.Request.QueryString["nonce"];
stringdecryptEchoString="";
if(CheckSignature(token,signature,timestamp,nonce,corpId,encodingAESKey,echoString,refdecryptEchoString))
{
if(!string.IsNullOrEmpty(decryptEchoString))
{
HttpContext.Current.Response.Write(decryptEchoString);
HttpContext.Current.Response.End();
}
}
}
///<summary>
///验证企业号签名
///</summary>
///<paramname="token">企业号配置的Token</param>
///<paramname="signature">签名内容</param>
///<paramname="timestamp">时间戳</param>
///<paramname="nonce">nonce参数</param>
///<paramname="corpId">企业号ID标识</param>
///<paramname="encodingAESKey">加密键</param>
///<paramname="echostr">内容字符串</param>
///<paramname="retEchostr">返回的字符串</param>
///<returns></returns>
publicboolCheckSignature(stringtoken,stringsignature,stringtimestamp,stringnonce,stringcorpId,stringencodingAESKey,stringechostr,refstringretEchostr)
{
WXBizMsgCryptwxcpt=newWXBizMsgCrypt(token,encodingAESKey,corpId);
intresult=wxcpt.VerifyURL(signature,timestamp,nonce,echostr,refretEchostr);
if(result!=0)
{
//LogTextHelper.Error("ERR:VerifyURLfail,ret:"+result);
returnfalse;
}
returntrue;
//ret==0表示验证成功,retEchostr参数表示明文,用户需要将retEchostr作为get请求的返回参数,返回给企业号。
//HttpUtils.SetResponse(retEchostr);
}
官方接入文档:
3.配置文件
<system.web>
<compilationdebug="true"targetFramework="4.0"/>
<httpHandlers>
<addverb="*"path="MPService.ashx"type="Wechat.Config.MPService,Wechat.Config"validate="true"/>
<addverb="*"path="QYService.ashx"type="Wechat.Config.QYService,Wechat.Config"validate="true"/>
<addverb="*"path="TestAccountService.ashx"type="Wechat.Config.TestAccountService,Wechat.Config"validate="true"/>
</httpHandlers>
</system.web>
如果直接用Senparc.Weixin微信开发框架来实现,就更简单了:
rotectedvoidPage_Load(objectsender,EventArgse)
privatereadonlystringToken=ConfigurationManager.AppSettings["token"];//与微信公众账号后台的Token设置保持一致,区分大小写。
stringsignature=Request["signature"];
stringtimestamp=Request["timestamp"];
stringnonce=Request["nonce"];
stringechostr=Request["echostr"];
if(Request.HttpMethod=="GET")
{
//getmethod-仅在微信后台填写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();
}
}
相关文章推荐
- 微信回调模式配置企业服务器URL
- 微信服务号服务器配置和企业号回调接口配置的区别
- 使用C# .net开发微信公众号之服务器URL配置
- 关于ThinkPHP框架开发微信公众号在微信后台配置服务器URL提示Token验证失败的解决方案
- 微信公众帐号开发教程-开发模式启用及接口配置:URL和Token配置过程
- 微信公众开发接入服务器的接口配置信息
- 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
- 微信开发 企业号(二)-- 回调模式之Tooken验证 .net/python
- 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
- 用c#开发微信(3)基于Senparc.Weixin框架的接收普通消息处理 (源码下载)
- C#微信开发(服务器配置)
- 啊Ran讲微信开发(.net) :订阅号+自定义服务器(URL接入,文本消息处理)
- php微信开发 -- 两种运营模式及服务器配置
- C# 微信开发 微信号接入 (附完整源码)(1)
- 微信开发踩坑之旅 之 开发准备及服务器配置
- C#从服务器下载文件到客户端源码
- windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)
- windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)
- 微信公众帐号开发教程第2篇-开发模式启用及接口配置
- 微信公众号(服务号)接入开发(2)之微信授权登陆