<%@ WebHandler Language="C#" Class="signIn" %> using System; using System.Web; using eMIS.Data; using System.Net; using System.Data; /* * Create by cjx,2015-10-28 * */ public class signIn : IHttpHandler { public void ProcessRequest(HttpContext context) { string loginid = context.Request["u"]; string jd = context.Request["jd"]; string wd = context.Request["wd"]; string bz = context.Request["bz"]; try { BaiduAddress address = Geocoding("gcj02ll", jd, wd); double d1, d2; if (!double.TryParse(jd, out d1) || !double.TryParse(wd, out d2)) { throw new Exception(string.Format("获取的坐标不正确,请再试一次({0},{1})", jd, wd)); } //可以透过代理服务器 string userIP = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (userIP == null || userIP == "") { //没有代理服务器,如果有代理服务器获取的是代理服务器的IP userIP = context.Request.ServerVariables["REMOTE_ADDR"]; } // throw new Exception(loginid + "|" + jd + "|" + wd + "|" + address.Address + "|" + address.Province + "|" + address.City + "|" + address.CityCode + "|" + bz + "|" + userIP); ReportCoord(loginid, jd, wd, address.Address, address.Province, address.City, address.CityCode, bz, userIP); context.Response.ContentType = "text/plain"; context.Response.Write("ok"); } catch (Exception ex) { context.Response.ContentType = "text/plain"; context.Response.Write(ex.Message); } } public bool IsReusable { get { return false; } } public string ReportCoord(string userLogin, string longitude, string latitude, string address, string province, string city, string cityCode,string bz,string ip) { string sql = ""; eDbManager manager = new eDbManager(eMIS.Data.WebConfigManager.DefaultDb); eDbOperator dbo = manager.CreateDbOperator(); string phone, userId,userType,xm,zgsid="28",sfzh; try { int affectNum = dbo.ExecuteProcedure("p_wx_signIn", userLogin, longitude, latitude, address, province, city, cityCode, bz,ip); return affectNum > 0 ? "ok" : "err"; sql = "select phone,id,xingming,USERCATEGORY,sfzh from com_yhb where login=?"; DataTable dTable = dbo.ExecuteTable(sql, CommandType.Text, userLogin); if (dTable.Rows.Count > 0) { phone = Convert.ToString(dTable.Rows[0][0]).Trim().Substring(0,Math.Min(11,Convert.ToString(dTable.Rows[0][0]).Length)); userId = Convert.ToString(dTable.Rows[0][1]); userType = Convert.ToString(dTable.Rows[0]["USERCATEGORY"]); xm = Convert.ToString(dTable.Rows[0]["xingming"]); sfzh = Convert.ToString(dTable.Rows[0]["sfzh"]); dbo.BeginTrans(); sql = "insert into XT_Coord(phone,longitude,latitude,userid,address,province,city,city_code,bz) values(?,?,?,?,?,?,?,?,?)"; dbo.ExecuteNonQuery(sql, phone, longitude, latitude, userId, address, province, city, cityCode,bz); sql = "update XT_Coord_RealTime set dt=?,longitude=?,latitude=?,phone=?,address=?,province=?,city=?,city_code=?, id_number=?,user_name=?,user_type=?,subco_id=28 where userid=?"; int r = dbo.ExecuteNonQuery(sql, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), longitude, latitude, phone, address, province, city, cityCode,sfzh,xm,userType, userId); if (r == 0) { sql = "insert into xt_coord_realtime(userid,longitude,latitude,phone,address,province,city,city_code,id_number,user_name,user_type,subco_id) values(?,?,?,?,?,?,?,?,?,?,?,?)"; dbo.ExecuteNonQuery(sql, userId, longitude, latitude, phone, address, province, city, cityCode, sfzh, xm, userType, 28); } dbo.CommitTrans(); } return "ok"; } catch (Exception ex) { // dbo.RollbackTrans(); //return ex.Message; throw ex; } } /// /// 通过经纬度获取地址、省市等 /// /// 包括:bd09ll(百度经纬度坐标)、gcj02ll(国测局经纬度坐标)、wgs84ll( GPS经纬度) /// 经度 /// 纬度 private BaiduAddress Geocoding(string coordtype, string lng, string lat) { string url = "http://api.map.baidu.com/geocoder/v2/?ak=twibmGXUQR0KyWjCXQ7ElGAM&callback=renderReverse&location={0},{1}&output=xml&pois=0&coordtype={2}"; System.Net.HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format(url, lat, lng,coordtype)); request.Timeout = 5000; request.Method = "GET"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()); // string xmlstr = sr.ReadToEnd(); System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(sr); BaiduAddress addr = new BaiduAddress(); while (xmlReader.Read()) { if (xmlReader.IsStartElement()) { switch (xmlReader.Name.ToLower()) { case "formatted_address": addr.Address = xmlReader.ReadString(); break; case "city": addr.City = xmlReader.ReadString(); break; case "citycode": addr.CityCode = xmlReader.ReadString(); break; case "province": addr.Province = xmlReader.ReadString(); break; case "lat": addr.Location.Latitude = xmlReader.ReadString(); break; case "lng": addr.Location.Longitude = xmlReader.ReadString(); break; } } } return addr; } class BaiduAddress { private LocationClass _location = new LocationClass(); public BaiduAddress() { _location = new LocationClass(); } private string _address = string.Empty; private string _province = string.Empty; private string _city = string.Empty; private string _cityCode = string.Empty; public string Address { set { _address = value; } get { return _address; } } public string Province { set { _province = value; } get { return _province; } } public string City { set { _city = value; } get { return _city; } } public string CityCode { set { _cityCode = value; } get { return _cityCode; } } public LocationClass Location { get { return _location; } } public class LocationClass { private string _lng = string.Empty; private string _lat = string.Empty; public string Longitude { set { _lng = value; } get { return _lng; } } public string Latitude { set { _lat = value; } get { return _lat; } } } } }