背景
之前做过微信在moodle中登录的应用,实现了扫码登录和微信公众号的静默登录,本文介绍QQ和微博的基本应用,微信需要企业认证,然而QQ和微博只需要个人和域名认证即可,要求没那么高,用来做个人开发足够了。都能实现社交平台的快速登录,本文将重点介绍登录的流程与一些关键代码的实现。
也可以先参考微信扫码登录的这篇文章:Moodle三方登录—微信平台的应用
关键实现:
一、数据库
为了尽可能少的影响moodle系统本身的数据库,我新建了一个数据表,参考资料中的第一个文章有介绍。
新建mdl_user_qq
字段为:id,userid,openid.
(可以设置id或者userid为主键,userid跟mdl_user用户表建立连接)
二、登录流程
首先,要比较熟悉QQ互联的基本登录过程,可以参考资料第二篇文章,但是最新的moodle由于采用的是新的php7,部分php函数进行了升级,而最新的QQ_sdk_php还是2013年的,所以有个函数需要修改。
修改URL.class.php中的get_contents函数为:
'''
public function get_contents($url)
{ $ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec($ch);
curl_close($ch); //-------请求为空
if(empty($response))
{
$this->error->showError("50001");
}
return $response;
}
'''
即可解决curl的一个错误提示。
基本登录流程:
QQ扫码——>获取QQ的openid——>从mdl_user_qq表中查找该openid的userid,找到后,调用moodle本身的登录函数,设置Cookie等基本操作。(可以参考开头给的微信登录的链接,函数已经有描述)
关键代码提示:
config.php配置文件,必须包含,在moodle根目录下。
login/lib.php:get_complete_user_data函数和complete_user_login( $user )函数都需要引用这个php文件。
其他的代码就需要自己进行补充说明了,整体难度不是很大吧,但是需要自己对其中的登录流程比较熟悉。
关键代码的实现:
1、login/中添加QQ扫码的按钮:
moodle\theme\boost\templates\core\loginform.mustache, 在大约176行左右添加
一行登录按钮的,可以跟上面的登录一样,将链接文字修改即可。
2、QQ扫码界面:
login/qq/index.php:参考资料2中,默认内容可以是:
<?php
require_once("API/qqConnectAPI.php");
$qc = new QC();
$qc->qq_login();
?>
回调页面设置qq.php:
require_once("API/qqConnectAPI.php");
$qc = new QC(); $callbak = $qc->qq_callback(); //返回的验证值
$openid = $qc->get_openid(); //qq分配的用户id
$qq = new QC($callbak,$openid);
$result = $qq->get_user_info(); //获取用户信息
//获取到用户openid和基本信息之后,就可以进行结合moodle本身进行登录流程了。
参考资料
(注意:QQ_sdk_php代码有点老了,需要修改一处代码)
3、微信开放平台开发——网页微信扫码登录(OAuth2.0)
后话
moodle的二次开发资料教少,我也走了很多弯路,从开始安装系统到一些简单的开发,也有一些源码的阅读等,都耗费了很多时间和精力,同时我也有一些折腾的经验。
如果不介意付费服务,欢迎与我联系。