【重磅升级】phpcms小程序插件升级到4.3.4,打通phpcms会员中心与phpsso,小程序实现一键授权登录
(1)重构get_user.php接口,对接phpcms会员中心和phpsso
(2)新增接口文件member.php,所有与会员有关接口都通过该文件获取,获取方式为action=favorite,....
1、action=member:表示获取用户信息
2、action=updatemember:更新用户信息
3、action=favorite :获取收藏信息
4、action=mypublish : 获取我的投稿
5、action=publish:投稿(暂未发布)
6、action=group:获取分组信息
(3)微信小程序demo新增文件member,其中包含:auth、favorite、index,header、publish、personal等
(4)修复其他已知bug
注意:用于该版本打通phpsso,所以需要对phpcms程序源码做部分修改,具体修改教程请参考:升级教程
修改代码比较多,如果没有基础慎重
用于sso的原因,所以phpcms上线这么久一直没有去打通会员中心,最近开始正好会员中心,才发现v9的设计有很多坑爹之处,造成很多会员的东西无法第三方调用,比如收藏模块,数据库没有存储栏目id和文章id,这就造成我们无法在小程序端获取对应的url;还有会员名称问题,v9是不允许有重复名字的,但是微信用户可有很多重名的,所以这些问题都需要修改相关代码
具体修改
一、给favorite添加文章id和栏目id
(1)给v9_favorite新增字段fid,存储d-catid-id 否则小程序端无法确定url;
(2)打开api文件夹下的add_favorite.php第18行if判断后边添加代码:
if($_GET['catid'] && $_GET['id']) {
$catid = intval($_GET['catid']);
$fid = 'f-'.$catid.'-'.intval($_GET['id']);
}else{
exit('-2');
}
然后找到代码:
$data = array('title'=>$title, 'url'=>$url, 'adddate'=>SYS_TIME, 'userid'=>$userid);
改成:
$data = array('title'=>$title, 'url'=>$url, 'adddate'=>SYS_TIME, 'userid'=>$userid,'fid' => $fid);
(3)找到所有的show.html模板的
function add_favorite(title) {
$.getJSON('{APP_PATH}api.php?op=add_favorite&title='+encodeURIComponent(title)+'&url='+encodeURIComponent(location.href)+'&'+Math.random()+'&callback=?', function(data){
if(data.status==1) {
$("#favorite").html('收藏成功');
} else {
alert('请登录');
}
});
}
改成:
function add_favorite(title) {
$.getJSON('{APP_PATH}api.php?op=add_favorite&title='+encodeURIComponent(title)+'&url='+encodeURIComponent(location.href)+'&id={$id}&catid={$catid}&'+Math.random()+'&callback=?', function(data){
if(data.status==1) {
$("#favorite").html('收藏成功');
} else {
alert('请登录');
}
});
}
即在链接中添加&id={$id}&catid={$catid},用于传递id和catid
(之前用户添加的收藏文章,再小程序端可以读取,但是无法匹配到对应url)
二、修改v9_content_check表,新增字段userid用于存储用户id,以实现小程序端调用
(1)给v9_content_check表新增字段userid;
(2)打开
phpcms/model/content_model.class.php大概127行在代码:
$this->content_check_db = pc_base::load_model('content_check_model');
后边新增判断,判断是否传递了 userid字段,没有默认0
if(!array_key_exists("userid",$data)){
$data['userid'] = '0';
}
然后紧接着的$check_data改成(增加userid)
$check_data = array(
'checkid'=>'c-'.$id.'-'.$modelid,
'catid'=>$systeminfo['catid'],
'siteid'=>$this->siteid,
'title'=>$systeminfo['title'],
'username'=>$systeminfo['username'],
'inputtime'=>$systeminfo['inputtime'],
'status'=>$data['status'],
'userid'=>$data['userid'],
);
(3)找到代码
phpcms/modules/member/content.php第78行附近找到代码:
$info['username'] = $memberinfo['username'];
下边新增代码:
$info['userid'] = $memberinfo['userid'];
这样小程序端即可通过userid来读取投稿文章(官方默认的是通过username即用户名来读取该用户文章的,这样也可以,但是前提是不允许用户修改名字,感觉比较扯淡,所以不建议 通过username读取)
三、官方注册账号是不允许用户名重复的,但是微信用户名称是有重复情况的,如果不做判断会造成混乱,有两种思路
(1)给重复用户的名称后边加四位随机数:比如:腾石2325,石头2020,目前我采用的是这种方式,在接口get_user.php里边会做个判断,一旦重复后边添加随机数字
(2)修改官方源码,允许用户名重复;此时你需要
01、修改v9_member数据库username的索引类型问题,去修改该表的Unique改成normal;这样允许重复名称
02、修改member下的index.php的名字重复校验和sso下的名字重复校验
03、在登录框添加选择:普通用户/小程序用户
总之这种方式比较麻烦,慎重考虑
其他说明:
(1)和username类似,v9也不允许email为空和重复,为了需要,接口文件我随机分配一个邮箱给用户,格式为:default_时间戳@tengcee.com,可以自己随意修改
(2)用户的默认密码都是:000000,授权成之后请要求立即修改(也可以把密码设置为随机密码,反正小程序端用户登录是直接授权登录的,不需要密码)
(3)目前暂不支持文章投稿功能
(4)手机号一键登录功能 用于小程序官方返回信息太少,只有一个手机号,所以暂不考虑手机登录
电话咨询
在线咨询
微信咨询