首页 > 其他分享 >qq客户端第三方登陆

qq客户端第三方登陆

时间:2023-04-25 18:35:02浏览次数:38  
标签:qq access return string int Access token 第三方 客户端

xaml代码:

<Window x:Class="WpfApp1.QQFormCef"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
        mc:Ignorable="d"
        Title="QQFormCef" Height="450" Width="800">
    <Grid>
        <cef:ChromiumWebBrowser x:Name="browser"  ></cef:ChromiumWebBrowser>
    </Grid>
</Window>

后台:

namespace WpfApp1
{
    /// <summary>
    /// QQFormCef.xaml 的交互逻辑
    /// </summary>
    public partial class QQFormCef : Window
    {
        public QQFormCef()
        {
            InitializeComponent();
            // 使用cefsharp 如果使用webbrowser,会出现win7环境中拿不全跳转的地址
            browser.Address = "xxx";
            browser.FrameLoadStart += Browser_FrameLoadStart;
        }
         
        /// <summary>
        /// 应用的APPID
        /// </summary>
        private string app_id = "xxx";

        /// <summary>
        /// 应用的APPKEY
        /// </summary>
        private string app_secret = "xxx";

        /// <summary>
        /// 成功授权后的回调地址
        /// </summary>
        private string myredirect_uri = "xxx";

        /// <summary>
        /// 1:成功  0:失败
        /// </summary>
        public int IsSuccessed { get; set; }

        private void Browser_FrameLoadStart(object sender, CefSharp.FrameLoadStartEventArgs e)
        { 
          //  string onlineId = LoginUserGlobal.OnlineId;
            string url = e.Url;
            if (url.Contains("access_token"))
            {
                string accessToken = Get_AccessToken(url);
                Dispatcher.Invoke(new Action(() => { UserLoin(accessToken); }));
                return;
            }
        }

        //Step2:一般情况是通过Authorization Code获取Access Token,这里直接从网址获取Access Token
        protected string Get_AccessToken(string strTempToken)
        {
            if (string.IsNullOrEmpty(strTempToken))
                return null;
            //qq最终获得的Access_token
            string AccessToken = "";
            int iStart = strTempToken.IndexOf("=");
            int iEnd = strTempToken.LastIndexOf('&');
            if (iStart < iEnd)
            {
                int codeLength = iEnd - iStart - 1;
                AccessToken = strTempToken.Substring(iStart + 1, codeLength);
            }
            return AccessToken;
        }

        //Step3:使用Access Token来获取用户的OpenID
        protected string Get_OpenID(string Access_token)
        {
            string callback = JSONHelper.GetJson("https://graph.qq.com/oauth2.0/me?access_token=" + Access_token);
            int ibegin = callback.IndexOf("{");
            int iEnd = callback.IndexOf("}");
            int ilength = 0;
            if (ibegin < iEnd)
            {
                ilength = iEnd - ibegin;
            }
            string strOpenId = callback.Substring(ibegin, ilength + 1);
            QQCallBack qqOpenId = JSONHelper.ParseFromJson<QQCallBack>(strOpenId);
            string openId = qqOpenId.openid;
            return openId;
        }
        //Step4: 调用OpenAPI获取各种信息
        protected QQUser Get_qqUserInfo(string Access_token, string openId)
        {
            string userInfostr = JSONHelper.GetJson("https://graph.qq.com/user/get_user_info?access_token=" + Access_token + "&oauth_consumer_key=" + app_id + "&openid=" + openId);
            QQUser qqUser = JSONHelper.ParseFromJson<QQUser>(userInfostr);
            return qqUser;
        }

        #region 用户登录
        private void UserLoin(string access_token)
        {
            if (string.IsNullOrEmpty(access_token))
                return;
            string openid = Get_OpenID(access_token);
            if (string.IsNullOrEmpty(openid))
            {
                return;
            }

            QQUser qqUser = Get_qqUserInfo(access_token, openid);
            Close();
            
        }
        #endregion
          
    }
}

 

标签:qq,access,return,string,int,Access,token,第三方,客户端
From: https://www.cnblogs.com/anjingdian/p/17353504.html

相关文章

  • 微信客户端登陆
    界面:<Windowx:Class="WpfApp1.weixin"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • Citrix XenDesktop 2203实现只允许图片从客户端拷贝至云桌面
    一、前言最近遇到个别客户需求,要求只允许从本地拷贝图片至云桌面,禁止其他文件、文字拷贝,禁止从VDA拷贝任何数据到客户端本地。二、实现步骤1、只允许图片从客户端拷贝到云桌面会话剪贴板写入允许的格式---需要设置CF_BITMAP(图片)客户端剪贴板重定向------需要开启限制会话剪贴板......
  • 微博客户端登陆
    界面:<Windowx:Class="WpfApp1.weibo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.c......
  • 【ahk】为QQ增加激活主面板的热键
    本脚本只是实现了热键激活不在前台的QQ主面板,并不是热键打开主面板。使用方法:先手动打开QQ主面板,并且不要最小化,然后运行本脚本,此脚本会探测到主面板的id,然后绑定热键win+z来用于激活动作。/*为QQ增加热键这个脚本前提是,你要激活的窗口需要事先打开的(且主面板不能最小化)。然后......
  • C/C++服务端客户端通讯程序[2023-04-24]
    C/C++服务端客户端通讯程序[2023-04-24]Socket通讯程序..服务器端).pptx任务:Socket通讯程序开发·基本要求(80分)∶完成一对一的Socket客户端与服务器程序·进阶要求(90分)∶在完成基本要求基础上,将服务器端程序改为多线程程序·高级要求(100分)︰将客户端和服务器端都改为多......
  • Eclipse打JAR包引用的第三方JAR包找不到的问题。
    我的程序里引用了别的JAR包在ECLIPSE里运行正常我想把我的程序打个JAR包打包的时候把引用的包也打进去了可运行程序确总是找不到我引用的包是不是路径的问题?急死我了快    解决方案:在你的项目文件夹下建一个META-INF文件夹里面新建一个MANIFEST.MF的文件内容大至如......
  • 如何解决安卓七,客户端用的webview打包视频切换有暂停图标
    可以用video中的html5poster属性poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7为最小的base64图片并且透明也可以选择黑色:data:image/gif;b......
  • 【逆向】使用x64dbg实现qq私聊与群消息防撤回
    微信防撤回的实现比qq还要简单一些,因为它的私聊和群聊的撤回用的是一个call。。。微信本体是32位,所以我们直接用x32dbg去附加微信的撤回函数我们不知道在哪,所以先扫一下所有模块。然后搜索revoke用小号先给我们的微信发个消息,然后加断点,小号再撤回,从而定位撤回函数位置。......
  • Linux作为rsync的服务端,Windows作为rsync的客户端
    服务端:centos7     172.16.106.199客户端:Windows10  172.16.106.143 服务端配置:创建服务器要同步数据的目录/tmp/rsyncmkdir/tmp/rsync设置权限为700chmod700 /tmp/rsync/ 编辑配置文件/etc/rsyncd.conf (修改该文件 除了修改监听端口跟ip需要重启,修......
  • Golang实现代理TCP客户端
    目标网站xxx.com,代理服务器xxxproxy.com,通过代理服务器实现流量转发。packagemainfunchandle(srcnet.Conn){dst,err:=net.Dial("tcp","xxx.com:80")iferr!=nil{log.Fatalln("Unabletoconnectoutunreachablehost")}deferd......