using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ThoughtWorks.QRCode.Codec; public partial class SystemManage_openid : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string code = Request.QueryString["code"]; string state = Request.QueryString["state"]; if (!string.IsNullOrEmpty(code) && !string.IsNullOrEmpty(state)) { string openid = GetOAuthOpenId(code); if (openid == "") { Response.Write("

获取openid失败

"); Response.End(); } ZWL.BLL.ERPUser bll = new ZWL.BLL.ERPUser(); bool result = bll.Setopenid(state, openid); if (result) { Response.Write("

绑定成功

"); Response.End(); } else { Response.Write("

绑定失败

"); Response.End(); } } else { string id = Request.QueryString["ID"]; if (string.IsNullOrEmpty(id)) id = ZWL.Common.PublicMethod.GetSessionValue("UserID"); if(id== "NoLogin") { Response.Write("请先登录"); Response.End(); } ZWL.BLL.ERPUser bll = new ZWL.BLL.ERPUser(); string openid = bll.Getopenid(id); if (!string.IsNullOrEmpty(openid)) lbl_pic.Text = "目前绑定:" + openid; //生成二维码 //https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb79cf945835c07e3&redirect_uri=http://dc.51csharp.com/SystemManage/openid.aspx&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb79cf945835c07e3&redirect_uri=http://dc.51csharp.com/SystemManage/openid.aspx&response_type=code&scope=snsapi_base&state="+id+"&connect_redirect=1#wechat_redirect"; getImg(url); } } } private string GetOAuthOpenId(string code) { string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxb79cf945835c07e3&secret=e7ff8220aaae27b4dc88862bdf0a0087&code=" + code + "&grant_type=authorization_code"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); //获取响应的字符串流 if (stream != null) { StreamReader sr = new StreamReader(stream); //创建一个stream读取流 string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米 sr.Close(); stream.Close(); Dictionary jsDict = Newtonsoft.Json.JsonConvert.DeserializeObject>(html); if (jsDict.ContainsKey("openid")) return jsDict["openid"].ToString(); else return ""; } return ""; } private void getImg(string url) { QRCodeEncoder endocder = new QRCodeEncoder(); //二维码背景颜色 //endocder.QRCodeBackgroundColor = System.Drawing.Color.ForestGreen; //二维码编码方式 endocder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //每个小方格的宽度 endocder.QRCodeScale = 5; //二维码版本号 //endocder.QRCodeVersion = 5; //二维码版本号 改成0能解决长字符串“索引超出了数组界限”问题 endocder.QRCodeVersion = 0; //纠错等级 endocder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //将json串做成二维码 try { using (Bitmap bitmap = endocder.Encode(url, System.Text.Encoding.UTF8)) { using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); string base64 = Convert.ToBase64String(ms.ToArray()); Image1.ImageUrl = "data:image/png;base64," + base64; } } } catch (Exception ex) { Response.Write("生成二维码失败"); Response.End(); } } }