千帆云

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5400|回复: 0
打印 上一主题 下一主题

[接口升级] 关于phpwind微信登录修复优化接口更新说明

[复制链接]

76

主题

282

帖子

0

积分

认证版主

Rank: 7Rank: 7Rank: 7

积分
0
跳转到指定楼层
楼主
发表于 2016-12-29 17:39:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 | 来自江苏
本帖最后由 千帆开发孙兵 于 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
  1. CREATE TABLE `表前缀(根据你的站点配置)_third_bind` (
  2.   `uid` int(10) unsigned NOT NULL DEFAULT '0',
  3.   `openid` varchar(50) NOT NULL DEFAULT '',
  4.   `nickname` varchar(50) NOT NULL DEFAULT '',
  5.   `weibotype` varchar(20) NOT NULL,
  6.   `info` text NOT NULL,
  7.   UNIQUE KEY `uid_weibotype` (`uid`,`weibotype`),
  8.   KEY `idx_nickname` (`nickname`),
  9.   KEY `idx_openid` (`openid`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=gbk;
复制代码

        增加unionid字段sql
  1. ALTER TABLE `pw_third_bind`
  2. ADD COLUMN `unionid`  varchar(50) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL DEFAULT '' AFTER `openid`,
  3. ADD INDEX `idx_unionid` (`unionid`) USING BTREE ;
复制代码


  2.修正pw注册本地接口,增加接受unionid参数,并且存入表中
        文件名register.php

    参数接收,增加unionid
  1. S::gp(array('needbindthird', 'weibotype', 'openid', 'nickname', 'gender', 'unionId') ,'P');
复制代码
    注册前的验证加上unionid
  1. if( $needbindthird > 0 )
  2. {
  3.     $thirdLogin = new ThirdLogin();
  4.     if( (!empty($openid) && $thirdLogin->fetchUser($openid, $weibotype)) || (!empty($unionId) && $thirdLogin->fetchWechatUser($unionId, $weibotype)) )
  5.     {
  6.         printResponse(array(
  7.             'errCode' => 2,
  8.             'errMessage' => '该账号已经绑定了用户'
  9.         ));
  10.     }
  11. }
复制代码
   
注册后的写入信息加上unionid
  1. 注册后的写入信息加上unionid

  2. if( $needbindthird > 0 )
  3. {
  4.     if(!empty($unionId)) {
  5.         $thirdLogin->bindWechatUser( $winduid, $openid, $unionId, $weibotype, $nickname );
  6.     }else{
  7.         $thirdLogin->bindUser( $winduid, $openid, $weibotype, $nickname );
  8.     }
  9. }
复制代码

  3.修正第三方登录接口,增加接受unionid参数,兼容之前的老用户,就是把之前没存unionid的老用户,拿到unionid存入表中

     文件名thirdLogin.php

    参数接收,增加unionid
  1. InitGP( array( 'openid', 'weibotype', 'unionId' ) , 'P' );
复制代码

   
    微信登录的兼容老用户
  1. // 兼容微信登录
  2. if( !empty($unionId) && $weibotype == 'wechat') {
  3.     $uidWechat = $thirdLogin->fetchWechatUser($unionId, $weibotype);
  4.     if( !empty($openid) ) {
  5.         if( is_numeric($uid) && $uid > 0 && empty($uidWechat)) {
  6.             $db->update( "UPDATE `pw_third_bind` set unionid=".S::sqlEscape($unionId)." where uid=" . S::sqlEscape($uid) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ) );
  7.         }
  8.         if(is_numeric($uid) && $uid > 0 && is_numeric($uidWechat) && $uidWechat > 0 && $uid != $uidWechat) {
  9.             $db->update( "UPDATE `pw_third_bind` set unionid=".S::sqlEscape($unionId)." where uid=" . S::sqlEscape($uid) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ) );
  10.             $db->update( "UPDATE `pw_third_bind` set unionid='' where uid=" . S::sqlEscape($uidWechat) . "and weibotype=" . strtolower( S::sqlEscape($weibotype) ));
  11.         }
  12.     }
  13.     $uid = $thirdLogin->fetchWechatUser($unionId, $weibotype);
  14. }
复制代码

4.第三方绑定接口,增加unionid的判断和绑定
    文件名changeThirdPlatform.php

  增加unionid参数接收
  1. S::gp( array( 'uid', 'weibotype', 'openid', 'unionid', 'nickname', 'operation' ) );
复制代码
  判断是否绑定兼容unionid
  1. // 绑定
  2. // 判断第三方账号是否绑定了本地账号
  3. if( $weibotype == 'wechat' && !empty($unionid) ) {
  4.     $uid = $thirdLogin->fetchWechatUser( $unionid, $weibotype );
  5. }else {
  6.     $uid = $thirdLogin->fetchUser( $openid, $weibotype );
  7. }
复制代码
    更新数据兼容unionid
  1. // 更新数据
  2. if( $weibotype == 'wechat' && !empty($unionid) ) {
  3.     $thirdLogin->bindWechatUser( $winduid, $openid, $unionid, $weibotype, $nickname );
  4. }else {
  5.     $thirdLogin->bindUser( $winduid, $openid, $weibotype, $nickname );
  6. }
复制代码







clientapi.rar

154.47 KB, 下载次数: 316

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
啦啦啦啦
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋|千帆移动开放平台  

GMT+8, 2024-12-23 09:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表