<%@ WebHandler Language="C#" Class="wx_Handler_1" Debug="true" %> using System; using System.Web; using System.IO; using System.Xml; using eMIS.Data; using System.Data; using Tencent; using DingTalk.Api; using DingTalk; using DingTalk.Api.Request; using DingTalk.Api.Response; /* * 本页面用于验证回调URL * 企业开启回调模式时,企业号会向验证URL发送一个get请求,此页面解密echostr原文, * 并将原文当作Get请求,返回给公众平台 * * cjx@2015/4/30 * * 本例,演示如何获取工作任务 * 此例中,在企业号应用中打开“回调模式”,并启用“上报用户进入应用事件”,当用户进入应用时,获取事件,解析其用户名 * 为方便起见,微信企业号中通讯录的用户名与eMIS系统中用户名相同 * */ public class wx_Handler_1 : IHttpHandler { public void ProcessRequest(HttpContext context) { const string cookies_name = "dt_uid"; System.Text.StringBuilder sb = new System.Text.StringBuilder(); string dd_uid = "", emis_uid = ""; string str = ""; int flag = 0; try { if (context.Request.Cookies[cookies_name] != null && !string.IsNullOrEmpty(context.Request.Cookies[cookies_name].Value )) { dd_uid = context.Request.Cookies[cookies_name].Values["dd_uid"]; emis_uid = context.Request.Cookies[cookies_name].Values["emis_uid"]; flag = 1; //throw new Exception(dd_uid); } else { string code = context.Request["c"]; flag = 0; string token = ""; Dingtalk.Dingding dd = new Dingtalk.Dingding(context); token = dd.Messager.GetAccesstoken(); //throw new Exception(token); string surl = "https://oapi.dingtalk.com/user/getuserinfo"; //surl = string.Format(surl, DingdingStatic.AccessToken.Token, code); IDingTalkClient client = new DefaultDingTalkClient(surl); OapiUserGetuserinfoRequest req = new OapiUserGetuserinfoRequest(); req.Code = code; req.SetHttpMethod("GET"); OapiUserGetuserinfoResponse r = client.Execute(req, token); // context.Response.Write("w"+r.Errcode); context.Response.End(); if (r.IsError) { throw new Exception(r.Errmsg); } else { dd_uid = r.Userid; if (string.IsNullOrEmpty(dd_uid)) { throw new Exception("未能获取用户"); } /* string sql = "select ID,login,xingming from V_DingTalk_Users where UserID=?"; eDbManager manager = new eDbManager(WebConfigManager.DefaultDb); eDbOperator dbo = manager.CreateDbOperator(); DataTable tab = dbo.ExecuteTable(sql, CommandType.Text, dd_uid); if (tab.Rows.Count == 0) { throw new Exception("未找到用户:" + dd_uid); } else { emis_uid = Convert.ToString(tab.Rows[0]["id"]); } HttpCookie usercookie = new HttpCookie(cookies_name); usercookie.Value = dd_uid; usercookie.Values["dd_uid"] = dd_uid; usercookie.Values["emis_uid"] = emis_uid; usercookie.Expires = DateTime.MaxValue; usercookie.Domain = WeiXinWebCommon.c_wx_domain_name; context.Response.AppendCookie(usercookie); */ } } str = string.Format("{{'errcode':0,'dd_uid':'{0}','emis_uid':'{1}','flag':{2}}}", dd_uid, emis_uid, flag); context.Response.ContentType = "text/plain"; context.Response.Write(str); } catch (Exception ex) { context.Response.ContentType = "text/plain"; context.Response.Write(string.Format("{{'errcode':1,'errmsg':'{0}','dd_uid':'','emis_uid':'','flag':2}}",ex.Message)); } } public bool IsReusable { get { return false; } } }