zoukankan      html  css  js  c++  java
  • QQ登陆代码

    HTML文件中放置QQ登陆按钮

     <a href="redirect.asp" target=_self  data-role="button" class="ui-btn-right" style="height:24px;line-height:24px;"><img src="Images/bt_blue.png" height="24" alt="QQ登录" border="0"></a> 
    

    Redirect.asp文件内容如下:

    <!--#include file="qqconnect.asp"-->
    <%
    Dim qc, url
        Session("Code")=""
        Session("Openid")=""
        Session("Access_Token")=""    
    SET qc = New QqConnet
        Session("State")=qc.MakeRandNum()
        url = qc.GetAuthorization_Code()
    	 
        Response.Redirect(url)
    Set qc=Nothing
    
    %>
    

    qqconnect.asp内容如下:

    <script language="jscript" runat="server">
    function getjson(str){
            try{
               eval("var jsonStr = (" + str + ")");
            }catch(ex){
               var jsonStr = null;
            }
            return jsonStr;
    }
    </script>
    <%
    '==================================
    '=类 名 称:QqConnet
    '=功    能:QQ登录 For ASP
    '=作    者:㊣FireFox㊣
    '=Q      Q: 63572063
    '=日    期:2012-01-02
    '==================================
    '转载时请保留以上内容!!
    Class QqConnet
        Private QQ_OAUTH_CONSUMER_KEY
        Private QQ_OAUTH_CONSUMER_SECRET
    	Private QQ_CALLBACK_URL
    	Private QQ_SCOPE
        Private oDic,aKeys,access_token,TimeLine,boundary
    
        '销毁对象
        Private Sub Class_Terminate()
    	    Set oDic = Nothing
        End Sub
        
        Private Sub Class_Initialize      
            QQ_OAUTH_CONSUMER_KEY = " "'APP ID
            QQ_OAUTH_CONSUMER_SECRET = " "'APP KEY
            QQ_CALLBACK_URL = " "'REDIRECT_URI
    	QQ_SCOPE ="get_user_info" '授权项 例如:QQ_SCOPE=get_user_info,list_album,upload_pic,do_like,add_t 
                                 '不传则默认请求对接口get_user_info进行授权。
                                  '建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。
    	TimeLine= DateDiff("s","01/01/1970 08:00:00",Now()) 'oauth_timestamp
    	boundary="------------------"&TimeLine
    	Set oDic = Server.CreateObject("Scripting.Dictionary")										
        End Sub
    	
        Property Get APP_ID()    
            APP_ID = QQ_OAUTH_CONSUMER_KEY    
        End Property
    
    	'生成Session("State")数据.
    	Public Function MakeRandNum()
    		Randomize
    		Dim width : width = 6 '随机数长度,默认6位
    		width = 10 ^ (width - 1)
    		MakeRandNum = Int((width*10 - width) * Rnd() + width)
    	End Function
    	
    	Private Function CheckXml()
            Dim oxml,Getxmlhttp
            On Error Resume Next
            oxml=array("Microsoft.XMLHTTP","Msxml2.ServerXMLHTTP.6.0","Msxml2.ServerXMLHTTP.5.0","Msxml2.ServerXMLHTTP.4.0","Msxml2.ServerXMLHTTP.3.0","Msxml2.ServerXMLHTTP","Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP")
            For i=0 to ubound(oxml)
               Set Getxmlhttp = Server.CreateObject(oxml(i))
               If Err Then
                  Err.Clear
                  CheckXml = False
               Else
                  CheckXml = oxml(i) :Exit Function
               End if
           Next
         End Function
    
    	
    	'Get方法请求url,获取请求内容
    	Private Function RequestUrl(url)
    		Set XmlObj = Server.CreateObject(CheckXml)
    		XmlObj.open "GET",url, false
    		XmlObj.send
    		If XmlObj.Readystate=4 Then
    	       RequestUrl = XmlObj.responseText
    	    Else
    	       Response.Write("xmlhttp请求超时!") 
    		   Response.End()
    	    End If
    		Set XmlObj = nothing
    	End Function
    	
    	'Post方法请求url,获取请求内容
    	Private Function RequestUrl_post(url,data)
    		Set XmlObj = Server.CreateObject(CheckXml())
    		XmlObj.open "POST", url, false
    		XmlObj.setrequestheader "POST"," /t/add_t HTTP/1.1"
    		XmlObj.setrequestheader "Host"," graph.qq.com "
    		XmlObj.setrequestheader "content-length ",len(data)  
            XmlObj.setRequestHeader "Content-Type "," application/x-www-form-urlencoded "
    		XmlObj.setrequestheader "Connection"," Keep-Alive"
            XmlObj.setrequestheader "Cache-Control"," no-cache"
            XmlObj.send(data)
    		If XmlObj.Readystate=4 Then
    	       RequestUrl_post = XmlObj.responseText
    	    Else
    	       Response.Write("xmlhttp请求超时!") 
    		   Response.End()
    	    End If
    		Set XmlObj = nothing
    	End Function
    	
    	
    	Private Function CheckData(data,str)
    		If Instr(data,str)>0 Then
    		   CheckData = True
    		Else
    		   CheckData = False
    		End If
    	End Function
    	
    
    	
    	'生成登录地址
    	Public Function GetAuthorization_Code()
    		Dim url, params
    		url = "https://graph.qq.com/oauth2.0/authorize"
    		params = "client_id=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&redirect_uri=" & QQ_CALLBACK_URL
    		params = params & "&response_type=code"
    		params = params & "&scope="&QQ_SCOPE
    		params = params & "&state="&Session("State")
    		url = url & "?" & params
    		GetAuthorization_Code = (url)
    	End Function
    	
    	
    	'获取 access_token
    	Public Function GetAccess_Token()
    		Dim url, params,Temp
    		Url="https://graph.qq.com/oauth2.0/token"
    	    params = "client_id=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&client_secret=" & QQ_OAUTH_CONSUMER_SECRET
    		params = params & "&redirect_uri=" & QQ_CALLBACK_URL
    		params = params & "&grant_type=authorization_code"
    		params = params & "&code="&Session("Code")
    		url = Url & "?" & params
    		Temp=RequestUrl(url)
    		
    		If CheckData(Temp,"access_token=") = True Then
               GetAccess_Token=CutStr(Temp,"access_token=","&")
    		Else
    		   Response.Write("获取 Access_Token 时发生错误,错误代码:"&CutStr(Temp,"{""error"":",",")) 
    		   Response.End()
    		End If
    		
    	End Function
    	
    	Sub setSession(str)
    	Dim ary1
    	ary1 = Split(Replace(str,"=","&"),"&")
    	If ubound(ary1) > 1 Then
    		Session("access_token") = ary1(1)
    		Session("expires_in") = ary1(3)
    		Session("refresh_token") = ary1(5)
    	End If
        End Sub
    
    	'检测是否合法登录!
    	Public Function CheckLogin()
    		Dim Code,mState
    		Code=Trim(Request.QueryString("code"))
    		If Code<>"" Then
    			CheckLogin = True
    			Session("Code")=Code
    		Else
    			CheckLogin = False
    		End If
    	End Function
    	
    	
    	'获取openid
    	Public Function Getopenid()
    		Dim url, params,Temp
    		url = "https://graph.qq.com/oauth2.0/me"
    		params = "access_token="&Session("Access_Token")
    		url = Url & "?" & params
    		Temp=RequestUrl(url)
    		If Instr(Temp,"openid")>0 Then
    		   set obj = getjson(CutStr(Temp,"(",")"))
    		   if isobject(obj) Then
    		       Getopenid=obj.openid
    		   End If
    		  set obj = Nothing
    		Else
    		   
    		   set obj = getjson(CutStr(Temp,"(",")"))
    		   if isobject(obj) Then
    		       ret = obj.error
    			   msg = obj.error_description
    		   End If
    		  set obj = Nothing
    		    Response.Write("获取 openid 时发生错误,错误代码:"&ret&" , 错误描述:"&msg) 
    		   Response.End()
    		End If
    	End Function
    	
    	'发送一条微博
    	Public Function Post_Webo(content)
    		Dim url, params
    		url = "https://graph.qq.com/t/add_t"
    		params = "oauth_consumer_key=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&access_token=" & Session("Access_Token")
    		params = params & "&openid=" & Session("Openid")
    		params = params & "&content="&content
            params = params & "&format=json"
    		Post_Webo = RequestUrl_post(url,params)
    	End Function
    	'发送一条说说
    	Public Function Post_add_topic(content)
    		Dim url, params
    		url = "https://graph.qq.com/shuoshuo/add_topic"
    		params = "oauth_consumer_key=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&access_token=" & Session("Access_Token")
    		params = params & "&openid=" & Session("Openid")
    		params = params & "&con="&content
            params = params & "&format=json"
    		Post_add_topic = RequestUrl_post(url,params)
    	End Function
    	
    	'分享内容到QQ空间
    	Public Function Post_Share(title,turl,comment,summary,images)
    		Dim url, params
    		url = "https://graph.qq.com/share/add_share"
    		params = "oauth_consumer_key=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&access_token=" & Session("Access_Token")
    		params = params & "&openid=" & Session("Openid")
    		params = params & "&title="&title
    		params = params & "&url="&turl
    		params = params & "&title="&title
    		params = params & "&comment="&comment
    		params = params & "&summary="&summary
    		params = params & "&images="&images
    		params = params & "&format=json"
    		Post_Share = RequestUrl_post(url,params)
    	End Function
    	
    	'获取用户信息,得到一个json格式的字符串
    	Public Function GetUserInfo()
    		Dim url, params, result
    		url = "https://graph.qq.com/user/get_user_info"
    		params = "oauth_consumer_key=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&access_token=" & Session("Access_Token")
    		params = params & "&openid=" & Session("Openid")
    		url = url & "?" & params
    		Temp = RequestUrl(url)
    		If CheckData(Temp,"nickname") = False Then
    		    set obj = getjson(Temp)
    		   if isobject(obj) Then
    		       ret = obj.ret
    			   msg = obj.msg
    		   End If
    		  set obj = Nothing
    		   Response.Write("获取用户信息时发生错误,错误代码:"&ret&" , 错误描述:"&msg) 
    		   Response.End()
    		End If
    		GetUserInfo = Temp
    	End Function
    	
    	'获取腾讯微博登录用户的用户资料,得到一个json格式的字符串
    	Public Function Get_Info()
    		Dim url, params, result
    		url = "https://graph.qq.com/user/get_info"
    		params = "oauth_consumer_key=" & QQ_OAUTH_CONSUMER_KEY
    		params = params & "&access_token=" & Session("Access_Token")
    		params = params & "&openid=" & Session("Openid")
    		params = params & "&format=json"
    		url = url & "?" & params
    		Get_Info = RequestUrl(url)
    	End Function
    
    	
    	'获取用户名字,性别,从json字符串里截取相关字符
    	Public Function GetUserName(json)
    	    Dim nickname,sex,obj
    		set obj = getjson(json)
    		   if isobject(obj) Then
    		       nickname = obj.nickname
    			   sex = obj.gender
    		   End If
    		  set obj = Nothing
    	    GetUserName = Array(nickname,sex)
    	End Function
    	
    	'获取用户头像
    	Public Function GetUserPhoto(json)
    	    Dim userphoto,obj
    		set obj = getjson(json)
    		   if isobject(obj) Then
    		       userphoto = obj.figureurl_qq_1
    			    
    		   End If
    		  set obj = Nothing
    	    GetUserPhoto = userphoto
    	End Function
    	
    	Public Function CutStr(data,s_str,e_str)
    	    If Instr(data,s_str)>0 and Instr(data,e_str)>0 Then
    		   CutStr = Split(data,s_str)(1)
    		   CutStr = Split(CutStr,e_str)(0)
    		Else
    		   CutStr = ""
    		End If
    	End Function
    	
    	'发送数据
        Function doRequest(verb, resLoc, getData, objData, multi)
    	Dim aUrl,xmlhttp
    	If(getData <>"") then getData = "?"&getData
    	aUrl = resLoc & getData
    	Response.write aUrl & "<br>"
    	Set xmlhttp=Server.CreateObject("MSXML2.ServerXMLHTTP")
    	xmlhttp.Open verb,aUrl,false	
    	If(verb = "POST") Then
    		If(multi) Then '如果是图片
    			xmlhttp.setRequestHeader "Content-Type","multipart/form-data; boundary="&boundary
    			'图片上传处理
    		Else
    			xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
    		End  If 
    	End  If	
    	xmlhttp.send(objData)		
    	doRequest=xmlhttp.responseText
    	'Response.Write("测试信息,可注释: " & Replace(Replace(doRequest,"<","<"),">",">") & "<br><br>一个在线格式化JSON数据的工具:http://jsonformatter.curiousconcept.com/<br><br>")
    	Set xmlhttp=Nothing
        End Function
    	
    	Function Sorts()
    	   Dim i,arr(),aKeys,aItems
    	   ReDim arr(oDic.Count-1)
    	   aKeys = oDic.Keys
    	   aItems = oDic.Items
    	   For i=0 To oDic.Count-1
    	   arr(i)=aKeys(i)&"="&strUrlEnCode(oDic.Item(aKeys(i)))
    	   Next
    	   Sorts=join(arr,"&")
        End Function
    
        'URL Encode,并将不需要转换的再替换回来
        Function strUrlEnCode(byVal strUrl)
       	  strUrlEnCode = Server.URLEncode(strUrl)
    	  strUrlEnCode = Replace(strUrlEnCode,"%5F","_")
    	  strUrlEnCode = Replace(strUrlEnCode,"%2E",".")
    	  strUrlEnCode = Replace(strUrlEnCode,"%2D","-")
    	  strUrlEnCode = Replace(strUrlEnCode,"+","%20")
        End Function
    
    End Class
    %>
    

     点击登陆后会在返回文件中附加Code=XXXX&State=XXXX内容,将此内容继续进行处理,可获得QQ图片,名字等信息。

    If Len(Code)>0 then  '登陆成功
    
                  SET qc = New QqConnet
     
    	     Session("Access_Token")=qc.GetAccess_Token()
    
    	     Session("Openid")=qc.Getopenid()
                  
    	     UserInfo=qc.GetUserInfo()
    			   
                 UserName=qc.GetUserName(UserInfo)(0)
    
    	     UserPhoto=qc.GetUserPhoto(UserInfo)
    
    End if
    

      

     

  • 相关阅读:
    Java实现KMP算法
    字符串匹配的KMP算法
    Apache与Tomcat 区别和联系
    二叉树中两个节点的最近公共父节点
    Git使用详细教程
    动画讲解 Eclipse 常用快捷键
    Android系统SD卡各类文件夹名称
    Chrome 控制台不完全指南
    JavaScript入门学习书籍的阶段选择
    从入门到放弃的第二周(面向对象)......day.6.。。。。。对象,类,方法;
  • 原文地址:https://www.cnblogs.com/billybobby/p/6336944.html
Copyright © 2011-2022 走看看