专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

在C#中winform实现微信二维码登录、第三方登录源代码

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:13:19       共计:3645 浏览

1. 我实现的是微信扫码登录,当然要知道微信给的接口,可以在https://open.weixin.qq.com/ 这里申请开发的账号,申请完之后登录微信公众平台,点击接口权限–网页授权获取用户基本信息(如下图)


2. 微信官方还是很靠谱,里面有4步,按照这4步走是没问题的(下面主要说最重要的三步)

3. 第一步(如下图):

下面是对里面的参数的详解:


这里注意一下:回调地址最好进行UrlEncode编码。


   第二步通过获取的code获取access_token


返回值json是这样的


   第三步,通过获取的openid和access_token获取用户信息

   

   这个接口的返回值:

 



具体代码


1、拖控件WebBrowser到一个winform中。设置属性-url,为上面第一步的URL


https://open.weixin.qq.com/connect/qrconnect?appid=你申请的appid&redirect_uri=你的回调地址&response_type=code&scope=snsapi_login&state={{loginPage}}




运行程序


2、获取code

利用 WebBrowser的Navigating或者Navigated事件,微信的授权登录,这两个事件都可以得到带有code的网址。把每次的网址放到一个list中


           // 微信跳转的网址列表

           ArrayList addressList = new ArrayList();


           private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)

           {

               string url = e.Url.ToString();

               //微信每次跳转的页面放到list中,第一个是包含code的网址

               addressList.Add(url);            

           }


  


3、定义Access_token类,获取Access_token


public class OAuth_Token

   {

       public OAuth_Token()

       {


           //

           //TODO: 在此处添加构造函数逻辑

           //

       }

       //access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

       //expires_in access_token接口调用凭证超时时间,单位(秒)

       //refresh_token 用户刷新access_token

       //openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

       //scope 用户授权的作用域,使用逗号(,)分隔

       public string _access_token;

       public string _expires_in;

       public string _refresh_token;

       public string _openid;

       public string _scope;

       public string access_token

       {

           set { _access_token = value; }

           get { return _access_token; }

       }

       public string expires_in

       {

           set { _expires_in = value; }

           get { return _expires_in; }

       }


       public string refresh_token

       {

           set { _refresh_token = value; }

           get { return _refresh_token; }

       }

       public string openid

       {

           set { _openid = value; }

           get { return _openid; }

       }

       public string scope

       {

           set { _scope = value; }

           get { return _scope; }

       }

   /// <summary>  

       /// 生成Json格式  

       /// </summary>  

       /// <typeparam name="T"></typeparam>  

       /// <param name="obj"></param>  

       /// <returns></returns>  

       public string GetJson(string url)

       {

           WebClient wc = new WebClient();

           wc.Credentials = CredentialCache.DefaultCredentials;

           wc.Encoding = Encoding.UTF8;

           string returnText = wc.DownloadString(url);


           if (returnText.Contains("errcode"))

           {

               //可能发生错误

           }

           return returnText;

       }

       /// <summary>  

       /// json转实体  

       /// </summary>  

       /// <typeparam name="T"></typeparam>  

       /// <param name="szJson"></param>  

       /// <returns></returns>  

       public OAuth_Token Get_token(string Code)

       {

           string appid = "";

           string appsecret = "";

           //获取微信回传的openid、access token

           string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + Code + "&grant_type=authorization_code");

           //微信回传的数据为Json格式,将Json格式转化成对象

           OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);

           return Oauth_Token_Model;

       }

       /// <summary>  

       /// 通过access_token和openid获取用户信息  

       /// </summary>  

       /// <returns></returns>  

       public OAuthUser Get_UserInfo(string access_token, string openid)

       {

           //获取微信回传的openid、access token

           string Str = GetJson("https://api.weixin.qq.com/sns/userinfo?access_token="+ access_token + "&openid="+ openid + "&lang=zh_CN");

           //微信回传的数据为Json格式,将Json格式转化成对象

           OAuthUser userinfo = JsonHelper.ParseFromJson<OAuthUser>(Str);

           return userinfo;

       }

   }


 


4、定义用户信息实体类


   /// <summary>

   /// 微信用户信息类

   /// </summary>

   public class OAuthUser

   {

       public OAuthUser()

       { }

       #region 数据库字段

       private string _openID;

       private string _searchText;

       private string _nickname;

       private string _sex;

       private string _province;

       private string _city;

       private string _country;

       private string _headimgUrl;

       private string _privilege;

       private string _unionid;


       #endregion


       #region 字段属性

       /// <summary>

       /// 用户的唯一标识

       /// </summary>

       public string openid

       {

           set { _openID = value; }

           get { return _openID; }

       }

       /// <summary>

       ///

       /// </summary>

       public string SearchText

       {

           set { _searchText = value; }

           get { return _searchText; }

       }

       /// <summary>

       /// 用户昵称

       /// </summary>

       public string nickname

       {

           set { _nickname = value; }

           get { return _nickname; }

       }

       /// <summary>

       /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知

       /// </summary>

       public string sex

       {

           set { _sex = value; }

           get { return _sex; }

       }

       /// <summary>

       /// 用户个人资料填写的省份

       /// </summary>

       public string province

       {

           set { _province = value; }

           get { return _province; }

       }

       /// <summary>

       /// 普通用户个人资料填写的城市

       /// </summary>

       public string city

       {

           set { _city = value; }

           get { return _city; }

       }

       /// <summary>

       /// 国家,如中国为CN

       /// </summary>

       public string country

       {

           set { _country = value; }

           get { return _country; }

       }

       /// <summary>

       /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

       /// </summary>

       public string headimgurl

       {

           set { _headimgUrl = value; }

           get { return _headimgUrl; }

       }

       /// <summary>

       /// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)其实这个格式称不上JSON,只是个单纯数组

       /// </summary>

       public string privilege

       {

           set { _privilege = value; }

           get { return _privilege; }

       }

       public string unionid

       {

           set { _unionid = value; }

           get { return _unionid; }

       }

       #endregion

   }


  


5、 根据openid,access token获得用户信息


private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

       {

           string tempCode = addressList[0].ToString();

           //微信最终获得的code

           string code = "";

           if (tempCode.Contains("code"))

           {

               int iStart = tempCode.IndexOf("=");

               int iEnd = tempCode.IndexOf('&', iStart);

               if (iEnd < 0)

               {

                   iEnd = tempCode.Length - iStart;

               }

               else

               {

                   iEnd -= iStart;

               }

               code = tempCode.Substring(iStart + 1, iEnd - 1);

           }

           else

           {

               return;

           }


           if (string.IsNullOrEmpty(code))

               return;

           OAuth_Token token = new OAuth_Token();

           OAuth_Token Model = token.Get_token(code);  //获取access_token

           OAuthUser OAuthUser_Model = token.Get_UserInfo(Model.access_token, Model.openid);//获取用户信息    

       }


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:.NET编程PC端实现微信扫码注册和登录功能 | ·下一条:用C#在winform项目中写一个微信登录软件

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有