千帆云
标题:
关于phpwind微信登录修复优化接口更新说明
[打印本页]
作者:
千帆开发孙兵
时间:
2016-12-29 17:39
标题:
关于phpwind微信登录修复优化接口更新说明
本帖最后由 千帆开发孙兵 于 2017-5-17 10:08 编辑
问题
phpwind千帆的第三方注册和登录,注册第三方登录等接口只接受了weibotype, openid 这个两个参数,接口默认创建的表pw_third_bind也没有unionid字段
目前APP注册登录都ok的,但是不能与马上上线的千帆web版打通用户,因为只有unionid才是统一应用平台不同公众号的唯一标识
说明
根据自己站点微信登录的情况参考如下方案(APP是否有微信登录,微信登录用得哪张表哪个字段,是否在千帆的接口上自定义开发)
强烈建议插入字段时,备份该表。
phpwind各个站点都有自定义修改,以下代码仅供参考!
phpwind本地接口已经打包附件,修改或覆盖接口时务必先备份。
有任何疑问可以在对接群联系千帆技术
解决方案
1.改表sql,增加unionid字段
千帆phpwind默认创建第三方表pw_third_bind的sql
CREATE TABLE `表前缀(根据你的站点配置)_third_bind` (
`uid` int(10) unsigned NOT NULL DEFAULT '0',
`openid` varchar(50) NOT NULL DEFAULT '',
`nickname` varchar(50) NOT NULL DEFAULT '',
`weibotype` varchar(20) NOT NULL,
`info` text NOT NULL,
UNIQUE KEY `uid_weibotype` (`uid`,`weibotype`),
KEY `idx_nickname` (`nickname`),
KEY `idx_openid` (`openid`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
复制代码
增加unionid字段sql
ALTER TABLE `pw_third_bind`
ADD COLUMN `unionid` varchar(50) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL DEFAULT '' AFTER `openid`,
ADD INDEX `idx_unionid` (`unionid`) USING BTREE ;
复制代码
2.修正pw注册本地接口,增加接受unionid参数,并且存入表中
文件名register.php
参数接收,增加unionid
S::gp(array('needbindthird', 'weibotype', 'openid', 'nickname', 'gender', 'unionId') ,'P');
复制代码
注册前的验证加上unionid
if( $needbindthird > 0 )
{
$thirdLogin = new ThirdLogin();
if( (!empty($openid) && $thirdLogin->fetchUser($openid, $weibotype)) || (!empty($unionId) && $thirdLogin->fetchWechatUser($unionId, $weibotype)) )
{
printResponse(array(
'errCode' => 2,
'errMessage' => '该账号已经绑定了用户'
));
}
}
复制代码
注册后的写入信息加上unionid
注册后的写入信息加上unionid
if( $needbindthird > 0 )
{
if(!empty($unionId)) {
$thirdLogin->bindWechatUser( $winduid, $openid, $unionId, $weibotype, $nickname );
}else{
$thirdLogin->bindUser( $winduid, $openid, $weibotype, $nickname );
}
}
复制代码
3.修正第三方登录接口,增加接受unionid参数,兼容之前的老用户,就是把之前没存unionid的老用户,拿到unionid存入表中
文件名thirdLogin.php
参数接收,增加unionid
InitGP( array( 'openid', 'weibotype', 'unionId' ) , 'P' );
复制代码
微信登录的兼容老用户
// 兼容微信登录
if( !empty($unionId) && $weibotype == 'wechat') {
$uidWechat = $thirdLogin->fetchWechatUser($unionId, $weibotype);
if( !empty($openid) ) {
if( is_numeric($uid) && $uid > 0 && empty($uidWechat)) {
$db->update( "UPDATE `pw_third_bind` set unionid=".S::sqlEscape($unionId)." where uid=" . S::sqlEscape($uid) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ) );
}
if(is_numeric($uid) && $uid > 0 && is_numeric($uidWechat) && $uidWechat > 0 && $uid != $uidWechat) {
$db->update( "UPDATE `pw_third_bind` set unionid=".S::sqlEscape($unionId)." where uid=" . S::sqlEscape($uid) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ) );
$db->update( "UPDATE `pw_third_bind` set unionid='' where uid=" . S::sqlEscape($uidWechat) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ));
}
}
$uid = $thirdLogin->fetchWechatUser($unionId, $weibotype);
}
复制代码
4.第三方绑定接口,增加unionid的判断和绑定
文件名changeThirdPlatform.php
增加unionid参数接收
S::gp( array( 'uid', 'weibotype', 'openid', 'unionid', 'nickname', 'operation' ) );
复制代码
判断是否绑定兼容unionid
// 绑定
// 判断第三方账号是否绑定了本地账号
if( $weibotype == 'wechat' && !empty($unionid) ) {
$uid = $thirdLogin->fetchWechatUser( $unionid, $weibotype );
}else {
$uid = $thirdLogin->fetchUser( $openid, $weibotype );
}
复制代码
更新数据兼容unionid
// 更新数据
if( $weibotype == 'wechat' && !empty($unionid) ) {
$thirdLogin->bindWechatUser( $winduid, $openid, $unionid, $weibotype, $nickname );
}else {
$thirdLogin->bindUser( $winduid, $openid, $weibotype, $nickname );
}
复制代码
clientapi.rar
2016-12-29 17:50 上传
点击文件名下载附件
154.47 KB, 下载次数: 317
欢迎光临 千帆云 (http://bbs.qianfanyun.com/)
Powered by Discuz! X3.2