这个实例是用PHP来开发,用的是CI的框架结构,没接触过CI的朋友也不要着急,这个框架和其它框架的原理是一样的,因此代码阅读起来不会有困难。

首先,代码文件分为三个文件,①client.php ②client_view.php ③server.php

先来讲一下简单的原理,再给出代码和注解。

原理:我们以QQ开放平台登录为例,其实不光QQ平台,其它任何平台原理基本上是一样的,只不过可能数据处理方式上有所差异。首先,我们将登录程序定义为客户端CLIENT端,QQ服务端定因为服务器端,我们在登陆QQ的时候,会通过我们的程序也就是浏览器发送一个请求给QQ服务器,当然你输入的ID和PASSWORD以及其他的PROFILE都是发送给服务端的参数,QQ服务端在受到CLIENT端的请求之后,接收到CLIENT的REQUEST和PARAMETERS之后,将你的ID和PASSWORD以及附加PROFILE与数据库中的相关数据进行比较,如果比较结果通过,那么QQ服务器端会将这个的相关资料数据发送给CLIENT,当然加密细节就不说了,CLIENT接收到之后对数据进行处理和提取,得到自己想要的数据,后续的工作就看CLIENT的需求了。基本原理就是这样的。好了,废话不说,代码给出。

①client.php

<?php
class Client extends CI_Controller {public function __construct(){parent::__construct();$this->load->helper('url');$this->load->library('xmlrpc');$this->xmlrpc->set_debug(TRUE);}public function index(){$data['title'] = 'xmlrpc';$data['heading'] = 'Welcome to xmlrpc client';$this->load->view('client_view.php', $data);}public function request(){$data['title'] = 'xmlrpc';$data['heading'] = 'xmlrpc server response';$server_url = site_url('server');$this->xmlrpc->server($server_url, 80);$this->xmlrpc->method($this->uri->segment(3));switch($this->uri->segment(3)){case 'login':$request = array(array(array('request' => 'login'),'struct'),array(array('username' => 'inan','password' => sha1('inan')),'struct'));break;case 'add':$request = array(array(array('request' => 'add'),'struct'),array(array('username' => 'newuser','password' => sha1('newuser')),'struct'));break;case 'search':$request = array(array(array('request' => 'search'),'struct'),array(array('username' => 'inan'),'struct'));break;default:$request = NULL;}if(is_array($request)){$this->xmlrpc->request($request);if(! $this->xmlrpc->send_request()){$data['response'] = $this->xmlrpc->display_error();}else{$data['response'] = $this->xmlrpc->display_response();}}else{$data['response'] = array('Invalid request');}$this->load->view('xmlrpc_response_view.php', $data);}
}

②client_view.php

<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body><h1><?php echo $heading; ?></h1><p>All variables set in controllers though.</p><p><?phpecho anchor('client/request/login', 'Login');echo '<br />';echo anchor('client/request/add', 'Add');echo '<br />';echo anchor('client/request/search', 'Search');?></p></body>
</html>

③server.php

<?php
class Server extends CI_Controller {public function __construct(){parent::__construct();$this->load->library('xmlrpc');$this->load->library('xmlrpcs');$this->load->model('database_model');}function index(){$config['functions']['login'] = array('function' => 'server.user_login');$config['functions']['add'] = array('function' => 'server.user_add');$config['functions']['search'] = array('function' => 'server.user_search');$this->xmlrpcs->initialize($config);$this->xmlrpcs->serve();}public function user_login($request){$parameters = $request->output_parameters();$uid = $this->security->xss_clean($parameters['1']['username']);$psw = $this->security->xss_clean($parameters['1']['password']);$result = $this->database_model->user_login($uid, $psw);if($result->num_rows() == 1){$response = array(array('REQUEST'     => array($parameters['0']['request'], 'string'),'RESPONSE'  => array('successful', 'string')),'struct');return $this->xmlrpc->send_response($response);}else{return $this->xmlrpc->send_error_message('100', 'fail');}}public function user_add($request){$parameters = $request->output_parameters();$uid = $this->security->xss_clean($parameters['1']['username']);$psw = $this->security->xss_clean($parameters['1']['password']);$result = $this->database_model->user_add($uid, $psw);if($this->db->affected_rows() == 1){$response = array(array('REQUEST'     => array($parameters['0']['request'], 'string'),'RESPONSE'  => array('successful', 'string')),'struct');return $this->xmlrpc->send_response($response);}else{return $this->xmlrpc->send_error_message('100', 'fail');}}public function user_search($request){$parameters = $request->output_parameters();$uid = $this->security->xss_clean($parameters['1']['username']);$result = $this->database_model->user_search($uid);if($result->num_rows() > 0){$user_list = array();foreach($result->result() as $row){$user_list[] = array(array('USERNAME' =>   array($row->username, 'string'),'PASSWORD' => array($row->password, 'string')),'struct');}$response = array($user_list, 'array');return $this->xmlrpc->send_response($response); }else{return $this->xmlrpc->send_error_message('100', 'fail');}}
}

