123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- using LYFZ.Weixin.SDK;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using LYFZ.WXLibrary;
- namespace LYFZ.WeixinServers.WeiXinAPP
- {
- public partial class Received : System.Web.UI.Page
- {
- string postinfoddomaine = "recurl";
-
- protected void Page_Load(object sender, EventArgs e)
- {
- /* Dictionary<string, string> dic = new Dictionary<string, string>
- {
- {"component_appid","sAppID"},
- {"component_appsecret","sAppSecret"},
- {"component_verify_ticket","component_verify_ticket"}
- };
- string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
- */
- //DateTime t = Convert.ToDateTime(1463726711);
- //DateTime t2 =LYFZ.WinAPI.CustomPublicMethod.StampToDateTime("1463726711");
- if (Request.RequestType == "POST")
- {
- try
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL 收到 POST请求-\r\nUrl:" + this.Request.Url + "\r\nRawUrl:" + this.Request.RawUrl, postinfoddomaine, Global.LogsDongleDomainList);
- //接收并读取POST过来的XML文件流
- string xmlData = "";
- try
- {
- Request.InputStream.Seek(0, SeekOrigin.Begin);//强制调整指针位置
- using (var streamReader = new StreamReader(Request.InputStream))
- {
- var decryptMsg = string.Empty;
- xmlData = streamReader.ReadToEnd();
- }
- }
- catch (Exception ex)
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL POST 求请加密解密时出错:" + ex.Message, postinfoddomaine, Global.LogsDongleDomainList);
- }
- //把数据重新返回给客户端
- string sToken = OpenPlatformConfig.OpenToken;
- string sAppID = OpenPlatformConfig.OpenAppID;
- string sEncodingAESKey = OpenPlatformConfig.OpenEncodingAESKey;
- //string sAppSecret = "29258df7112c9b170a680f5b598182e5";
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL 开始解密信息:sToken=" + sToken + " sAppID=" + sAppID + " sEncodingAESKey=" + sEncodingAESKey + "xmlData=" + xmlData, postinfoddomaine, Global.LogsDongleDomainList);
- Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(sToken, sEncodingAESKey, sAppID);
- string sReqMsgSig = Request["msg_signature"];
- string sReqTimeStamp = Request["timestamp"];
- string sReqNonce = Request["nonce"];
- string sMsg = ""; //解析之后的明文
- int ret = 0;
- ret = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, xmlData, ref sMsg);
- if (ret != 0)
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL POST 求请加密解密时失败 RET:" + ret, postinfoddomaine, Global.LogsDongleDomainList);
- }
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL 收到的信息:" + sMsg, postinfoddomaine, Global.LogsDongleDomainList);
- var msg = new WeixinMessage();
- msg.Body = new DynamicXml(sMsg);
- /* msg.Body = new DynamicXml("<xml>"
- + "<AppId>"
- + "<![CDATA[wx34b5f92cdbb24fe4]]>"
- + "</AppId>"
- + "<CreateTime>1436066428</CreateTime>"
- + "<InfoType>"
- + "<![CDATA[component_verify_ticket]]>"
- + "</InfoType>"
- + "<ComponentVerifyTicket>"
- + "<![CDATA[ticket@@@SfS2Ck4oxPhL0LRSJH5v9Pr68vjeDfWWPx9SzIWzm6PeKGeEoszohQ-5-EBm4RajI7AKlzIz1Kj1ghPg0t199w]]>"
- + "</ComponentVerifyTicket>"
- + "</xml>");*/
-
- string infoType = msg.Body.InfoType.Value;
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL infoType:" + infoType, postinfoddomaine, Global.LogsDongleDomainList);
- switch (infoType)
- {
- case "component_verify_ticket":
- //这里就是component_verify_ticket的值,保存起来就可以了,处理完成后在页面上输出success,通知微信服务器已经接收到ticket
- string component_verify_ticket = msg.Body.ComponentVerifyTicket.Value;
- OpenPlatformConfig.Component_verify_ticket = component_verify_ticket;
- OpenPlatformConfig.SaveComponent_verify_ticket(component_verify_ticket);
- break;
- case "unauthorized":
- //当用户取消授权的时候,微信服务器也会向这个页面发送信息,在这里做一下记录
- /*<xml>
- <AppId>第三方平台appid</AppId>
- <CreateTime>1413192760</CreateTime>
- <InfoType>unauthorized</InfoType>
- <AuthorizerAppid>公众号appid</AuthorizerAppid>
- </xml>*/
- AuthorizationInfo unauthorizedInfo = new AuthorizationInfo();
- unauthorizedInfo.AppId = msg.Body.AppId.Value;
- unauthorizedInfo.CreateTime = msg.Body.CreateTime.Value;
- unauthorizedInfo.InfoType = AuthorizationInfoType.unauthorized;
- unauthorizedInfo.AuthorizerAppid = msg.Body.AuthorizerAppid.Value;
- PerformAuthorization(unauthorizedInfo, 0);
- break;
- case "authorized":
- //授权成功通知
- /*
- <xml>
- <AppId>第三方平台appid</AppId>
- <CreateTime>1413192760</CreateTime>
- <InfoType>authorized</InfoType>
- <AuthorizerAppid>公众号appid</AuthorizerAppid>
- <AuthorizationCode>授权码(code)</AuthorizationCode>
- <AuthorizationCodeExpiredTime>过期时间</AuthorizationCodeExpiredTime>
- </xml>*/
- AuthorizationInfo authorizedInfo = new AuthorizationInfo();
- authorizedInfo.AppId = msg.Body.AppId.Value;
- authorizedInfo.CreateTime = msg.Body.CreateTime.Value;
- authorizedInfo.InfoType = AuthorizationInfoType.authorized;
- authorizedInfo.AuthorizerAppid = msg.Body.AuthorizerAppid.Value;
- authorizedInfo.AuthorizationCode = msg.Body.AuthorizationCode.Value;
- authorizedInfo.AuthorizationCodeExpiredTime = LYFZ.WinAPI.CustomPublicMethod.StampToDateTime(msg.Body.AuthorizationCodeExpiredTime.Value);
- PerformAuthorization(authorizedInfo, 1);
- break;
- case "updateauthorized":
- //授权更新通知
- /*<xml>
- <AppId>第三方平台appid</AppId>
- <CreateTime>1413192760</CreateTime>
- <InfoType>updateauthorized</InfoType>
- <AuthorizerAppid>公众号appid</AuthorizerAppid>
- <AuthorizationCode>授权码(code)</AuthorizationCode>
- <AuthorizationCodeExpiredTime>过期时间</AuthorizationCodeExpiredTime>
- </xml>*/
- AuthorizationInfo updateauthorizedInfo = new AuthorizationInfo();
- updateauthorizedInfo.AppId = msg.Body.AppId.Value;
- updateauthorizedInfo.CreateTime = msg.Body.CreateTime.Value;
- updateauthorizedInfo.InfoType = AuthorizationInfoType.updateauthorized;
- updateauthorizedInfo.AuthorizerAppid = msg.Body.AuthorizerAppid.Value;
- updateauthorizedInfo.AuthorizationCode = msg.Body.AuthorizationCode.Value;
- updateauthorizedInfo.AuthorizationCodeExpiredTime = LYFZ.WinAPI.CustomPublicMethod.StampToDateTime(msg.Body.AuthorizationCodeExpiredTime.Value);
- PerformAuthorization(updateauthorizedInfo, 1);
- break;
- default:
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收到未处理事件:" + infoType, postinfoddomaine, Global.LogsDongleDomainList);
- break;
- }
- }
- catch(Exception ex) {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权事件接收URL 处理信息时出错:" + ex.Message, postinfoddomaine, Global.LogsDongleDomainList);
- }
- Response.Write("success");
- Response.End();
- /*if (component_verify_ticket != "")
- {
- my_component_verify_ticket = component_verify_ticket;
- Dictionary<string, string> dicqq = new Dictionary<string, string>
- {
- {"component_appid",sAppID},
- {"component_appsecret",sAppSecret},
- {"component_verify_ticket",component_verify_ticket}
- };
- * string json = (new JavaScriptSerializer()).Serialize(dic);
- string formatmsg = "{"
- + "\"component_appid\":\"" + sAppID + "\" ,"
- + "\"component_appsecret\": \"" + sAppSecret + "\","
- + "\"component_verify_ticket\": \"" + component_verify_ticket + "\" "
- +"\"}";
- //获取第三方平台access_token
- string component_access_token = BasicAPI.GetApi_Component_Token(formatmsg).Trim();
-
- }
- */
-
- }
- else {
- Response.Write("最新的“component_verify_ticket”值:" + OpenPlatformConfig.Component_verify_ticket);
- Response.End();
- }
- }
- void AddAuthorizationInfo(AuthorizationInfo authInfo)
- {
- /*if (OpenPlatformConfig.AuthorizationInfoList.ContainsKey(authInfo.AuthorizerAppid))
- {
- AuthorizationInfo findAuthInfo = null;
- if (OpenPlatformConfig.AuthorizationInfoList.TryGetValue(authInfo.AuthorizerAppid, out findAuthInfo))
- {
- findAuthInfo.AppId = authInfo.AppId;
- findAuthInfo.CreateTime = authInfo.CreateTime;
- findAuthInfo.InfoType = authInfo.InfoType;
- findAuthInfo.AuthorizerAppid = authInfo.AuthorizerAppid;
- findAuthInfo.AuthorizationCode = authInfo.AuthorizationCode;
- findAuthInfo.AuthorizationCodeExpiredTime = authInfo.AuthorizationCodeExpiredTime;
- }
- else {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("更新已授权公众号的授权信息时失败:" + authInfo.ToString(), postinfoddomaine, Global.LogsDongleDomainList);
- }
-
- }
- else {
- OpenPlatformConfig.AuthorizationInfoList.Add(authInfo.AuthorizerAppid, authInfo);
- }*/
- }
- LYFZ.WeixinServiceDate.DAL.DAL_Authorization_info Authorization_infoDal = new WeixinServiceDate.DAL.DAL_Authorization_info();
- /// <summary>
- /// 执行授权
- /// </summary>
- /// <param name="authInfo"></param>
- /// <param name="_AuthorizeStatus">授权状态 1 为授权 0 为取消授权</param>
- void PerformAuthorization(AuthorizationInfo authInfo, int _AuthorizeStatus)
- {
- try
- {
- //授权是否成功
- bool AuthorizeSuccess = false;
- LYFZ.WeixinServiceDate.Model.Model_Authorization_info Authorization_infoModel = new LYFZ.WeixinServiceDate.Model.Model_Authorization_info();
- if (Authorization_infoDal.Exists("authorizer_appid", authInfo.AuthorizerAppid))
- {
- Authorization_infoModel = (LYFZ.WeixinServiceDate.Model.Model_Authorization_info)Authorization_infoDal.GetModelObject("authorizer_appid", authInfo.AuthorizerAppid);
- }
- if (_AuthorizeStatus == 1)
- {
- Dictionary<string, string> dic = new Dictionary<string, string>
- {
- {"component_appid",LYFZ.WXLibrary.OpenPlatformConfig.OpenAppID},
- {"authorization_code",authInfo.AuthorizationCode},
- };
- string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
- string retmsg = "";
- var Authorization_InfoObj = BasicAPI.GetAuthorization_Info(LYFZ.WXLibrary.OpenPlatformConfig.Component_Access_Token, json, out retmsg);
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取授权请求返回信息:" + retmsg, "-2", Global.LogsDongleDomainList);
- if (Authorization_InfoObj != null)
- {
-
- string authorizer_appid = Authorization_InfoObj.authorization_info.authorizer_appid.ToString().Trim();
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("成功获取授权请求信息:" + authorizer_appid, "-2", Global.LogsDongleDomainList);
- if (authorizer_appid.Trim().Length > 0)
- {
- Authorization_infoModel.Authorizer_appid = authorizer_appid;
- Authorization_infoModel.Authorization_info = Authorization_InfoObj.ToString();
- Authorization_infoModel.Authorizer_access_token = Authorization_InfoObj.authorization_info.authorizer_access_token;
- Authorization_infoModel.Expires_in = Convert.ToInt32(Authorization_InfoObj.authorization_info.expires_in);
- Authorization_infoModel.Authorizer_refresh_token = Authorization_InfoObj.authorization_info.authorizer_refresh_token;
- Authorization_infoModel.AuthorizeStatus = _AuthorizeStatus;
- Authorization_infoModel.UpdateTime = DateTime.Now;
- Authorization_infoModel.RefreshTokenTime = DateTime.Now;
- if (authorizer_appid.ToLower().Trim() == OpenPlatformConfig.MicroLetterTestAPPID.ToLower().Trim())
- {
- Authorization_infoModel.CompanyName = "微信后台专用测试公众号";
- Authorization_infoModel.JMGDomainName = OpenPlatformConfig.MicroLetterTestUsername;
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("收到“微信后台专用测试公众号(" + OpenPlatformConfig.MicroLetterTestUsername + ")”测试授权请求", "-2", Global.LogsDongleDomainList);
- }
- if (Authorization_infoModel.ID > 0)
- {
- AuthorizeSuccess = Authorization_infoDal.Update(Authorization_infoModel);
- Authorization_infoModel = (LYFZ.WeixinServiceDate.Model.Model_Authorization_info)Authorization_infoDal.GetModelObject("authorizer_appid", authorizer_appid);
- if (AuthorizeSuccess && Authorization_infoModel != null && Authorization_infoModel.ID > 0)
- {
- Global.UpdateAuthorizedAPPIDHand(Authorization_infoModel);
- }
- }
- else
- {
- Authorization_infoModel.CreateTime = DateTime.Now;
- AuthorizeSuccess = Authorization_infoDal.Add(Authorization_infoModel);
- if (AuthorizeSuccess && authorizer_appid.ToLower().Trim() == OpenPlatformConfig.MicroLetterTestAPPID.ToLower().Trim())
- {
- Authorization_infoModel = (LYFZ.WeixinServiceDate.Model.Model_Authorization_info)Authorization_infoDal.GetModelObject("authorizer_appid", authorizer_appid);
- Global.AddAuthorizedAPPIDHand(Authorization_infoModel);
- Global.UpdateAuthorizationInfoDaTable(authorizer_appid, Authorization_infoModel);
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("收到“微信后台专用测试公众号(" + OpenPlatformConfig.MicroLetterTestUsername + ")”测试授权请求", "-2", Global.LogsDongleDomainList);
- }
-
- }
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("执行授权成功:authInfo.InfoType=" + authInfo.InfoType.ToString() + "&CompanyName=" + Authorization_infoModel.CompanyName + " &JMGDomainName=" + Authorization_infoModel.JMGDomainName, "-2", Global.LogsDongleDomainList);
- if (!AuthorizeSuccess)
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("授权失败,原因:更新数据库操作失败", "-2", Global.LogsDongleDomainList);
- }
- }
- else
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取授权失败请重试:" + Authorization_InfoObj.ToString(), "-2", Global.LogsDongleDomainList);
- }
- }
- else
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取授权失败,原因:" + retmsg, "-2", Global.LogsDongleDomainList);
- }
- }
- else {
- if (Authorization_infoModel!=null&&Authorization_infoModel.ID > 0)
- {
- Authorization_infoModel.RefreshTokenTime = DateTime.Now;
- Authorization_infoModel.AuthorizeStatus = _AuthorizeStatus;
- AuthorizeSuccess = Authorization_infoDal.Update(Authorization_infoModel);
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("用户已取消授权:authInfo.InfoType=" + authInfo.InfoType.ToString() + "&CompanyName=" + Authorization_infoModel.CompanyName + " &JMGDomainName=" + Authorization_infoModel.JMGDomainName, "-2", Global.LogsDongleDomainList);
- }
- Global.RemoveAuthorizedAPPIDHand(Authorization_infoModel);
- }
- }
- catch (Exception ex)
- {
- LYFZ.WXLibrary.CommonHandleClass.WriteLog("解析返回授权信息时出错:" + ex.Message, "-2", Global.LogsDongleDomainList);
- }
- }
- }
- }
|