在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#网络编程 → 用QQ登陆网站 示例类库源码(QConnectSDK)

用QQ登陆网站 示例类库源码(QConnectSDK)

C#网络编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.26M
  • 下载次数:16
  • 浏览次数:373
  • 发布时间:2018-03-03
  • 实例类别:C#网络编程
  • 发 布 人:孔立业
  • 文件格式:.rar
  • 所需积分:2
 相关标签: QQ 登陆

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QConnectSDK.Context;
using QConnectSDK.Config;
using QConnectSDK.Models;
using QConnectSDK.Exceptions;
using QConnectSDK.Authenticators;
using RestSharp.Deserializers;
using System.Net;
using RestSharp;

namespace QConnectSDK.Api
{
    
    public partial class RestApi
    {
        /// <summary>
        /// 通过Authorization Code获取Access Token
        /// </summary>
        /// <param name="oAuthVericode"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public OAuthToken GetAccessToken(string oAuthVericode, string state)
        {
            var request = _requestHelper.CreateTokenRequest(context.Config, oAuthVericode, state);
            var response = Execute(request);
            var accessToken = GetUserAccessToken(response.Content);
            var openid = GetOpenId(accessToken.AccessToken);
            accessToken.OpenId = openid;
            return accessToken;

        }

        private string GetOpenId(string accessToken)
        {
            var request = _requestHelper.CreateOpenIDRequest(accessToken);
            var response = Execute(request);
            var openid = GetUserOpenId(response.Content);
            return openid;
        }

        private string GetUserOpenId(string content)
        {
            string strJson = content.Replace("callback(", "").Replace(");", "");
            var payload = Deserialize<Callback>(strJson);
            return payload.openid;
        }

        private OAuthToken GetUserAccessToken(string urlParams)
        {
            OAuthToken token = new OAuthToken(); 
            var parameters = urlParams.Split('&');
            foreach (var parameter in parameters)
            {
                var accessTokens = parameter.Split('=');
                if (accessTokens[0] == "access_token")
                {
                    token.AccessToken = accessTokens[1];
                     
                }
                if (accessTokens[0] == "expires_in")
                {
                    token.ExpiresAt = Convert.ToInt32(accessTokens[1]);
                    
                }
            }
            return token;
        }

        /// <summary>
        /// 获取当前的登陆用户信息
        /// </summary>
        /// <returns>当前登陆用户信息</returns>
        public User GetCurrentUser()
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            
            var request = _requestHelper.CreateAccountInfoRequest();

            var response = Execute(request);
            string content = response.Content;
            var payload = Deserialize<User>(content);
            return payload;
        }

