예제 #1
0
 /**
  * 实现的init_ucuser钩子方法,对公众号粉丝进行初始化,在需要初始化粉丝信息的地方通过 hook('init_ucuser',$params); 调用
  * @params string $mp_id   公众号在系统中的唯一标识,member_public表的id,必填
  * @params string $weObj   公众号实例
  * @return void      hook函数木有返回值
  * 注意:
  */
 public function init_ucuser($params)
 {
     if ($params['mp_id'] && $params['weObj'] instanceof TPWechat) {
         //带有公众号在系统中唯一ID,存在公众号实例,例如weixincontroller中的被动响应
         $map['openid'] = get_openid();
         $map['mp_id'] = $params['mp_id'];
         $ucuser = D('Ucuser');
         $data = $ucuser->where($map)->find();
         if (!$data) {
             //公众号没有这个粉丝信息,就注册一个
             //先在Member表注册会员,使系统中uid统一,公众号粉丝在绑定手机后可登录网站
             $aUsername = $aNickname = $map['openid'];
             //substr(,20);          //以openid作为默认UcenterMember用户名和Member昵称
             $aPassword = UCenterMember()->create_rand();
             //随机密码,用户未通过公众号注册,就不可登录网站
             $email = $aUsername . '@mp_id' . $map['mp_id'] . '.com';
             //以openid@mpid123.com作为默认邮箱
             $mobile = arr2str(UCenterMember()->rand_mobile());
             //生成随机手机号已通过model校验,不实际使用,准确手机以微信绑定的为准
             $aUnType = 5;
             //微信公众号粉丝注册
             $aRole = 3;
             //默认公众号粉丝用户角色
             /* 注册用户 */
             $uid = UCenterMember()->register($aUsername, $aNickname, $aPassword, $email, $mobile, $aUnType);
             if (0 < $uid) {
                 //注册成功
                 initRoleUser($aRole, $uid);
                 //初始化角色用户
                 set_user_status($uid, 1);
                 //微信注册的用户状态直接设置为1
             } else {
                 //注册失败,显示错误信息
             }
             $uid = $ucuser->registerUser($uid, $map['mp_id'], $map['openid']);
             //用注册member获取的统一uid注册微信粉丝
             get_ucuser_uid($uid);
             //设置session中uid
         } else {
             get_ucuser_uid($data['uid']);
             //设置session中uid
         }
     } else {
         //不存在公众号实例或没显式传mp_id参数,例如分享到朋友圈的内容,访问参数中必须带有公众号在系统中唯一标识mp_id
         $umap['openid'] = get_openid();
         //只存在公众号信息的,在get_openid中通过oauth获取用户openid
         $umap['mp_id'] = I('mp_id');
         //从controller的访问请求中获取mp_id
         if (!empty($umap['mp_id'])) {
             $ucuser = D('Ucuser');
             $data = $ucuser->where($umap)->find();
             if (!$data) {
                 //公众号没有这个粉丝信息,就注册一个
                 //先在Member表注册会员,使系统中uid统一,公众号粉丝在绑定手机后可登录网站
                 $aUsername = $aNickname = $umap['openid'];
                 //以openid作为默认UcenterMember用户名和Member昵称
                 $aPassword = UCenterMember()->create_rand();
                 //随机密码,用户未通过公众号注册,就不可登录网站
                 $email = $aUsername . '@mp_id' . $umap['mp_id'] . 'com';
                 //以openid@mpid123.com作为默认邮箱
                 $mobile = arr2str(UCenterMember()->rand_mobile());
                 //生成随机手机号已通过model校验,不实际使用,准确手机以微信绑定的为准
                 $aUnType = 5;
                 //微信公众号粉丝注册
                 $aRole = 3;
                 //默认公众号粉丝用户角色
                 /* 注册用户 */
                 $uid = UCenterMember()->register($aUsername, $aNickname, $aPassword, $email, $mobile, $aUnType);
                 if (0 < $uid) {
                     //注册成功
                     initRoleUser($aRole, $uid);
                     //初始化角色用户
                     set_user_status($uid, 1);
                     //微信注册的用户状态直接设置为1
                 } else {
                     //注册失败,显示错误信息
                 }
                 $uid = $ucuser->registerUser($uid, $umap['mp_id'], $umap['openid']);
                 //用注册member获取的统一uid注册微信粉丝
                 get_ucuser_uid($uid);
                 //设置session中uid
             } else {
                 get_ucuser_uid($data['uid']);
                 //设置session中uid
             }
         } else {
             //没有公众号信息,未能初始化粉丝
         }
     }
 }
예제 #2
0
파일: weixin.php 프로젝트: fishling/chatPro
function get_ucuser_uid($uid = 0)
{
    $mp_id = get_mpid();
    if ($uid !== NULL) {
        session('uid_' . $mp_id, $uid);
    } elseif (!empty($_REQUEST['uid'])) {
        session('uid_' . $mp_id, $_REQUEST['uid']);
    }
    //以上是带uid参数调用函数时设置session中的uid
    $uid = session('uid_' . $mp_id);
    $isWeixinBrowser = isWeixinBrowser();
    if (!$isWeixinBrowser) {
        //非微信浏览器返回false,调用此函数必须对false结果进行判断,非微信浏览器不可访问调用的controller
        return false;
    }
    //下面这段应该逻辑没问题,如果公众号配置信息错误或者没有snsapi_base作用域的获取信息权限可能会出现死循环,注释掉以下if可治愈
    if ($uid <= 0 && $isWeixinBrowser) {
        $map['openid'] = get_openid();
        $map['mp_id'] = $mp_id;
        $ucuser = D('Ucuser');
        $data = $ucuser->where($map)->find();
        if (!$data) {
            //公众号没有这个粉丝信息,就注册一个
            //先在Member表注册会员,使系统中uid统一,公众号粉丝在绑定手机后可登录网站
            //先在Member表注册会员,使系统中uid统一,公众号粉丝在绑定手机后可登录网站
            $aUsername = $aNickname = $map['openid'];
            //以openid作为默认UcenterMember用户名和Member昵称
            $aPassword = UCenterMember()->create_rand();
            //随机密码,用户未通过公众号注册,就不可登录网站
            $email = $aUsername . '@mp_id' . $map['mp_id'] . '.com';
            //以openid@mpid123.com作为默认邮箱
            $mobile = arr2str(UCenterMember()->rand_mobile());
            //生成随机手机号以通过model校验,不实际使用,准确手机以微信绑定的为准
            $aUnType = 5;
            //微信公众号粉丝注册
            $aRole = 3;
            //默认公众号粉丝用户角色
            /* 注册用户 */
            $uid = UCenterMember()->register($aUsername, $aNickname, $aPassword, $email, $mobile, $aUnType);
            if (0 < $uid) {
                //注册成功
                initRoleUser($aRole, $uid);
                //初始化角色用户
                set_user_status($uid, 1);
                //微信注册的用户状态直接设置为1
            } else {
                //注册失败,显示错误信息
            }
            $uid = $ucuser->registerUser($uid, $map['mp_id'], $map['openid']);
            //用注册member获取的统一uid注册微信粉丝
            session('uid_' . $mp_id, $uid);
        } else {
            $uid = $data['uid'];
            session('uid_' . $mp_id, $uid);
        }
    }
    if (empty($uid)) {
        return -1;
    }
    return $uid;
}