using System; using System.Collections.Generic; using System.Xml; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Newtonsoft.Json; using System.Linq; using Newtonsoft.Json.Linq; using BP.DA; using BP.Cloud.WeXinAPI; using BP.Port; using BP.Sys; using Glo = BP.Cloud.WeXinAPI.Glo; namespace CCFlow.Admin.WeChat { public partial class Callme : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string sVerifyMsgSig = BP.Cloud.WeXinAPI.Glo.getValue("msg_signature"); string sVerifyTimeStamp = BP.Cloud.WeXinAPI.Glo.getValue("timestamp"); string sVerifyNonce = BP.Cloud.WeXinAPI.Glo.getValue("nonce"); string sVerifyEchoStr = BP.Cloud.WeXinAPI.Glo.getValue("echostr").Replace(" ", "+"); if (Request.RequestType.ToUpper().Equals("POST") == false) { Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(Glo.Token, Glo.EncodingAESKey, Glo.CorpID); //验证回调URL if (string.IsNullOrEmpty(sVerifyEchoStr) == false) { string sEchoStr = string.Empty; int ret = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr, ref sEchoStr); if (ret != 0) System.Console.WriteLine("ERR: VerifyURL fail, ret: " + ret); //ret==0表示验证成功,sEchoStr参数表示明文,用户需要将sEchoStr作为get请求的返回参数,返回给企业微信。 //this.Response.Write(sEchoStr); HttpContext.Current.Response.Write(sEchoStr); HttpContext.Current.Response.End(); } //授权设置. //glo.getPreAuthCode(); return; } //推送suite_ticket、授权成功通知、组织变更通知、人员变更通知,用于获取suite_access_token。 string msg = ""; try { msg = MainBuessPage(); } catch (Exception ex) { msg = "err@" + ex.Message; } /* if (msg== "success") { return; } HttpContext.Current.Response.Charset = "UTF-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; HttpContext.Current.Response.ContentType = "text/html"; HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.Write("success"); HttpContext.Current.Response.End();*/ } /// /// 推送suite_ticket、授权成功通知、组织变更通知、人员变更通知等通知事件推送 /// public string MainBuessPage() { string sMsg = ""; string sVerifyMsgSig = BP.Cloud.WeXinAPI.Glo.getValue("msg_signature"); string sVerifyTimeStamp = BP.Cloud.WeXinAPI.Glo.getValue("timestamp"); string sVerifyNonce = BP.Cloud.WeXinAPI.Glo.getValue("nonce"); string postStrs = PostInput(); XmlDocument xd = new XmlDocument(); Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(Glo.Token, Glo.EncodingAESKey, Glo.SuiteID); int code = wxcpt.DecryptMsg(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, postStrs, ref sMsg); if (code != 0) return "err@错误代码:" + code; xd.LoadXml(sMsg); //推送suite_ticket协议每十分钟微信推送一次,判断是推送ticket的情况,取得ticket保存到缓存中 if (xd.FirstChild["InfoType"].InnerText.Equals("suite_ticket")) { string suitTicket = xd.FirstChild["SuiteTicket"].InnerText; Glo.Suite_ticket = suitTicket; HttpContext.Current.Cache.Insert("suitTicket", suitTicket); HttpContext.Current.Response.Write("success"); return "success"; } //授权成功通知回调 if (xd.FirstChild["InfoType"].InnerText.Equals("create_auth")) { //授权成功通知回调推送给服务商 string authCode = xd.FirstChild["AuthCode"].InnerText; HttpContext.Current.Cache.Insert("authcode", authCode); //根据临时授权码,获得永久授权码并安装应用 BP.Cloud.WeXinAPI.Glo.InstallIt(authCode); HttpContext.Current.Response.Write("success"); return "success"; } //取消安装的,安装修改. if (xd.FirstChild["InfoType"].InnerText.Equals("cancel_auth")) { string authCorpId = xd.FirstChild["AuthCorpId"].InnerText; BP.Cloud.Org org = new BP.Cloud.Org(); int i = org.Retrieve("CorpID", authCorpId); if (i == 1) org.DoDelete(); HttpContext.Current.Response.Write("success"); return "success"; } //授权变更. if (xd.FirstChild["InfoType"].InnerText.Equals("change_auth")) { string authCode = xd.FirstChild["AuthCode"].InnerText; HttpContext.Current.Cache.Insert("authcode", authCode); HttpContext.Current.Response.Write("success"); return "success"; } //通讯录变更 if (xd.FirstChild["InfoType"].InnerText.Equals("change_contact")) { string ChangeType = xd.FirstChild["ChangeType"].InnerText; string SuiteId = xd.FirstChild["SuiteId"].InnerText;//第三方应用ID string corpID = xd.FirstChild["AuthCorpId"].InnerText;//授权企业的CorpID BP.Cloud.Org org = new BP.Cloud.Org(); int i = org.Retrieve(BP.Cloud.OrgAttr.CorpID, corpID); if (i == 0) { BP.DA.Log.DebugWriteError("err@不应该查询不到 AuthCorpId= " + corpID + "的数据."); HttpContext.Current.Response.Write("err"); HttpContext.Current.Response.Write("success"); return "success"; } //新建成员 if (ChangeType.Equals("create_user")) { BP.Cloud.WeXinAPI.Glo.changeConCreateUser(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } //变更成员信息 if (ChangeType.Equals("update_user")) { BP.Cloud.WeXinAPI.Glo.changeConUpdateUser(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } //删除成员 if (ChangeType.Equals("delete_user")) { BP.Cloud.WeXinAPI.Glo.changeConDeleteUser(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } //新增部门 if (ChangeType.Equals("create_party") == true) { BP.Cloud.WeXinAPI.Glo.changeConCreateDept(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } //更新部门 if (ChangeType.Equals("update_party")) { BP.Cloud.WeXinAPI.Glo.changeConUpdateDept(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } //删除部门 if (ChangeType.Equals("delete_party")) { BP.Cloud.WeXinAPI.Glo.changeConDelDept(xd, org); HttpContext.Current.Response.Write("success"); return "success"; } HttpContext.Current.Response.Write("success"); } //执行安装. // return BP.Cloud.WeXinAPI.Glo.MainBuess(xd); return "success"; } /// /// 获取POST返回来的数据 /// /// private string PostInput() { try { System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.UTF8.GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); return builder.ToString(); } catch (Exception ex) { throw ex; } } } }