        /// <summary>
        /// 第三方网站可以调用本分享接口,在用户授权的情况下,可以以用户的名义发布一条动态(feeds)到QQ空间和朋友网上,
        /// 此外还可在腾讯微博上发一条微博(用户可自己选择是否转发到微博)。
        /// 1. 网站主动推送。当用户在网站上进行操作(例如上传视频,图片,发表评论等)后,以该用户的名义发布一条feeds到QQ空间中。 
        /// 2. 用户主动分享。用户在网站上点击“分享”按钮,发布一条feeds到QQ空间中,分享某个视频,网页或者其它内容。 例如:某用户在某个第三方网站上对某条新闻发表了评论,网站将以该用户的名义发表一条动态到QQ空间中,动态的具体展示如下: 
        /// 上图中的1-6标注对feeds的组成以及规格进行了说明: 
        /// 1. 用户评论:用户在第三方网站发布的评论等UGC信息,选填项。
        /// 2. 分享的内容标题,含源网页URL,点击跳转至第三方网站网页,必填项。
        /// 3. 详细描述:网页摘要,选填项。
        /// 4. 外部图片:引用外部图片(大小不超过100 x 100 px),选填项。
        /// 5. 分享的场景:支持以下场景 1.通过网页 2.通过手机 3.通过软件 4.通过IPHONE 5.通过IPAD,选填项。
        /// 6:来源网站名称及域名:标明分享的来源,必填项。
        /// </summary>
        /// <param name="title">feeds的标题,对应上文接口说明中的2。最长36个中文字,超出部分会被截断。</param>
        /// <param name="url">分享所在网页资源的链接,点击后跳转至第三方网页,对应上文接口说明中2的超链接。请以http://开头。 </param>
        /// <param name="comment">用户评论内容,也叫发表分享时的分享理由,对应上文接口说明的1。禁止使用系统生产的语句进行代替。最长40个中文字,超出部分会被截断。</param>
        /// <param name="summary">所分享的网页资源的摘要内容,或者是网页的概要描述,对应上文接口说明的3。最长80个中文字,超出部分会被截断。</param>
        /// <param name="images">所分享的网页资源的代表性图片链接",对应上文接口说明的4。
        /// 请以http://开头,长度限制255字符。多张图片以竖线(|)分隔,目前只有第一张图片有效,图片规格100*100为佳。</param>
        /// <param name="source">分享的场景,对应上文接口说明的6。取值说明:1.通过网页 2.通过手机 3.通过软件 4.通过IPHONE 5.通过 IPAD。 </param>
        /// <param name="type">分享内容的类型。4表示网页;5表示视频(type=5时,必须传入playurl)。 </param>
        /// <param name="playurl">长度限制为256字节。仅在type=5的时候有效。</param>
        /// <param name="nswb">值为1时,表示分享不默认同步到微博,其他值或者不传此参数表示默认同步到微博</param>
        /// <returns>是否成功</returns>
        public QzoneBase AddFeeds(string title, string url, string comment = "", string summary = "", string images = "", string source = "", string type = "", string playurl = "", string nswb = "")
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateAddFeedsRequest(title, url,comment,summary,images,source,type,playurl,nswb);

