119 lines
4.7 KiB
C#
119 lines
4.7 KiB
C#
|
|
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("<h1>获取openid失败</h1>");
|
|||
|
|
Response.End();
|
|||
|
|
}
|
|||
|
|
ZWL.BLL.ERPUser bll = new ZWL.BLL.ERPUser();
|
|||
|
|
bool result = bll.Setopenid(state, openid);
|
|||
|
|
if (result)
|
|||
|
|
{
|
|||
|
|
Response.Write("<h1>绑定成功</h1>");
|
|||
|
|
Response.End();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Response.Write("<h1>绑定失败</h1>");
|
|||
|
|
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<string, object> jsDict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|