public function setApiSignature() { $this->timestamp = time(); $pathInfo = Yii::app()->request->getUrl(); $this->request_url = Yii::app()->request->getHostInfo() . $pathInfo; $ticket = WeixinApi::getJSApiTk(); $str = sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s", $ticket, $this->nonceStr, $this->timestamp, $this->request_url); $this->signature = sha1($str); }
/** * 检测微信用户是否在这个广告主的账户下 * @param $openID 用户的微信原始ID * @return void */ static function checkUser($openID, $aUser = array()) { if (empty($openID)) { $openID = $aUser['openid']; $_aUser = WeixinApi::getUserInfo($openID); $aUser['subscribe'] = $_aUser['subscribe']; } else { $aUser = WeixinApi::getUserInfo($openID); } //用 unionid取数据,和微信登录统一用户 $unionID = $aUser['unionid']; $user = User::model()->findByAttributes(array('unionid' => $unionID)); if ($user) { if ($aUser['nickname'] !== '' && $user->NickName == $user->UserName && !User::checkUserName($aUser['nickname'])) { $user->UserName = $aUser['nickname']; } $user->NickName = $aUser['nickname']; $user->Icon = $aUser['headimgurl']; $user->IsFollow = $aUser['subscribe']; //微信登录的用户,这个字段为空 $user->Openid = $openID; if ($user->save()) { //更新redis CommonFunc::setRedis('user_' . $user->ID, 'userHeadUrl', $aUser['headimgurl']); CommonFunc::setRedis('user_' . $user->ID, 'userName', $user->UserName); return $user->ID; } else { Yii::log(__FILE__ . __LINE__ . 'insert fans error', 'error', 'system.api.weixin'); } } else { $model_user = new User(); if ($aUser['nickname'] === '') { $aUser['nickname'] = 'name_' . time(); } $model_user->Account = $aUser['nickname']; $model_user->NickName = $aUser['nickname']; $model_user->UserName = $aUser['nickname']; if (User::checkUserName($aUser['nickname'])) { $model_user->UserName = $aUser['nickname'] . '_' . time(); } $model_user->Openid = $openID; $model_user->Icon = $aUser['headimgurl']; $model_user->unionid = $aUser['unionid']; $model_user->CreateTime = date('Y-m-d H:i:s'); $model_user->Status = 0; $model_user->LastLoginTime = date('Y-m-d H:i:s'); $model_user->IsFollow = $aUser['subscribe']; if ($model_user->save()) { CommonFunc::setRedis('user_' . $model_user->ID, 'userHeadUrl', $aUser['headimgurl']); CommonFunc::setRedis('user_' . $model_user->ID, 'userName', $model_user->UserName); return $model_user->ID; } else { Yii::log(__FILE__ . __LINE__ . 'insert fans error', 'error', 'system.api.weixin'); } } Yii::app()->end(); }
public function actionResponse() { if (isset($_GET["code"])) { //response后 sessionid会被修改,这里重新赋值 session_id($_GET["state"]); $code = $_GET["code"]; $aUser = WeixinApi::getResonseUserInfo($code); CommonFunc::checkUser('', $aUser); //login //表示从微信登录,在 framework里判断这个变量不重新生成sessionid $_SESSION['from_wx'] = 1; $identity = new UserIdentity($aUser['openid'], ''); $identity->authenticate(); $user = Yii::app()->user; $user->login($identity, 3600 * 24 * 30); $this->redirect($_GET['bk']); } }
static function getJSApiTk() { $ticket = Yii::app()->cache->get('wx_jsapi_ticket'); if ($ticket) { $ticket = unserialize($ticket); return $ticket['ticket']; } $url = str_replace('[TOKEN]', WeixinApi::getAccessToken(), WX_GET_JSAPI_URL); $request = Yii::app()->curl->run($url); $aResponse = WeixinApi::parseResponse($request, __FILE__, __LINE__); $ticket = array('ticket' => $aResponse['ticket'], 'expire' => time() + $aResponse['expires_in']); Yii::app()->cache->set('wx_jsapi_ticket', serialize($ticket), $aResponse['expires_in']); return $ticket['ticket']; }
public function actionSetMenu() { $menu = ' { "button":[ { "name":"最新应用", "type":"click", "key":"APP_NEW_LIST" }, { "name":"进入网站", "type":"view", "url":"http://appgrub.com" }, { "type":"view", "name":"下载客户端", "url":"http://appgrub.com/client/down" }] } '; WeixinApi::setMenu($menu); }