            var response = Execute(request);
            var payload = Deserialize<QzoneBase>(response.Content);
            return payload;
        }

        /// <summary>
        /// 验证登录的用户是否为某个认证空间的粉丝
        /// </summary>
        /// <param name="qq">认证空间的qq号</param>
        /// <returns></returns>
        public CheckPageResult CheckPagefans(string qq)
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateCheckPagefansRequest(qq);

            var response = Execute(request);
            string content = response.Content;
            var payload = Deserialize<CheckPageResult>(content);
            return payload;
        }

        /// <summary>
        /// 获取登录用户的相册列表。
        /// </summary>
        /// <returns></returns>
        public UserAlbums GetCurrentUserListAlbum()
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateGetUserListAlbumRequest();

            var response = Execute(request);
            string content = response.Content;
            var payload = Deserialize<UserAlbums>(content);
            return payload;
        }

        /// <summary>
        /// 登录用户创建相册
        /// </summary>
        /// <param name="albumname">相册名,不能超过30个字符。</param>
        /// <param name="albumdesc">相册描述,不能超过200个字符。</param>
        /// <param name="priv">相册权限,其取值含义为: 1=公开;3=只主人可见; 4=QQ好友可见; 5=问答加密。
        /// 不传则相册默认为公开权限。
        /// 如果priv取值为5,即相册是问答加密的,则必须包含问题和答案两个参数:
        /// -question: 问题,不能超过30个字符。
        /// -answer: 答案,不能超过30个字符。</param>
        /// <param name="question">问题,不能超过30个字符</param>
        /// <param name="answer">答案,不能超过30个字符。</param>
        /// <returns></returns>
        public Album AddAlbum(string albumname, string albumdesc = "", int priv = 1, string question = "", string answer = "")
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateAddAlbumRequest(albumname, albumdesc, priv, question, answer);

            var response = Execute(request);
            string content = response.Content;
            var payload = Deserialize<Album>(content);
            return payload;
        }

        /// <summary>
        /// 登录用户上传照片。
        /// </summary>
        /// <param name="photodesc">照片描述,注意照片描述不能超过200个字符。</param>
        /// <param name="title">照片的命名,必须以.jpg, .gif, .png, .jpeg, .bmp此类后缀结尾。</param>
        /// <param name="albumid">相册id,不填则传到默认相册</param>
        /// <param name="x">照片拍摄时的地理位置的经度。请使用原始数据(纯经纬度,0-360)。</param>
        /// <param name="y">照片拍摄时的地理位置的纬度。请使用原始数据(纯经纬度,0-360)。</param>
        /// <param name="picture">上传照片的文件名</param>
        /// <param name="pictureData">上传照片的内容</param>
        /// <returns></returns>
        public Picture UploadPic(string photodesc, string title, string albumid, int? x, int? y, string picture, byte[] pictureData)
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateUploadPicRequest(photodesc, title, albumid, x, y, picture, pictureData);

            var response = Execute(request);
            string content = response.Content;
            var payload = Deserialize<Picture>(content);
            return payload;
 
        }

        /// <summary>
        /// 登录用户发表一篇新日志
        /// </summary>
        /// <param name="title">日志标题(纯文本,最大长度128个字节,utf-8编码)</param>
        /// <param name="content">文章内容(html数据,最大长度100*1024个字节,utf-8编码).</param>
        /// <returns></returns>
        public AddBlogResult AddBlog(string title, string content)
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateAddBlogRequest(title, content);

            var response = Execute(request);
            string strContent = response.Content;
            var payload = Deserialize<AddBlogResult>(strContent);
            return payload;            
        }

        /// <summary>
        /// 登录用户发布心情,发布以后,将在QQ空间的说说下添加一条动态,以分享给好友。
        /// 用户发布心情时,可以是纯文本,也可以带超链接,视频,或者图片的富文本。
        /// 本接口支持LBS信息,即用户动态中可以包含位置信息,例如经纬度,地点名称及描述。 
        /// </summary>
        /// <param name="richtype">
        /// 发布心情时引用的信息的类型。
        /// 1表示图片; 2表示网页; 3表示视频。
        /// </param>
        /// <param name="richval">发布心情时引用的信息的值。有richtype时必须有richval 
        /// (1)当richtype为图片(即richtype为1,应用场景为针对QQ空间相册中的某张图片发表评论)时,richval需包含下列参数的值,每个值中间用逗号分隔,如下所示 :
        /// “albumid,pictureid,sloc,pictype,picheight,picwidth”。
        /// 这些值都需要通过调用相册OpenAPI来获得。参数意义如下:
        /// 参数名称  是否必须  类型  描述  
        /// albumid  必须  string  图片所属空间相册的ID
        /// pictureid  必须  string  图片ID  
        /// sloc  必须  string  小图ID
        /// pictype   string  图片类型(JPG = 1;GIF = 2;PNG = 3)
        /// picheight   string  图片高度,单位: px  
        /// picwidth   string  图片宽度,单位: px
        /// (2)当richtype为网页(即richtype为2,应用场景为针对某网页发表评论)时,richval需要传入该网页的URL,发表为feeds时,后台会自动将该URL转换为短URL。
        /// (3)当richtype为视频(即richtype为3,应用场景为针对某视频发表评论)时,richval需要传入该视频的URL,发表为feeds时,后台会对该URL进行解析,在feeds上显示播放器,视频源及缩略图。
        /// </param>
        /// <param name="con">发布的心情的内容。</param>
        /// <param name="lbs_nm">地址文。例如:广东省深圳市南山区高新科技园腾讯大厦。lbs_nm,lbs_x,lbs_y通常一起使用,来明确标识一个地址。 </param>
        /// <param name="lbs_x">经度。请使用原始数据(纯经纬度,0-360)。</param>
        /// <param name="lbs_y">纬度。请使用原始数据(纯经纬度,0-360)。</param>
        /// <param name="third_source">第三方应用的平台类型。1表示QQ空间; 2表示腾讯朋友; 3表示腾讯微博平台; 4表示腾讯Q 平台。 </param>
        /// <returns></returns>
        public QzoneBase AddTopic(string richtype, string richval, string con, string lbs_nm, string lbs_x, string lbs_y, string third_source)
        {
            _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey());
            var request = _requestHelper.CreateAddTopicRequest(richtype, richval, con, lbs_nm, lbs_x, lbs_y, third_source);

            var response = Execute(request);
            string strContent = response.Content;
            var payload = Deserialize<QzoneBase>(strContent);
            return payload;            
        }

    }
}

标签: QQ 登陆

实例下载地址

用QQ登陆网站 示例类库源码(QConnectSDK)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警