腾讯开放平台模拟授权

二进制的蛇 2014-05-22 09:59:45
官方授权步骤:



模拟登陆代码:

public static final String HEXSTRING = "0123456789ABCDEF";
//实例化认证对象
public static OAuthV2 oAuth = new OAuthV2();
//实例化链接对象
private static HttpClient client = new DefaultHttpClient();
// 初始oAuth应用信息
public static void init(/*OAuthV2 oAuth*/)
{
//客户端ID
oAuth.setClientId("801334560");
//客户端密码
oAuth.setClientSecret("fc1864532f5d29abd92b6ce52593f127");
//返回地址
oAuth.setRedirectUri("http://www.baidu.com");

}
/**
* 对密码进行加密
* @param qq
* http://check.ptlogin2.qq.com/check?uin={0}&appid=15000101&r={1 }
* 返回的第三个值
* @param password
* QQ密码
* @param verifycode
* 验证码
* @return 加密后的密码
* @throws UnsupportedEncodingException
* @throws Exception
*
*/
public static String GetPassword(String qq, String password,
String verifycode) throws Exception
{
String P = hexchar2bin(md5(password));
String U = md5(P + hexchar2bin(qq.replace("\\x", "").toUpperCase()));
String V = md5(U + verifycode.toUpperCase());
return V;
}

public static String md5(String originalText) throws Exception
{
byte buf[] = originalText.getBytes("ISO-8859-1");
StringBuffer hexString = new StringBuffer();
String result = "";
String digit = "";
try
{
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(buf);
byte[] digest = algorithm.digest();
for (int i = 0; i < digest.length; i++)
{
digit = Integer.toHexString(0xFF & digest[i]);
if (digit.length() == 1)
{
digit = "0" + digit;
}
hexString.append(digit);
}
result = hexString.toString();
}
catch (Exception ex)
{
result = "";
}
return result.toUpperCase();
}

public static String hexchar2bin(String md5str) throws UnsupportedEncodingException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(md5str.length() / 2);
for (int i = 0; i < md5str.length(); i = i + 2)
{
baos.write((HEXSTRING.indexOf(md5str.charAt(i)) << 4 | HEXSTRING
.indexOf(md5str.charAt(i + 1))));
}
return new String(baos.toByteArray(), "ISO-8859-1");
}
/***
* 模拟登录QQ
* @param qq QQ号码
* @param password QQ密码
* @throws Exception
*/
public static void login(String qq, String password) throws Exception
{
//创建一个连接对象
HttpGet get = new HttpGet("https://ssl.ptlogin2.qq.com/check?uin="+ qq + "&appid=46000101&ptlang=2052&js_type=2&js_ver=10009&r=0.7948186025712065");
//实例化链接对象
HttpResponse response = client.execute(get);
String entity = EntityUtils.toString(response.getEntity());
String[] checkNum = entity.substring(entity.indexOf("(") + 1,entity.lastIndexOf(")")).replace("'", "").split(",");
String pass = "";
String responseData = "";
// 获取验证码(如果有验证码输出到C:/code.jpg,查看后输入可继续执行
System.out.println(checkNum[0]);
System.out.println(checkNum[1]);
System.out.println(checkNum[2].trim());
System.out.println(checkNum[2].trim().replace("\\x", ""));
if ("1".equals(checkNum[0]))
{
// uin为qq号或者微博用户名
HttpGet getimg = new HttpGet("http://captcha.qq.com/getimage?aid=46000101&r=0.3478789969909082&uin=" + qq + "&vc_type=" + checkNum[1] + "");
HttpResponse response2 = client.execute(getimg);
//OutputStream os = new FileOutputStream("c:/code.jpg");
OutputStream os = new FileOutputStream("code.gif");
byte[] b = EntityUtils.toByteArray(response2.getEntity());
os.write(b, 0, b.length);
os.close();
System.out.println("在项目目录下找验证码文件!");
System.out.println("请输入验证码:");
Scanner in = new Scanner(System.in);
responseData = in.nextLine();
in.close();
}
else
{
responseData = checkNum[1];
}
/** *******************加密密码 ************************** */
pass = GetPassword(checkNum[2], password, responseData);
/** *********************** 登录 *************************** */

HttpGet getimg = new HttpGet("https://ssl.ptlogin2.qq.com/login?ptlang=2052&u="+ qq+ "&p="+ pass+ "&verifycode="+ responseData+ "&aid=46000101&target=top&u1=https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Foauth2%2Fauthorize%3Fclient_id%3D"
+ oAuth.getClientId()+ "%26response_type%3Dcode%26redirect_uri="+ oAuth.getRedirectUri()+ "&ptredirect=1&h=1&from_ui=1&dumy=&qlogin_param=abbfew=ddd&wording=%E6%8E%88%E6%9D%83&fp=loginerroralert&action=8-13-240977&g=1&t=1&dummy=&js_type=2&js_ver=10009");
HttpResponse response2 = client.execute(getimg);
HttpEntity httpentity = response2.getEntity();
System.out.println(EntityUtils.toString(httpentity));
}
/**
* 获取CODE
*标准的返回值URL:http://www.myurl.com/example?code=CODE&openid=OPENID&openkey=OPENKEY
*/
public static String getUrl() throws ClientProtocolException, IOException
{
String codeRequire="https://open.t.qq.com/cgi-bin/oauth2/authorize?"
+ "client_id="+ oAuth.getClientId()+ "&response_type=code&redirect_uri="+ oAuth.getRedirectUri()+ ""
+ "&wap=2&state=&forcelogin=false";
HttpGet getcode=new HttpGet(codeRequire);
//HttpGet getcode = new HttpGet("https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id="+ oAuth.getClientId()+ "&response_type=code&redirect_uri="
// + oAuth.getRedirectUri()+ "&checkStatus=yes&appfrom=&g_tk&checkType=showAuth&state=");
HttpResponse response3 = client.execute(getcode);
HttpEntity entityqqq = response3.getEntity();
String entityxcc = EntityUtils.toString(entityqqq);
return entityxcc;
}

结果:
QQ模拟登陆成功 但在获取授权CODE的函数返回值中没有应有的CODE openid openkey这三个关键参数
求解
...全文
187 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小律律 2014-05-22
  • 打赏
  • 举报
回复
好复杂的赶脚。帮你顶一下
简介VirtualApp是一个App虚拟化引擎(简称VA)。VirtualApp已兼容Android 0(8.0 Preview)。VirtualApp在你的App内创建一个虚拟空间,你可以在虚拟空间内任意的安装、启动和卸载APK,这一切都与外部隔离,如同一个沙盒。运行在VA中的APK无需在外部安装,即VA支持免安装运行APK。VA目前被广泛应用于双开/多开、应用市场、模拟定位、一键改机、隐私保护、游戏修改、自动化测试、无感知热更新等技术领域,但它决不仅限于此,Android本身就是一个极其开放的平台,免安装运行APK这一Feature打开了无限可能--------这都取决于您的想象力。申明当您需要将VirtualApp用于商业用途时,请务必联系QQ:10890 购买商业授权。您如果未经授权将VirtualApp的App模块作为您自己的App用于牟利或上传软件市场,我们取证后将直接报警(侵犯著作权罪)。购买商业授权是对我们最大的支持和认可,我们将投入更多精力和时间来不断完善优化VirtualApp,作为购买商业授权的回报,您可以获得未开放的商业版本和1vs1的支持(技术、运营、预警)!同时我们也支持基于VirtualApp的APP订制开发,请联系:QQ:10890 洽谈。请注意VirtualApp代码的更新频率非常快(以小时为单位),每一次代码的更新都有可能修复重大BUG,所以请 watch 本项目,并注意随时更新代码,以免给您带来损失!已支持的加固(不断更新)360加固腾讯加固梆梆加固梆梆企业版(12306客户端 Pass)爱加密百度加固娜迦加固乐变加固网易易盾通付盾(已支持的加固均可通过VA来脱壳,本技术不公开)在VA使用Google服务VA支持运行官方的Google服务套件,同时我们也提供了对MicroG的支持。您可以通过在VA中安装MicroG来支持Google服务,这样,即使外部没有Google服务,用户也可以在VA中享受Google服务。MicroG套件可在此下载:Download MicroGMicroG的必要模块:Services CoreServices Framework ProxyStore如果您需要在VA中使用官方的Google服务套件(外部已安装的前提下),则可以通过 GmsSupport.installGms(userId) 来安装。注意,您不能同时安装MicroGms和官方的Gms。使用说明前往你的Application并添加如下代码:@Override     protected void attachBaseContext(Context base) {         super.attachBaseContext(base);         try {             VirtualCore.getCore().startup(base);         } catch (Throwable e) {             e.printStackTrace();         }     }安装App:VirtualCore.getCore().installApp({APK PATH}, flags);启动App:VirtualCore.getCore().uninstallApp({PackageName});该App的基本信息:VirtualCore.getCore().findApp({PackageName});
万岳教育平台源码,搭建迅速,源码开源,可定制开发,可二次开发。功能全面,支持大班课、小班课、双师教学、内容付费等。多终端,多版本,多选择。 万岳教育平台源码功能: 1、教学互动直播 模拟真实课堂的教学环境,老师与学员实现互动,简单易用的授课工具,支持ppt、视频、语音、文字等。 2、电子白板与ppt随意切换 电子白板与课件PPT自由切换,重点内容标注支持画笔工具、字体、橡皮擦、一键清空等工具。 3、直播课程回看 直播教学中支持全屏录制,方便学员复习和未能到场的学员补习,随时回看上课内容,按需查漏补缺。 4、学生举手在线答疑 课堂反馈的机制:学员对课程有问题时可以举手提问,经过允许后发言老师或助教进行在线答疑。 5、课程内容资料共享 老师可以在直播教室里面共享课程资料给学员,支持ppt,word,excel,pdf,swf等常用电子文件格式。 6、桌面共享界面同步 老师可将自己电脑桌面共享给学员,随时使用本地MP3、MP4多媒体文件辅助教学或进行软件操作的演示。 7、视频音频在线互动 师生间多元化沟通交流:学员可以通过视频或语音与老师进行沟通交流,课堂互动提高直播教学质量。 8、助教老师辅助教学 直播课程过程中助教可以辅助直播老师把控课程进程,对学员进行课堂秩序维护或问题答疑。 9、万人同时在线 强大系统能力可同时承载万人在线直播依然高清流畅,视频互动语音交流,让所有人都可以参与进来。 10、操作系统全兼容 教师无需安装客户端,无论Windows、MAC操系统,打开网页即可使用,IE、Safari、Chrome主流浏览器全兼容。 11、手机移动终端支持 支持电脑、iPad、手机课堂的使用,实现碎片化学习和碎片化管理。 万岳教育平台源码参数: 品牌:thinkphp 语言:php 数据库:Mysql 客户端:APP+web 规格:整站源码 授权:免授权 源文件:完全开源 万岳教育平台源码安装环境: 主机类型:独立主机 伪静态:无需 操作系统:Windows、安卓、iOS、linux Web服务:nginx 源码安装步骤: 1、关闭防火墙并设置开机关闭------>systemctl stop firewalld && systemctl disable firewalld 2、确保服务器开放以下端口:21 22 80 888 8888 3306 6379 19967 39000-40000(ftp被动模式端口,不用可以不打开) 3、宝塔面板也需要开放以下端口:21 22 80 888 8888 3306 6379(下面有介绍) 19967 39000-40000(ftp被动模式端口,不用可以不打开) 1.宝塔面板安装命令 1.1、 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh 执行完成后给出默认的登录URL、用户名和密码 1.2、根据上面安装成功的地址登录宝塔面板后台,我们需要去设置网站环境。 1.3、登录成功后执行一键安装lnmp,具体版本如下: nginx版本1.15 MySQL 5.7 php 7.0 phpmyadmin 4.7 安装方式为极速安装 1.4、等宝塔程序自动安装完毕之后,我们就可以去左侧菜单创建站点、数据库等应用。 1.5、此时环境lnmp搭建好,但是redis和php插件 如opchache redis fileinfo都需要安装下 1.6、找到redis安装下 1.7、同理安装下PHP扩展插件 1.8、此时网站整体环境搭建好了,但是还需要确认下宝塔面板以下端口是否开放,没开放的话直接打开(上面一开始开放的部分是服务器开放的端口,别混淆了) 2.设置宝塔面板安全 进入后台,设置——面板设置。 默认宝塔面板端口、用户、密码都需要修改,确保服务器的安全。 3.redis配置 修改redis配置信息 重启redis 4.添加站点、数据库(站点需要配置ssl证书`) 设置完毕之后,我们可以正常的添加站点、数据库,这个很简单,直接设置就可以。 搭建好了之后会提示:成功创建站点 建立完站点,由于是tp5框架,所以我们要修改下网站根目录 配置ssl证书 可在腾讯云申请免费ssl证书, 填写好信息点击下一步, 可选择手动DNS验证,点击确认申请 很久要求添加一条解析记录,等下验证通过下载证书 下载完成后解压进入 进入nginx目录,后会有两个文件, 宝塔操作:点击【网站】,对应站点【设置】【ssl】【其他证书】,将证书文件打开,把证书文件内容复制到宝塔中,点击保存即可。

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