怎样编写QQ怎样登陆qq不用验证码?

中国领先的IT技术网站
51CTO旗下网站
如何在自己的网站上实现QQ授权登录
最近在实现QQ授权登录,现将我的实现过程以及我的理解整理如下。以下所述如有不对之处,请指正。
作者:来源:博客园| 14:53
最近在实现QQ授权登录,现将我的实现过程以及我的理解整理如下。以下所述如有不对之处,请指正。
官方提供的SDK有:JS,PHP,Java。我的网站使用Scala+Play搭建的,所以只能用JS SDk。
AppID:你的应用(网站)的ID。
AppKey:对你的应用的验证。
Redirect_uri:用户确认授权后的回调地址。(需自己设置,有防止别人盗用你的身份获取授权用户信息的作用)
OpenID:用户身份的唯一标识。建议保存在本地并与本地创建的uid绑定,以便用户下次登录时可对应到其之前的身份信息,不需要重新授权,使用户体验一致。(获取不到用户的QQ号)
AccessToken:表示当前用户在此网站/应用的登录状态与授权信息,建议保存在本地。(相当于token,令牌)
Scope:你要获取的信息。
注册QQ互联开发者身份
准备好网站
网站要基本开发完成。网站域名,Logo等都有。
在创建应用。
上面的信息,创建好了之后随时可以更改。
上图中的网站地址后面的&验证&,我选择的是在自己网站首页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&&&/a&
将client_id换成你的AppID,redirect_uri换成你的回调地址。
如果你要获取其他信息或者调用其它接口,请将scope改成你需要的API名或者直接改成 all 。(附)。
我的登录入口样例:
官方资料:
官方提供的登录按钮代码,可直接将代码贴到你想要放置入口的位置就行:
&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&;
- 引入的`JS SDK`文件中的`data-appid` 和 `data-redirecturi` 同样需要改为你的AppID 和回调地址。
- 授权成功后`Openid`和`token`会缓存在本地。可通过`QC.Login.getMe(function(openId, accessToken){}` 获取。
- 回调成功后,我这里把用户名和openid提交给服务器,保存在本地,使用户体验一致。即`$.post(){}`方法,你需要换成你服务端的Action。
- 服务器处理成功后重定向到网站首页。授权登录结束。
为了方便用户,用户授权成功后,我并没有再继续让用户输入邮箱、密码等。如果再让用户输入一遍,那和直接注册有什么区别?那样授权登录基本就失去了意义。
顺便贴一下我后台处理步骤:
- //判断openid是否存在。
- // 如果openid存在,则说明此用户之前登录过或者已与本地user表中的用户绑定。写入cookie,使用户为登录状态,到此结束。
- //如果用户openid不存在,则判断用户名是否存在。
- //如果用户名不存在,则直接生成新的本地用户,并绑定uid与openid。写入cookie,使用户为登录状态,到此结束。
- //如果用户名存在,提醒用户是否验证并与之绑定。如果用户选择验证,并验证通过,则与之绑定。写入cookie,使用户为登录状态,到此结束。
- //如果用户放弃验证,或者验证失败,则生成新的本地用户,并生成新的用户名,绑定uid与openid。写入cookie,使用户为登录状态,到此结束。
以上完成,自己测试通过,就可以提交腾讯审核。没有审核通过之前只能设置几个账号测试,其他账号无法授权登录。
提交时需注意,
在显要位置放置登录入口。至少在你网站登录页面要放置。我第一次提交时专门做了一个授权登录入口并在应用信息设置里填写了。结果腾讯以&未放置登录入口或放置不规范&为由拒绝。
网站要基本开发完成。我第二次提交,因有未实现的页面,被腾讯以&网站不完善&为由拒绝。然后我把未实现页面入口撤下,审核通过。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条头条头条外电
24H热文一周话题本月最赞
讲师:1人学习过
讲师:28人学习过
讲师:0人学习过
精选博文论坛热帖下载排行
本书以Linux Redhat 9.0中文版为基础编写,从易用性和实用性角度出发主要介绍Linux Redhat 9.0中文版的应用知识,通过本书的学习,相信初中...
订阅51CTO邮刊&|&已有泡学帐号?
后使用快捷导航没有帐号?
专研追女生的学问
【QQ验证信息该怎么写才能打动她??】
聊天、撩妹、约会、挽回 添加微信号
立即获取免费情感咨询
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 goodykz 于
06:26 编辑
本人情况:(男)
【职业】:事业单位  【年龄】:24  【教育程度】:本科
【年收入】:2000×12  【婚姻状态】:未婚
【体态】:身高:175 公分;体重: 138斤;  【容貌】:8.0
——————————————————————————————————————
对方情况:(女)
【职业】:教师  【年龄】:22  【教育程度】:本科
【年收入】:未知  【婚姻状态】:未婚
【体态】:身高:165 公分;体重: 斤;  【容貌】:8.5
——————————————————————————————————————
【两地相距】:同城
【相识途径】:从朋友那里拿到了她的QQ号码。
【亲密程度】:其他
【交往目的】:对方是自己喜欢的类型。
【事例介绍】:
我和她是初中同学,那时就对她有点好感,但那感觉是很单纯,纯纯的爱,由于学习的原因也就没跟她表白。上了高中就分到不同学校,还有GK的压力,更加没有机会表白,只能把那份喜欢藏在心里。上了大学,原以为会忘记,但在大四那时一次偶然的机会中我在我朋友的同学的朋友(关系不是很直接)QQ相册中我见到了她,发现对她那份感觉还是没变过,而且更加强烈。于是动用朋友关系一定到要拿到她的联系方式,手机号码,QQ,Email那行。但是关系很太直接,找起来很困难。QQ相册那个也只是她同系的人,不怎么认识,后来费了很大功夫才只拿到了她Emali.也发了几封邮件给她,跟她说明我是她初中的同学。她也半信半疑相信了,可能我对她来说根本一点印象都没了。再后来借一些话题节日发一些祝福给她。她都很礼貌地回了“呵呵; 谢谢”简单的几个字,对我来说已经很满足了。但email每次都要等很久,于是我认为是时候跟她要个QQ,可能是我那几封意图太明显,一提到要QQ,她就没有回。眼看毕业找工作了,这事也就搁下了。今年开始工作,觉得自已还是不能放弃。在朋友的朋友那里得知她也回我们市里找到一份教师工作,(在朋友那得知她应该还没男朋友)觉得自已机会更大,都是同城的。也很幸运得到她的QQ号。 但可能经过上次动机太明显,加了几次,她就是不通过。
& && &我恨我自已太急了,Email表白意图太明显,她可能有戒心了。/&&以上可能描述得有些啰嗦,但我只说得清楚点。请各位能告诉我个好的办法,我该怎么通过QQ成为她的好友。我的验证信该写什么才能打动她?让她通过。。 谢谢//
& & & & & & & & & & & & & & & &
width:100%">
多年以后,一如从前
width:100%">
楼主是有点太急了,意图过于明显了,我觉得你应该跟她在现实中接触一下,比如实际去找她,但装做是偶遇,这女孩可以看得出是那种不会轻易博人面子的人,我以前也遇到过那种女孩,在网上会冷你,但在现实中处于不好意思会留联系方式给你,不过这样的女孩泡到手的感觉不大,我个人感觉哦,希望有什么好办法请高手帮你解答
width:100%">
我想发验证信息:&能给个认识的机会,可以吗?&
不知道这样可以不。?
width:100%">
如果喜欢弄空间那个女孩子的话。你经常去她空间留言什么的。。自然会熟,不弄空间的话。你就现实直接找她。比如装做偶遇。在街上或者在餐馆。。
width:100%">
谢谢楼上几位。的指点,她的空间锁了问题设置的,我现在主要是想让她通过我加她的验证信心。
width:100%">
你既然来这里了,就不要想着怎么打动人家了,应该想着怎么吸引人家才对!
width:100%">
楼主已经被归类为平庸男或者有点熟悉的陌生人。
按你目前的实力是无力回天,加了QQ又能怎样?
都是你初中同学了,加个QQ都这么难,接下去可想而知。
不如另选目标。
width:100%">
可以找你朋友帮忙,借朋友喊她出来玩,可能以前不熟吧,趁这个机会增加了解,通过惯例、打压吸引她
width:100%">
版主退休后获取的勋章
关注泡学网
更多恋爱技巧咨询精华爆文准时推送每天提升多一点
12345678910
Copyright &
版权所有 All Rights Reserved.后使用快捷导航没有帐号?
只需一步,快速开始
只需一步,快速开始
QQ申诉如何跳过好友验证步骤 无需验证即可申诉成功
02:04|来自: 腾讯爱好者|
|查看: 35149
& 很多网友可能会抱怨,现在经常随便点一个网站,也没有做什么,就发现自己的QQ莫名其妙就不是自己了。更讨厌的是,还会发布一些乱七八糟的消息,想要拿回QQ的使用权,还得经过了一个非常繁琐得申诉程序。其实,也可以跳过好友验证步骤,省时又省力。
& 每次申诉,都得挨个的找朋友验证,着实麻烦。免除好友验证的申诉技能get,帮助你以便不时之需。下面是教材的详解:
& 首先你要打开QQ安全中心的页面,具体网址是:。开始申诉的时候,在选择申诉QQ的时候,请选择英文的版本。不用担心自己看不懂,你只要跟着流程继续进行下去就可以。而这种不需好友的验证方法,利用的就是英文版本的BUG。& 在进入申诉之后,在两个选项当中,你要选择retrieve password,才可以继续申诉的流程。接下来就可以输入你想要的号码了,填写你的QQ名字以及你可以用来接收验证码的邮箱。& 进入到邮箱,查看验证码之后,将验证码填写到以下的界面。& &填写你曾经使用的密码以及QQ常用的登陆地址,可以在IP属性里面看到。
& &最后需要知道,你第一次注册账号的大致时间和地址。& 按照这个流程,一步一步的进行,就可以跳过好友验证的步骤。在审核之后,你的QQ就可以再次回到你的手中。
大家还关注
|||||||||||||怎么强制加qq好友?不需要通过验证_QQ专题
→ 怎么强制加qq好友?不需要通过验证
怎么强制加qq好友?不需要通过验证
QQ上有的朋友为了不让别人随便地加他,必须了解他才行,设置了QQ好友验证问题,如果你答不上来,就加不了他了,是不是有的时候你很想加某个MM啊~~~&&&&&其实非常简单,你就能绕过验证问题,不回答问题就能加他为好友。怎么做呢?首先登陆你的QQ,看到你右下角的那个小图标了没?右击它,会弹出一个菜单,点击“使用TM”&&&&&&然后稍等一会儿,你就是以TM登陆QQ了。TM也是腾讯的产品,和QQ捆绑在一起,不过我们不常用罢了。如果你没有安装TM,那是因为你用的不是QQ的原版,比如珊瑚虫,飘云之类的,QQ会提示你安装的,放心。&&&&&装好了之后,运行。TM的界面和QQ差不多,你在TM里面查找好友再加就好了,没有好友验证问题噢!!直接就加进来了。。
本文引用网址:
在下列搜索引擎中搜索“怎么强制加qq好友?不需要通过验证”的相关信息:
你可能还喜欢以下文章
?上一篇QQ:
?下一篇QQ:Java生成图片验证码(有点仿QQ验证码的意思) - 博客频道 - CSDN.NET
做一只安静的程序猿
分类:JAVA
看了挺多图片验证码的代码,感觉没什么长的好看点的,就自己动手写了个,写完发现跟QQ的有几分相似,比较满意。
功能包括:自定义图片尺寸和字符长度,随机背景颜色和字符颜色,随机字符偏移角度,字符平滑边缘,干扰线,噪点,背景扭曲。
本来想做字符扭曲的,不知道怎的先生成文字再扭曲就报错了,先就这样吧,希望有高手能帮助修正一下。
需要说明的是之所以有几分像QQ的验证码感觉是因为这个Algerian字体,如果系统没有的话需要自行安装,百度搜字体名能下载到,丢系统Fonts文件夹就行。
JAVA文件和字体打了个包发资源里了,。
AuthImage类:
import java.io.IOE
import javax.servlet.ServletE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
public class AuthImage extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader(&Pragma&, &No-cache&);
response.setHeader(&Cache-Control&, &no-cache&);
response.setDateHeader(&Expires&, 0);
response.setContentType(&image/jpeg&);
//生成随机字串
String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
//存入会话session
HttpSession session = request.getSession(true);
session.setAttribute(&rand&, verifyCode.toLowerCase());
//生成图片
int w = 200, h = 80;
VerifyCodeUtils.outputImage(w, h, response.getOutputStream(), verifyCode);
VerifyCodeUtils类,生成图片流,然后不同框架下的输出可以参考上面的代码或者自行百度,无非就是获取outputStream和ContentType的区别,main方法可直接执行:
(PS:不想下载的话Copy这个类就行了)
import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.Graphics2D;
import java.awt.LinearGradientP
import java.awt.P
import java.awt.RenderingH
import java.awt.geom.AffineT
import java.awt.image.BufferedI
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.OutputS
import java.util.A
import java.util.R
import javax.imageio.ImageIO;
public class VerifyCodeUtils{
//使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
public static final String VERIFY_CODES = &ABCDEFGHJKLMNPQRSTUVWXYZ&;
private static Random random = new Random();
* 使用系统默认字符源生成验证码
* @param verifySize 验证码长度
public static String generateVerifyCode(int verifySize){
return generateVerifyCode(verifySize, VERIFY_CODES);
* 使用指定源生成验证码
* @param verifySize 验证码长度
* @param sources 验证码字符源
public static String generateVerifyCode(int verifySize, String sources){
if(sources == null || sources.length() == 0){
sources = VERIFY_CODES;
int codesLen = sources.length();
Random rand = new Random(System.currentTimeMillis());
StringBuilder verifyCode = new StringBuilder(verifySize);
for(int i = 0; i & verifyS i++){
verifyCode.append(sources.charAt(rand.nextInt(codesLen-1)));
return verifyCode.toString();
* 生成随机验证码文件,并返回验证码值
* @param w
* @param h
* @param outputFile
* @param verifySize
* @throws IOException
public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException{
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, outputFile, verifyCode);
return verifyC
* 输出随机验证码图片流,并返回验证码值
* @param w
* @param h
* @param os
* @param verifySize
* @throws IOException
public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException{
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, os, verifyCode);
return verifyC
* 生成指定验证码图像文件
* @param w
* @param h
* @param outputFile
* @param code
* @throws IOException
public static void outputImage(int w, int h, File outputFile, String code) throws IOException{
if(outputFile == null){
File dir = outputFile.getParentFile();
if(!dir.exists()){
dir.mkdirs();
outputFile.createNewFile();
FileOutputStream fos = new FileOutputStream(outputFile);
outputImage(w, h, fos, code);
fos.close();
} catch(IOException e){
* 输出指定验证码图片流
* @param w
* @param h
* @param os
* @param code
* @throws IOException
public static void outputImage(int w, int h, OutputStream os, String code) throws IOException{
int verifySize = code.length();
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Random rand = new Random();
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Color[] colors = new Color[5];
Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN,
Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
Color.PINK, Color.YELLOW };
float[] fractions = new float[colors.length];
for(int i = 0; i & colors. i++){
colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
fractions[i] = rand.nextFloat();
Arrays.sort(fractions);
g2.setColor(Color.GRAY);// 设置边框色
g2.fillRect(0, 0, w, h);
Color c = getRandColor(200, 250);
g2.setColor(c);// 设置背景色
g2.fillRect(0, 2, w, h-4);
//绘制干扰线
Random random = new Random();
g2.setColor(getRandColor(160, 200));// 设置线条的颜色
for (int i = 0; i & 20; i++) {
int x = random.nextInt(w - 1);
int y = random.nextInt(h - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g2.drawLine(x, y, x + xl + 40, y + yl + 20);
// 添加噪点
float yawpRate = 0.05f;// 噪声率
int area = (int) (yawpRate * w * h);
for (int i = 0; i & i++) {
int x = random.nextInt(w);
int y = random.nextInt(h);
int rgb = getRandomIntColor();
image.setRGB(x, y, rgb);
shear(g2, w, h, c);// 使图片扭曲
g2.setColor(getRandColor(100, 160));
int fontSize = h-4;
Font font = new Font(&Algerian&, Font.ITALIC, fontSize);
g2.setFont(font);
char[] chars = code.toCharArray();
for(int i = 0; i & verifyS i++){
AffineTransform affine = new AffineTransform();
affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize/2, h/2);
g2.setTransform(affine);
g2.drawChars(chars, i, 1, ((w-10) / verifySize) * i + 5, h/2 + fontSize/2 - 10);
g2.dispose();
ImageIO.write(image, &jpg&, os);
private static Color getRandColor(int fc, int bc) {
if (fc & 255)
if (bc & 255)
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
private static int getRandomIntColor() {
int[] rgb = getRandomRgb();
int color = 0;
for (int c : rgb) {
color = color && 8;
color = color |
private static int[] getRandomRgb() {
int[] rgb = new int[3];
for (int i = 0; i & 3; i++) {
rgb[i] = random.nextInt(255);
private static void shear(Graphics g, int w1, int h1, Color color) {
shearX(g, w1, h1, color);
shearY(g, w1, h1, color);
private static void shearX(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(2);
boolean borderGap =
int frames = 1;
int phase = random.nextInt(2);
for (int i = 0; i & h1; i++) {
double d = (double) (period && 1)
* Math.sin((double) i / (double) period
+ (6.5862D * (double) phase)
/ (double) frames);
g.copyArea(0, i, w1, 1, (int) d, 0);
if (borderGap) {
g.setColor(color);
g.drawLine((int) d, i, 0, i);
g.drawLine((int) d + w1, i, w1, i);
private static void shearY(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(40) + 10; // 50;
boolean borderGap =
int frames = 20;
int phase = 7;
for (int i = 0; i & w1; i++) {
double d = (double) (period && 1)
* Math.sin((double) i / (double) period
+ (6.5862D * (double) phase)
/ (double) frames);
g.copyArea(i, 0, 1, h1, 0, (int) d);
if (borderGap) {
g.setColor(color);
g.drawLine(i, (int) d, i, 0);
g.drawLine(i, (int) d + h1, i, h1);
public static void main(String[] args) throws IOException{
File dir = new File(&F:/verifies&);
int w = 200, h = 80;
for(int i = 0; i & 50; i++){
String verifyCode = generateVerifyCode(4);
File file = new File(dir, verifyCode + &.jpg&);
outputImage(w, h, file, verifyCode);
web.xml配置:
&servlet-name&AuthImage&/servlet-name&
&servlet-class&.util.AuthImage&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&AuthImage&/servlet-name&
&url-pattern&/authImage&/url-pattern&
&/servlet-mapping&
ruixue0117
排名:千里之外
(15)(0)(23)(8)(6)(8)(2)(2)(2)(1)(2)(1)(1)(0)}

我要回帖

更多关于 qq登录无限输入验证码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信