本文作者:爱帮竞人才网创始人高学平

转载于:https://www.cnblogs.com/ibjrc/archive/2011/06/23/2088492.html

通过简单实例讲解QQ开放平台登录原理相关推荐

  1. 【JEECG技术博文】简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6)

    简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6) 原       文:http://blog.itpub.net/30066956/viewspace-1872409/ 相关博文: ...

  2. 【JEECG技术博文】JEECG 简单实例讲解权限控制

    JEECG简单实例讲解权限控制 请大家点击这里为我们投票,2015博客之星,更多分享敬请期待 博文地址:http://blog.itpub.net/30066956/viewspace-1868754 ...

  3. (第三方平台)开发相关,解除80端口占用,微信公众号分享jssdk实现,微信开放平台登录接口接入,2022微信分享接入本地调试,微信分享定制

    一.开发相关 1.平台地址 微信开放平台 QQ互联平台SDK 2.文章收集 来自CSDN兄台的QQ登录使用的教程 微信网站应用开发的详细流程和引导 VueJs单页应用实现微信网页授权及微信分享功能 [ ...

  4. 简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 (2014-10-24 10:19:17) 标签: module linux 分类:Linux/Unix 本文将直接了当的带你进入linux的模块编译 ...

  5. Android 驱动(8)---简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ----------------- ...

  6. qq开放平台申请步骤_实现开放式沟通的8个步骤

    qq开放平台申请步骤 开放组织的基本原则是开放交流模型 . 开放式沟通体现了组织所有关系中的信任和透明性. 这意味着个人贡献者将参与组织决策并与之合作,公开讨论,不仅欢迎反馈,还应采取行动使所有人受益 ...

  7. java Oauth2微博开放平台登录授权接入

    --前期准备 微博开放平台登录账号,地址:https://open.weibo.com/ 提交身份认证(个人真实姓名.身份证号.身份证照片)审核需要3天左右 注册应用 填写应用名(选择网页应用) 注册 ...

  8. 微信用户绑定java实例_微信开放平台 帐号管理 绑定在同一个开放平台帐号下的公众号及小程序让用户unionid一致...

    第三方平台在获得此权限后,可以代替已授权的公众号/小程序创建开放平台帐号或进行绑定/解绑操作. 绑定在同一个开放平台帐号下的公众号及小程序,用户unionid一致.开发者可调用"获取用户基本 ...

  9. 成为腾讯开发者——如何使用QQ开放平台和微信开放平台

    最近的项目有这样一个需求,需要分享链接到QQ和微信中,这样iOS中应该怎样实现呢.方法也许有很多,但是我选择的是使用第三方API来实现这个功能--ShareSDK.这就需要我们先去申请成为QQ开发者和 ...

  10. php注册登录详解_实例讲解php用户注册与登录页面

    这周做了个php的简单实例,算是学了这么久php语法的一次综合应用吧,感觉前面学的东西都不知道怎么用,不看教程还真做不出来.本来想把它写在网页弹出层上的,这样看起来更像是一个用户登录框,但是看了弹出层 ...

最新文章

  1. OC 的反射机制以及使用场景
  2. 关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”
  3. 0116互联网新闻 | “DaDa英语”近日完成2.55亿美元D轮融资;腾讯推今年首个手游“闹闹天宫”...
  4. 直播 | 北邮博士生纪厚业:异质图神经网络在阿里推荐业务中的探索
  5. matplotlib实践过程总结
  6. 小记安装python的MySQLdb模块
  7. 华为P40系列起售价曝光!有点意想不到
  8. STP的根端口与指定端口
  9. Java中构造方法的执行顺序
  10. 每日算法系列【LeetCode 927】三等分
  11. License Server Version 11.9 Installation on Windows Server 2003 Hangs
  12. C++变量初始化问题
  13. 一款二进制文件查看器
  14. Java对接ChinaPay提现(公私钥方式)
  15. oracle中查看锁表,ORACLE中查看当前系统中锁表情况
  16. 两种异步时钟同步化区别分析
  17. 二维数组传参||传值
  18. TC源码分析一,tc命令
  19. System.IO.FileNotFoundException:“未能加载文件或程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, Public
  20. GEE入门【4】| 矢量数据FeatureCollection(行政区划分)

热门文章

  1. css之右上角带弧形的三角形标签文字45度倾斜显示
  2. 最新八个免费Logo设计工具灵感网站,帮你搞定logo设计难题!
  3. 一个不超过200行的游戏
  4. java实现来电弹屏_客服系统如何实现1秒来电弹屏?
  5. kettle的图形工具(Spoon)简单介绍
  6. 微信小程序 用户登录及对用户获取信息进行授权
  7. NS-miracle安装
  8. 网络计算机显示器接口,电脑显示器接口怎么配置才合理
  9. datealive软件最新_约会大作战手游官网版下载-约会大作战正版手游下载地址v3.79_86PS软件园...
  10. PHP电商网站高并发的秘诀之电商秒杀活动