您的位置:首页 > 移动开发 > 微信开发

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

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

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

一、用法

1.下载web程序

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

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();


}


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

企业号:





完整源码:

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);


}


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

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();


}


}


用c#开发微信系列汇总
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: