getUserInfo() публичный Метод

获取关注者详细信息
public getUserInfo ( string $openid, string $lang = 'zh_CN' ) : array
$openid string
$lang string 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
Результат array {subscribe,openid,nickname,sex,city,province,country,language,headimgurl,subscribe_time,[unionid]} 注意:unionid字段 只有在用户将公众号绑定到微信开放平台账号后,才会出现。建议调用前用isset()检测一下
Пример #1
0
 public function wxoauth()
 {
     $scope = 'snsapi_base';
     $code = isset($_GET['code']) ? $_GET['code'] : '';
     $token_time = isset($_SESSION['token_time']) ? $_SESSION['token_time'] : 0;
     if (!$code && isset($_SESSION['open_id']) && isset($_SESSION['user_token']) && $token_time > time() - 3600) {
         if (!$this->wxuser) {
             $this->wxuser = $_SESSION['wxuser'];
         }
         $this->open_id = $_SESSION['open_id'];
         return $this->open_id;
     } else {
         $options = array('token' => $this->options["token"], 'appid' => $this->options["appid"], 'appsecret' => $this->options["appsecret"]);
         $we_obj = new Wechat($options);
         if ($code) {
             $json = $we_obj->getOauthAccessToken();
             if (!$json) {
                 unset($_SESSION['wx_redirect']);
                 die('获取用户授权失败,请重新确认');
             }
             $_SESSION['open_id'] = $this->open_id = $json["openid"];
             $access_token = $json['access_token'];
             $_SESSION['user_token'] = $access_token;
             $_SESSION['token_time'] = time();
             $userinfo = $we_obj->getUserInfo($this->open_id);
             if ($userinfo && !empty($userinfo['nickname'])) {
                 $this->wxuser = array('open_id' => $this->open_id, 'nickname' => $userinfo['nickname'], 'sex' => intval($userinfo['sex']), 'location' => $userinfo['province'] . '-' . $userinfo['city'], 'avatar' => $userinfo['headimgurl']);
             } elseif (strstr($json['scope'], 'snsapi_userinfo') !== false) {
                 $userinfo = $we_obj->getOauthUserinfo($access_token, $this->open_id);
                 if ($userinfo && !empty($userinfo['nickname'])) {
                     $this->wxuser = array('open_id' => $this->open_id, 'nickname' => $userinfo['nickname'], 'sex' => intval($userinfo['sex']), 'location' => $userinfo['province'] . '-' . $userinfo['city'], 'avatar' => $userinfo['headimgurl']);
                 } else {
                     return $this->open_id;
                 }
             }
             if ($this->wxuser) {
                 $_SESSION['wxuser'] = $this->wxuser;
                 $_SESSION['open_id'] = $json["openid"];
                 unset($_SESSION['wx_redirect']);
                 return $this->open_id;
             }
             $scope = 'snsapi_userinfo';
         }
         if ($scope == 'snsapi_base') {
             $url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
             $_SESSION['wx_redirect'] = $url;
         } else {
             $url = $_SESSION['wx_redirect'];
         }
         if (!$url) {
             unset($_SESSION['wx_redirect']);
             die('获取用户授权失败');
         }
         $oauth_url = $we_obj->getOauthRedirect($url, "wxbase", $scope);
         header('Location: ' . $oauth_url);
     }
 }
Пример #2
0
 /**
  * 授权回调
  * @param string $code
  * @param string $data
  * @throws CException
  * @throws Exception
  */
 public function actionWechat($code = '', $data = '')
 {
     Yii::import('ext.wechat.*');
     //判断不同授权来源
     //code: 正常微信授权的参数
     //data: 群友代理授权json
     if (!empty($code)) {
         $wehcat = Yii::app()->params['wechat'];
         $wechat = new Wechat($wehcat['appid'], $wehcat['appsecret']);
         $accessToken = $wechat->getAccessToken($code);
         if (!empty($accessToken) && !empty($accessToken['openid'])) {
             $openid = $accessToken['openid'];
             $wechat = new Wechat($wehcat['appid'], $wehcat['appsecret'], $accessToken['access_token']);
             $data = $wechat->getUserInfo($openid);
         }
     } else {
         if (!empty($data)) {
             $data = json_decode(base64_decode($data), 1);
             if (!empty($data['openid'])) {
                 $openid = $data['openid'];
             }
         }
     }
     //都不存在时,创建一个默认帐号
     if (empty($openid)) {
         $openid = 'temp-' . md5(microtime());
         $data = array();
     }
     $user = UserService::instance()->save($openid, $data);
     //登录
     $identity = new UserIdentity($user);
     if ($identity->authenticate()) {
         Yii::app()->user->login($identity, 24 * 3600 * 30);
         $returnUrl = Yii::app()->user->returnUrl;
         $this->redirect(!empty($returnUrl) ? $returnUrl : Yii::app()->homeUrl);
     } else {
         exit('很抱歉,微信授权失败!');
     }
 }
Пример #3
0
 /**
  * 微信登录回调
  */
 public function wechatCallback()
 {
     require_once APP_DIR . "vendors/auth/wechat.php";
     $wechat = new \Wechat();
     $code = $this->input->get('code');
     if (!$code) {
         echo 'code error';
         return;
     }
     //授权之后的操作,默认是登录
     $auth_action = $this->input->cookie('auth_action');
     if (!$auth_action) {
         $auth_action = isset($_REQUEST['auth_action']) ? $_REQUEST['auth_action'] : '';
     }
     if ($auth_action) {
         //清楚此临时cookie
         $this->output->cookie(['auth_action' => ''], 0);
     } else {
         $auth_action = 'login';
     }
     //哪个app的操作
     $app = $this->input->cookie('app');
     if ($app) {
         //清楚此临时cookie
         $this->output->cookie(['app' => ''], 0);
     } else {
         $app = 'okay';
     }
     $data = $wechat->getAccessToken($code);
     if (!$data) {
         echo 'access token error';
         return;
     }
     $token = $data['access_token'];
     $openid = $data['openid'];
     $unionid = $data['unionid'];
     $account = $this->related_account->one($unionid);
     $isopenid = false;
     if (!$account) {
         $account = $this->related_account->one($openid);
         $isopenid = true;
     }
     if ($auth_action == 'login') {
         if ($account) {
             // 转移数据
             $this->transferData($account->uid);
             //如果是openid登录替换成unionid
             if ($isopenid) {
                 $this->related_account->update(['app_uid' => $unionid], ['app_uid' => $openid, 'uid' => $account->uid, 'app_id' => $this->config->logintype['wechat']]);
             }
             //查询用户
             $user = $this->user->one($account->uid);
             //执行同步登录(手机,网页,扩展)
             $logindata = $this->helper->user->getUserLoginInfo($user);
             $token = $this->helper->user->setUserLoginCookie($logindata);
             if ($app == 'okay') {
                 $this->model('passport')->login($account->uid, 'password');
                 //方片登录
             } else {
                 /*$info       = array('uid'     => $user->uid,      'mail'     => $user->mail, 
                                                         'nickname'=> $user->nickname, 'signature'=> $user->signature, 'avatar'=>$user->avatar_url);
                 
                 
                                     //过期时间
                                     $time       = 3600 * 24 * 90;
                                     $endtime    = time() + $time;
                 
                 
                                     //授权令牌
                                     $token      = $this->helper->auth->getToken(md5($token . time() . $user->uid . $endtime));
                                     $this->redis('w')->set($token, $info, $endtime);
                 
                 
                                     //数据包
                                     $data       = array('user'  => $info, 'token'  => $token, 'expire' => $endtime );
                                     $this->output->cookie(['token'=>$token], $endtime, '/', '.funp.in', false, true);*/
                 if ($app == 'wechat_website') {
                     $this->output->redirect(MOBILE_API . 'website.php');
                 }
             }
             $token = isset($token) ? $token : null;
             $this->output->view('passport/wechat', ['uid' => $account->uid]);
         } else {
             $userinfo = $wechat->getUserInfo($token, $openid);
             //判断nickname是否存在
             $userinfo['nickname'] = str_replace(' ', '_', trim($userinfo['nickname']));
             if ($this->user->isNicknameExist($userinfo['nickname'])) {
                 $userinfo['nickname'] = $userinfo['nickname'] . '_' . substr(md5(time()), 0, 2);
             }
             $data = ['with_openid' => 1, 'nickname' => trim($userinfo['nickname']), 'created' => time(), 'modified' => time(), 'login_ip' => ip2long($this->input->ip())];
             $uid = $this->user->insert($data);
             if ($uid) {
                 $this->user_config->insert(['uid' => $uid]);
                 // 添加默认标签
                 $this->tag->addDefaultTags($uid);
                 // 转移数据
                 $this->transferData($account->uid);
             }
             //头像放入队列获取
             $this->redis('queue')->lPush('queue:avatar:download', "{$uid}|{$userinfo['headimgurl']}");
             if ($uid) {
                 if ($this->related_account->insert(['uid' => $uid, 'app_uid' => $unionid, 'app_id' => $this->config->logintype['wechat'], 'access_token' => $token])) {
                     //查询用户
                     $user = $this->user->one($uid);
                     //执行同步登录(手机,网页,扩展)
                     $logindata = $this->helper->user->getUserLoginInfo($user);
                     $token = $this->helper->user->setUserLoginCookie($logindata);
                     if ($app == 'okay') {
                         $this->model('passport')->login($account->uid, 'password');
                         //方片登录
                     } else {
                         //查询用户
                         //$user       = $this->user->one($uid);
                         /*$info       = array('uid'     => $user->uid,      'mail'     => $user->mail, 
                                                                         'nickname'=> $user->nickname, 'signature'=> $user->signature, 'avatar'=>$user->avatar_url);
                         
                         
                                                     //过期时间
                                                     $time       = 3600 * 24 * 90;
                                                     $endtime    = time() + $time;
                         
                         
                                                     //授权令牌
                                                     $token      = $this->helper->auth->getToken(md5($token . time() . $user->uid . $endtime));
                                                     $this->redis('w')->set($token, $info, $endtime);
                         
                         
                                                     //数据包
                                                     $data       = array('user'  => $info, 'token'  => $token, 'expire' => $endtime );
                                                     $this->output->cookie(['token'=>$token], $endtime, '/', '.funp.in', false, true);*/
                         //执行同步登录(手机,网页,扩展)
                         //$logindata   = $this->helper->user->getUserLoginInfo($user);
                         //$token       = $this->helper->user->setUserLoginCookie($logindata);
                         if ($app == 'wechat_website') {
                             $this->output->redirect(MOBILE_API . 'website.php');
                         }
                     }
                     $token = isset($token) ? $token : null;
                     $this->output->view('passport/wechat', ['uid' => $uid]);
                 } else {
                     echo 'login error';
                 }
             } else {
                 echo 'login error';
             }
         }
     } else {
         if ($auth_action == 'bind') {
             //得到当前用户
             //$uid = $this->passport->getAuthenticatedUid();
             $userinfo = $this->currentLoginUser();
             $uid = $userinfo['uid'];
             //用户未登录
             if (!$uid) {
                 $this->output->view('passport/bind_failed', ['message' => "请您先登录", 'app' => 'wechat']);
                 exit;
             }
             //检测当前登录用户是否已经绑定了qq账号,如果绑定了则要求解绑
             $result = $this->related_account->select(['where' => ['uid' => $uid]]);
             if ($result && $result[0] && $result[0]->app_id == $this->config->logintype['wechat']) {
                 //已经绑定qq
                 if ($result[0]->app_uid == $openid || $result[0]->app_uid == $unionid) {
                     $this->output->view('passport/bind_failed', ['message' => "您已经绑定此微信账号,无需再次绑定", 'app' => 'wechat']);
                 } else {
                     $this->output->view('passport/bind_failed', ['message' => "您已经绑定其他微信账号,请先解绑,然后绑定新的微信账号", 'app' => 'wechat']);
                 }
                 exit;
             }
             //绑定微信账户
             if ($account) {
                 //如果此账户已经在数据库中存在关联,
                 $user = $this->user->one($account->uid);
                 //如果此微信账号已经绑定邮箱
                 if ($user->mail) {
                     $this->output->view('passport/bind_failed', ['message' => "此账户已经与另一账号绑定,请先解绑另一账户", 'app' => 'wechat']);
                     exit;
                 } else {
                     //将第三方关联到当前用户,
                     if ($this->related_account->update(['uid' => $uid, 'access_token' => $token], ['app_uid' => $unionid, 'uid' => $account->uid, 'app_id' => $this->config->logintype['wechat']])) {
                         //转移数据(贴纸,标签,图片,书签)到当前用户
                         $from = $account->uid;
                         $to = $uid;
                         $this->user->mergeUserData($from, $to);
                         $this->output->view('passport/bind_success', ['app' => 'wechat']);
                     } else {
                         $this->output->view('passport/bind_failed', ['message' => "绑定失败", 'app' => 'wechat']);
                     }
                 }
             } else {
                 if ($this->related_account->insert(['uid' => $uid, 'app_uid' => $unionid, 'app_id' => $this->config->logintype['wechat'], 'access_token' => $token])) {
                     //成功页面
                     $this->output->view('passport/bind_success', ['app' => 'wechat']);
                 } else {
                     $this->output->view('passport/bind_failed', ['message' => "绑定失败", 'app' => 'wechat']);
                     exit;
                 }
             }
         }
     }
 }
Пример #4
0
$type = $weObj->getRev()->getRevType();
$openid = $weObj->getRev()->getRevFrom();
_log1(json_encode(['type' => $type, 'openid' => $openid]));
switch ($type) {
    case Wechat::MSGTYPE_TEXT:
        $text = $weObj->getRev()->getRevContent();
        $weObj->transfer_customer_service()->reply();
        break;
    case Wechat::MSGTYPE_EVENT:
        $event = $weObj->getRev()->getRevEvent();
        _log1(json_encode(['event' => $event]));
        switch ($event['event']) {
            case Wechat::EVENT_SUBSCRIBE:
                $bind_url = $csc_url_base . '/dynamic/user_isbind_csc.php?openid=' . $openid . '&bcb=user_bind_check_csc&rand=' . rand();
                $weObj->text("您好!欢迎来到万国数据客户服务中心。\n\n" . "若您是万国数据的授权用户,您可以在绑定账号后体验我们为您带来的更多专属服务喔~\n" . "<a href=\"" . $bind_url . "\">点击这里绑定账号</a>\n\n" . "如有疑问,欢迎您直接留言。")->reply();
                $user = $weObj->getUserInfo($openid);
                _log_focus($openid, 'focus', $user);
                break;
            case Wechat::EVENT_UNSUBSCRIBE:
                _log_focus($openid, 'unfocus');
            case Wechat::EVENT_MENU_CLICK:
                $key = $event['key'];
                switch ($key) {
                    case 'wechat_csc':
                        $kf_list = $weObj->getCustomServiceOnlineKFlist();
                        $kf_count = count($kf_list);
                        if ($kf_count <= 0) {
                            $weObj->text('我们的客服都在紧张地忙碌中,暂时无法及时响应,请稍作等待。' . '您也可以致电万国数据400热线:<a href="tel:4000724366">4000-724-366</a>,' . '我们会有电话客服专员专门响应您的请求。')->reply();
                        } else {
                            $weObj->text('目前共有 ' . $kf_count . ' 位客服在线。' . '我们会以最快的速度给予响应')->reply();
                        }
Пример #5
0
 public function init($type = 'member')
 {
     $agent = $_SERVER['HTTP_USER_AGENT'];
     if (strpos($agent, "icroMessenger") && (!isset($_GET['uid']) && empty($_SESSION["uid"]) || isset($_GET['refresh']))) {
         import('Wechat', APP_PATH . 'Common/Wechat', '.class.php');
         $config = M("Wxconfig")->where(array("id" => "1"))->find();
         $options = array('token' => $config["token"], 'encodingaeskey' => $config["encodingaeskey"], 'appid' => $config["appid"], 'appsecret' => $config["appsecret"], 'partnerid' => $config["partnerid"], 'partnerkey' => $config["partnerkey"], 'paysignkey' => $config["paysignkey"]);
         $weObj = new Wechat($options);
         $info = $weObj->getOauthAccessToken();
         if (!$info) {
             $callback = 'http://' . $_SERVER['SERVER_NAME'] . U("App/Index/{$type}", $_GET);
             $url = $weObj->getOauthRedirect($callback, '', 'snsapi_base');
             header("Location: {$url}");
             exit;
         } else {
             $_SESSION['uid'] = $_POST['uid'] = $_GET['uid'] = $info['openid'];
         }
     }
     if (!empty($_SESSION["uid"]) && empty($_GET['uid'])) {
         $_GET['uid'] = $_SESSION["uid"];
     }
     if ($_GET['uid']) {
         $uid = $_SESSION["uid"] = $_GET['uid'];
         $usersresult = R("Api/Api/getuser", array($uid));
         if (strpos($agent, "icroMessenger") && strlen($uid) > 10) {
             if ($usersresult['wx_info'] == null || $usersresult['wx_info'] == false || $usersresult['wx_info'] == 'false' || $usersresult['wx_info'] == 'null') {
                 $wx_info = $weObj->getUserInfo($uid);
                 if ($wx_info['subscribe'] != 1) {
                     if ($type != 'index_info') {
                         exit('请先关注公众号!');
                     }
                 } else {
                     if (empty($usersresult)) {
                         $user = array();
                         $user["uid"] = $uid;
                         $usersresult['id'] = M("User")->add($user);
                     }
                     $user['id'] = $usersresult['id'];
                     $user['wx_info'] = json_encode($wx_info);
                     $user_id = M("User")->save($user);
                 }
             }
         }
         //更新我的可提现金额
         $where = array();
         $where["level_id"] = $usersresult['id'];
         $where["status"] = 2;
         $where["active_time"] = array('elt', date('Y-m-d H:i:s'));
         $result = M("Order_level")->where($where)->select();
         foreach ($result as $info) {
             $level_id = $info['level_id'];
             $price = $info['price'];
             M("User")->where(array('id' => $level_id))->setInc('price', $price);
             M("Order_level")->where(array('id' => $info['id']))->save(array('status' => 3));
             M("Order")->where(array('orderid' => $info['order_id']))->save(array('order_status' => 3));
         }
         //7天未确认的,自动收获
         $where = array();
         $where["order_status"] = 1;
         $where["pay_status"] = 1;
         $tixianinfo = array();
         $tixianinfo['shouhuo'] = 7;
         $tixianinfo['tixian'] = 7;
         $tixianinfo['jine'] = 50;
         if (file_exists('./Public/Conf/tixianinfo.php')) {
             require './Public/Conf/tixianinfo.php';
             $tixianinfo = json_decode($tixianinfo, true);
         }
         $date = strtotime("-{$tixianinfo['shouhuo']} days");
         $date = date('Y-m-d H:i:s', $date);
         $where["time"] = array('elt', $date);
         $result = M("Order")->where($where)->select();
         foreach ($result as $info) {
             $out_trade_no = $info['orderid'];
             $this->confirm_order_status($out_trade_no);
         }
         //分销保持资格
         $this->fenxiao_zige($usersresult);
     } else {
         $url = 'http://' . $_SERVER['SERVER_NAME'] . U('App/Member/login');
         header("Location: {$url}");
         exit;
     }
 }
Пример #6
0
 function getAllUserInfo()
 {
     echo "helo";
     ini_set('max_execution_time', '0');
     import('ORG.wechat');
     $options = array('appid' => 'wx35a55b1c419603dc', 'appsecret' => 'ce22a59f9459611c9c38d17721659b95');
     $weObj = new Wechat($options);
     $yidong3DB = M('yidong3');
     $yidong4DB = M('yidong4');
     for ($i = 11514; $i <= 27776; $i++) {
         $user = $yidong3DB->where(array('id' => $i))->find();
         $userinfo = $weObj->getUserInfo($user['open_id']);
         p($user['open_id']);
         $daochu['open_id'] = $userinfo['openid'];
         $daochu['unionid'] = $userinfo['unionid'];
         $daochu['nickname'] = $userinfo['nickname'];
         $daochu['subscribe_time'] = $userinfo['subscribe_time'];
         $yidong4DB->data($daochu)->add();
     }
     exit;
 }
Пример #7
0
                     $w->text($returntips)->reply();
                     //4.如果2的结果是没有,提示:xx请点击下方借车按钮进行借车
                 } else {
                     $content = "当前站点车辆不足";
                     $w->text($content)->reply();
                 }
             } else {
                 $content = "系统中无此站点信息";
                 $w->text($content)->reply();
             }
         } else {
             $w->text($systemError)->reply();
         }
     }
 } else {
     $userinfo = $w->getUserInfo($w->getRevFrom());
     $postUserinfoUrl = $apiUrl . "/postUserinfo." . $apiSuffix;
     $param = array('wechatId' => $w->getRevFrom(), 'wechatName' => $userinfo['nickname'], 'gender' => $userinfo['sex'], 'headImgUrl' => $userinfo['headimgurl'], 'createAt' => $w->getRevCtime());
     $postUserinfo = json_decode(http_post($postUserinfoUrl, $param));
     if ($postUserinfo->status == "0") {
         $getStationUrl = $apiUrl . "/getStation." . $apiSuffix . "?stationId=" . $w->getRevSceneId();
         $stationInfo = json_decode(http_get($getStationUrl));
         if ($stationInfo->status == "0") {
             if ($stationInfo->info->number > 0) {
                 $lendtips = "尊敬的用户" . $userinfo['nickname'] . ",请在3分钟内点击下方的借车按钮进行借车";
                 $w->text($lendtips)->reply();
             } else {
                 $content = "当前站点车辆不足";
                 $w->text($content)->reply();
             }
         } else {
Пример #8
0
<?php

/**
 * Created by PhpStorm.
 * User: run
 * Date: 2015/7/15
 * Time: 11:36
 */
include "wechat.class.php";
$options = array('token' => 'vonvon', 'encodingaeskey' => 'encodingaeskey', 'appid' => 'wx519f23f4a45e8c37', 'appsecret' => 'ea8f0b17b3a0882bf5fda7ed27758482');
$weObj = new Wechat($options);
$weObj->valid();
//明文或兼容模式可以在接口验证通过后注释此句,但加密模式一定不能注释,否则会验证失败
$openid = $weObj->getRev()->getRevFrom();
$token = $weObj->checkAuth();
$info = $weObj->getUserInfo($openid);
$type = $weObj->getRev()->getRevType();
switch ($type) {
    case Wechat::MSGTYPE_TEXT:
        $content = $weObj->getRev()->getRevContent();
        if (substr($content, 0, 6) == '姓名') {
            $name = substr($content, 6);
            $res = array("0" => array('Title' => $name . ', 你的生辰八字', 'Description' => 'Vonvon作为国际化的SNS社交媒体,从2015年1月起,在全世界已经拥有1亿以上的 用户。现在已在韩国,中国,台湾,泰国,越南,印尼,美国,巴西,西班牙等国家 开放。将来会拓展到更多的国家,并且会创作更多有趣的主题测试。', 'PicUrl' => 'http://cdn-cn-static-dr.vonvon.net/images/cn/recruit_main.jpg', 'Url' => 'http://cn.vonvon.net/'));
            $weObj->news($res)->reply();
        } else {
            $weObj->text("Your nickname is " . $info['nickname'] . "\nYour sex is " . $info['sex'] . "\nYour city is " . $info['city'] . "\nYour province is " . $info['province'] . "\n Your country is " . $info['country'] . "\nYour headimgurl is " . $info['headimgurl'] . "\nYour subscribe_time is " . date("Y-m-d H:i:s", $info['subscribe_time']) . "\nNow is " . date("Y-m-d H:i:s", time()))->reply();
            exit;
        }
        break;
    case Wechat::MSGTYPE_EVENT:
        $event = $weObj->getRev()->getRevEvent();