/** * 车险20免一, 分享 */ public function insuranceShareAction() { $user_agent = $this->request->getUserAgent(); $is_in_car_mate = strpos($user_agent, 'YN122') !== false; $location_url = $this->request->get('location_url', null, null); //不在车优惠环境并且存在跳转参数,则跳转 if (!$is_in_car_mate and $location_url) { $location_url = base64_decode($location_url); return $this->response->redirect($location_url); } $this->view->setVar('is_in_car_mate', $is_in_car_mate); $p_user_phone = $this->dispatcher->getParam('p_user_phone', null, '0'); $user_phone = $this->request->get('user_phone', null, null); $this->view->setVar('p_user_phone', $p_user_phone); $this->view->setVar('is_user', true); $p_user_id = null; if ($p_user_phone !== '0') { $p_user = User::getUserByPhone($p_user_phone); $p_user_id = $p_user['user_id']; } $wx_state = $this->request->get('state', null, false); $user_agent = $this->request->getUserAgent(); $is_wx = strpos($user_agent, 'MicroMessenger') !== false; $this->view->setVar('is_wx', $is_wx); $wx_userinfo_json = $this->cookies->get('wx_userinfo_json')->getValue('trim'); $wx_userinfo = json_decode($wx_userinfo_json, true); file_put_contents('wx_userinfo.log', '[' . microtime(true) . ']' . var_export($wx_userinfo_json, 1) . "\r\n", FILE_APPEND); //使用微信客户端访问,并且不是从授权页面跳转过来的(跳转过来都带state),重定向到授权页面 if ($is_wx and !$wx_state and !$wx_userinfo) { $auth_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->_app_id . '&redirect_uri=' . urlencode('http://ip.yn122.net:8092/insurance_share/' . $p_user_phone . '?lock_time=' . floor(microtime(true) * 100)) . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'; return $this->response->redirect($auth_url); } $this->view->setVar('wx_state', $wx_state); $wx_code = $this->request->get('code', null, null); $wx_openid = $this->request->get('wx_openid', null, null); $wx_unionid = $this->request->get('wx_unionid', null, null); $wx_token = null; $db = $this->db; if ($is_wx and $wx_state and !$user_phone) { if ($wx_code) { if (!$wx_userinfo) { $wx_token_json = file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->_app_id . '&secret=' . $this->_app_secret . '&code=' . $wx_code . '&grant_type=authorization_code'); $wx_token = json_decode($wx_token_json, true); $wx_userinfo_json = file_get_contents('https://api.weixin.qq.com/sns/userinfo?access_token=' . $wx_token['access_token'] . '&openid=' . $wx_token['openid'] . '&lang=zh_CN'); $wx_userinfo = json_decode($wx_userinfo_json, true); file_put_contents('wx_userinfo.log', '[pull_userinfo]' . var_export($wx_userinfo, 1) . "\r\n", FILE_APPEND); //如果获取用户信息失败,则重新获取code授权 if (empty($wx_userinfo) or !isset($wx_userinfo['openid'])) { file_put_contents('wx_userinfo.log', "[re_auth]\r\n", FILE_APPEND); $auth_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->_app_id . '&redirect_uri=' . urlencode('http://ip.yn122.net:8092/insurance_share/' . $p_user_phone . '?lock_time=' . floor(microtime(true) * 100)) . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'; return $this->response->redirect($auth_url); } $this->cookies->set('wx_userinfo_json', $wx_userinfo_json); } //保存微信用户信息 $get_wx_user_sql = 'select top 1 id from WX_USER where openid = :openid'; $get_wx_user_bind = array('openid' => $wx_userinfo['openid']); $wx_user_result = $db->query($get_wx_user_sql, $get_wx_user_bind); $wx_user_result->setFetchMode(Db::FETCH_ASSOC); $wx_user = $wx_user_result->fetch(); $wx_user_id = !empty($wx_user) ? $wx_user['id'] : null; //没有此微信用户记录则添加 if (!$wx_user_id) { $insert_wx_user_sql = 'insert into WX_USER (openid, nickname, sex, province, city, country, headimgurl,privilege, unionid) values (:openid, :nickname, :sex, :province, :city, :country, :headimgurl, :privilege, :unionid)'; $insert_wx_user_bind = array('openid' => $wx_userinfo['openid'], 'nickname' => base64_encode($wx_userinfo['nickname']), 'sex' => $wx_userinfo['sex'], 'province' => $wx_userinfo['province'], 'city' => $wx_userinfo['city'], 'country' => $wx_userinfo['country'], 'headimgurl' => $wx_userinfo['headimgurl'], 'privilege' => json_encode($wx_userinfo['privilege']), 'unionid' => isset($wx_userinfo['unionid']) ? $wx_userinfo['unionid'] : null); $db->execute($insert_wx_user_sql, $insert_wx_user_bind); $wx_user_id = $db->lastInsertId(); } $get_view_sql = 'select top 1 id from Hui_ActivityShareView where wx_user_id = :wx_user_id and p_user_id = :p_user_id and aid = :aid'; $get_view_bind = array('wx_user_id' => $wx_user_id, 'p_user_id' => $p_user_id, 'aid' => 228); $view_result = $db->query($get_view_sql, $get_view_bind); $view_result->setFetchMode(Db::FETCH_ASSOC); $view_record = $view_result->fetch(); if ($wx_user_id and empty($view_record)) { //添加微信用户访问记录(本次活动) $insert_view_sql = 'insert into Hui_ActivityShareView (p_user_id, wx_user_id, aid) values (:p_user_id, :wx_user_id, :aid)'; $insert_view_bind = array('p_user_id' => $p_user_id, 'wx_user_id' => $wx_user_id, 'aid' => 228); $insert_view_success = $db->execute($insert_view_sql, $insert_view_bind); } } $this->view->setVar('wx_openid', $wx_token['openid']); } $bind_user = null; if ($wx_userinfo) { $bind_user_list = User::getUserList(array('wx_openid' => isset($wx_userinfo['openid']) ? $wx_userinfo['openid'] : 'cyh')); if (!empty($bind_user_list)) { $bind_user = $bind_user_list[0]; } } if (!$user_phone and !$bind_user) { //查找上家分享码 $query_sql = 'select invitation_code from ActivityUser where userid = :user_id and aid = :aid'; $query_bind = array('user_id' => $p_user_id, 'aid' => 228); $query_result = $db->query($query_sql, $query_bind); $query_result->setFetchMode(Db::FETCH_ASSOC); $involved_p_user = $query_result->fetch(); $this->view->setVar('invitation_code', !empty($involved_p_user) ? $involved_p_user['invitation_code'] : ''); return; } $user = !empty($bind_user) ? $bind_user : User::getUserByPhone($user_phone); //未注册的用户 if (empty($user)) { $this->view->setVar('is_user', false); $client_type = null; if (strpos($user_agent, 'iPhone') !== false) { $client_type = 'iPhone'; } elseif (strpos($user_agent, 'iPod') !== false) { $client_type = 'iPod'; } elseif (strpos($user_agent, 'iPad') !== false) { $client_type = 'iPad'; } elseif (strpos($user_agent, 'Android') !== false) { $client_type = 'Android'; } $register_result = file_get_contents('http://192.168.3.31/vehIllegalQuery/index.php?mod=Member&act=RegisterSave&PWD=' . $user_phone . '&PHONE=' . $user_phone . '&clientType=' . $client_type); $user = User::getUserByPhone($user_phone); $this->view->setVar('car_mate_user_phone', $user_phone); $this->view->setVar('car_mate_pwd', $user_phone); } $this->view->setVar('user_id', $user['user_id']); //如果用户没绑定,则绑定(微信客户端访问页面时) if ($is_wx and !$bind_user) { $bind_user_sql = 'update IAM_USER set weixintoken = :wx_openid, wx_openid = :wx_openid where userid = :user_id'; $bind_user_bind = array('wx_openid' => $wx_userinfo['openid'], 'user_id' => $user['user_id']); $bind_user_success = $db->execute($bind_user_sql, $bind_user_bind); } $query_sql = 'select invitation_code from ActivityUser where userid = :user_id and aid = :aid'; $query_bind = array('user_id' => $user['user_id'], 'aid' => 228); $query_result = $db->query($query_sql, $query_bind); $query_result->setFetchMode(Db::FETCH_ASSOC); $involved_user = $query_result->fetch(); $is_already = !empty($involved_user); $this->view->setVar('is_already', $is_already); if ($is_already) { //在微信客户端访问则进入过此页面的微信用户信息 if ($is_wx) { $get_view_sql = <<<SQL \t\t\t\tselect u.nickname, u.headimgurl, convert(varchar(20), v.create_date, 20) as create_date from Hui_ActivityShareView v \t\t\t\tleft join WX_USER u on u.id = v.wx_user_id \t\t\t\twhere v.wx_user_id is not null and v.p_user_id = :p_user_id and v.aid = :aid SQL; $get_view_bind = array('p_user_id' => $user['user_id'], 'aid' => 228); $record_result = $db->query($get_view_sql, $get_view_bind); $record_result->setFetchMode(Db::FETCH_ASSOC); $record_list = $record_result->fetchAll(); $this->view->setVar('view_record_list', $record_list); } if ($p_user_id) { $this->flashSession->success('您也获得了邀请码哦!<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们'); } else { $this->flashSession->success('您已成功参加活动<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!<br/>成功邀请<b style="color:orange">20</b>个好友购买保险,您的车险就可以免单啦!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们'); } $this->view->setVar('invitation_code', $involved_user['invitation_code']); $this->view->setVar('p_user_phone', $user['phone']); return; } $invitation_code = strtoupper(str_pad(dechex($user['id']), 5, '0', STR_PAD_LEFT)); $insert_au_sql = 'insert into ActivityUser(userid, aid, p_user_id, invitation_code) values (:user_id, :aid, :p_user_id, :invitation_code)'; $insert_au_bind = array('user_id' => $user['user_id'], 'aid' => 228, 'p_user_id' => $p_user_id, 'invitation_code' => $invitation_code); $insert_au_success = $db->execute($insert_au_sql, $insert_au_bind); if ($p_user_id) { $this->flashSession->success('您也获得了邀请码哦!<br/> 可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们'); } else { $this->flashSession->success('您已成功参加活动<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!<br/>成功邀请<b style="color:orange">20</b>个好友购买保险,您的车险就可以免单啦!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们'); } $this->view->setVar('invitation_code', $invitation_code); $this->view->setVar('p_user_phone', $user['phone']); $this->view->setVar('is_success', true); }
/** * 处理微信用户绑定 */ private function _doMicroMessengerBind($user_phone, $openid, $source = 'cm') { $user = User::getUserByPhone($user_phone); if (empty($user)) { $user_agent = $this->request->getUserAgent(); $this->view->setVar('is_user', false); $client_type = null; if (strpos($user_agent, 'iPhone') !== false) { $client_type = 'iPhone'; } elseif (strpos($user_agent, 'iPod') !== false) { $client_type = 'iPod'; } elseif (strpos($user_agent, 'iPad') !== false) { $client_type = 'iPad'; } elseif (strpos($user_agent, 'Android') !== false) { $client_type = 'Android'; } $register_result = file_get_contents('http://192.168.3.31/vehIllegalQuery/index.php?mod=Member&act=RegisterSave&PWD=' . $user_phone . '&PHONE=' . $user_phone . '&clientType=' . $client_type); $user = User::getUserByPhone($user_phone); $this->view->setVars(array('car_mate_user_phone' => $user_phone, 'car_mate_pwd' => $user_phone)); } $bind_success = User::wxBindUser($user['user_id'], $openid, $source); $this->view->setVar('bind_success', $bind_success); $this->view->setVar('user_id', $user['user_id']); }