请教,如何长期在QQ租号登陆器器上保留QQ号...

如何在自己的网站上实现QQ授权登录?
最近在实现QQ授权登录,现将我的实现过程以及我的理解整理如下。以下所述如有不对之处,请指正。
官方提供的SDK有:JS,PHP,Java。我的网站使用Scala+Play搭建的,所以只能用JS SDk。
AppID:你的应用(网站)的ID。
AppKey:对你的应用的验证。
Redirect_uri:用户确认授权后的回调地址。(需自己设置,有防止别人盗用你的身份获取授权用户信息的作用)
OpenID:用户身份的唯一标识。建议保存在本地并与本地创建的uid绑定,以便用户下次登录时可对应到其之前的身份信息,不需要重新授权,使用户体验一致。(获取不到用户的QQ号)
AccessToken:表示当前用户在此网站/应用的登录状态与授权信息,建议保存在本地。(相当于token,令牌)
Scope:你要获取的信息。
注册QQ互联开发者身份
需要去腾讯QQ互联注册:/。
准备好网站
网站要基本开发完成。网站域名,Logo等都有。
在QQ互联管理中心创建应用。
上面的信息,创建好了之后随时可以更改。
上图中的网站地址后面的验证,我选择的是在自己网站首页HTML代码的HEAD标签中添加:
&meta property="qc:admins" content="你的验证信息" /&
回调地址可以自己设置一个。我网站首页是http://xjpz.me,因此设置的是http://xjpz.me/blog/test/qcback。
其他的按需填写。
创建了应用可获得AppID与AppKey。
3.部署测试
添加登录入口
引入JS SDK文件:
在登录页面&head&&/head&中引入:
&script type="text/javascript" src="/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8"&&/script&
将APPID换成你自己的APPID,REDIRECTURI换成你自己设置的回调地址。
放置QQ图标(下面有素材地址),设置图标超链接地址:
&a href="http://openapi./oauth/show?which=ConfirmPage&display=pc&response_type=token&client_id=xxxxxxx&redirect_uri=&scope=get_user_info"&
&img src="/assets/images/Connect_logo_1.png" alt="QQ授权登录 QQ授权登录开发 QQ授权登录管理"&
将client_id换成你的AppID,redirect_uri换成你的回调地址。 如果你要获取其他信息或者调用其它接口,请将scope改成你需要的API名或者直接改成 all 。(API列表可查看http://wiki./api%E5%88%97%E8%A1%A8)。
我的登录入口样例:
官方资料:
官方提供的登录按钮代码,可直接将代码贴到你想要放置入口的位置就行:
&span id="qqLoginBtn"&&/span&
&script type="text/javascript"&
QC.Login({
btnId:"qqLoginBtn"
//插入按钮的节点id
设置回调页面
同样需要引入JS SDK文件,参照上面。
用JS SDK协助调用OpenAPI的get_user_info方法,获取用户头像、用户名等基础信息。
我的回调页面代码如下:
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title& QQConnect JSDK - redirectURI &/title&
&script src="/assets/javascripts/jquery.min.js"&&/script&
&script type="text/javascript" src="/qzone/openapi/qc_loader.js" data-appid="xxxxxxx" data-redirecturi="/xxxxx" charset="utf-8"&&/script&
&style type="text/css"&
html, body{font-size:14 line-height:180%;}
&body onload="getInfo()"&
&h3&数据传输中,请稍后...&/h3&
&script type="text/javascript"&
function getInfo() {
if(QC.Login.check()){
QC.api("get_user_info")
.success(function(s){//成功回调
QC.Login.getMe(function(openId, accessToken){
$.post('/你的后台处理Action',{name:s.data.nickname,openid:openId,otype:1,token:accessToken},function(data,status){
if(status=="success"){
alert(s.data.nickname+"恭喜你,登录成功!");
location.href = "/";
alert("获取用户信息成功!登录失败!");
location.href = "/blog/to/login";
.error(function(f){//失败回调
alert("获取用户信息失败!登录失败!");
location.href = "/blog/to/login";
.complete(function(c){//完成请求回调
//alert("获取用户信息完成!");
alert("请登录!");
location.href = "/blog/to/login";
本网页浏览已超过3分钟,点击关闭或灰色背景,即可回到网页Java(17)
Android(2)
package com.
import java.io.BufferedR
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import java.io.InputStreamR
import java.nio.B
import android.nfc.T
import android.os.B
import android.app.A
import android.text.TextU
import android.util.L
import android.view.M
import android.view.V
import android.widget.CheckB
import android.widget.EditT
import android.widget.T
public class MainActivity extends Activity {
private EditText et_
//qq。pwd,cb的id
private EditText et_//
private CheckB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_qq=(EditText) findViewById(R.id.et_qq);
et_pwd=(EditText) findViewById(R.id.et_pwd);
cb=(CheckBox) findViewById(R.id.cb);
readSaveData();
//完成数据回显
private void readSaveData() {
File file=new File(&/data/data/com.wyqhsj/info.txt&);
//new出来文件
if(file.exists()&&file.length()&0)
//判断文件是否存在,有没有数据
FileInputStream fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));//读文件,需要reader对象
String info=br.readLine();
//读取第一行
String qq=info.split(&###&)[0];
//split拿到的是数组,第0个元素是qq,第一个密码,以###分隔
String pwd=info.split(&###&)[1];
et_qq.setText(qq);
//设置qq和密码
et_pwd.setText(pwd);
fis.close();
catch (IOException e) {
// 代码会有异常,需要try catch
e.printStackTrace();
public void login(View view)
String qq=et_qq.getText().toString().trim();
//获取qq,密码文本转换字符串,trim去除空格
String pwd=et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd))
//判断QQ,密码是否为空
Toast.makeText(this, &qq或者密码不能为空&,0 ).show();
//弹出对话框
//判断是否勾选记住密码
if (cb.isChecked())
File file=new File(&/data/data/com.wyqhsj/info.txt&);//File file=new File(&文件名&);
FileOutputStream fos=new FileOutputStream(file); //new文件输出流
fos.write((qq+&###&+pwd).getBytes());
//写入###分隔,接受的是Bytes数组
fos.close(); //关闭输出流
Toast.makeText(this, &保存成功&, 0).show();
catch (IOException e) {
// 代码异常,try-catch
e.printStackTrace();
Toast.makeText(this, &保存失败&, 0).show();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11173次
排名:千里之外
原创:23篇
(1)(2)(2)(7)(12)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

参考资料

 

随机推荐