|
本帖最后由 千帆开发孙兵 于 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 );
- }
复制代码
|
|