private function doOpt($data) { switch ($data['opt']) { case 'activate_for_gzh': WxUserModel::onActivateForGZH($data['data']['openid']); break; default: Log::error('wx event async job: unknow event'); } }
private function processEvent($data) { switch ($data['event']) { case 'subscribe': $this->onSubscribe($data['openid'], $data['from']); break; default: Log::error('wx event async job: unknow event'); break; } }
private static function genCategoryId($categoryId) { $level1 = (int) ($categoryId / 1000000); $level2 = (int) ((int) ($categoryId / 1000) % 1000); $level3 = (int) ($categoryId % 1000); if ($level1 == 0) { // 增加一级分类 $sql = 'select max(category_id) as m from g_category'; $ret = DB::getDB('w')->rawQuery($sql); if ($ret === false) { return false; } if (empty($ret) || empty($ret[0]['m'])) { return 100000000; // 初始以100000000开始,虽然会少用9个,但会整齐好看一些 } $max = (int) $ret[0]['m']; if ((int) ($max / 1000000) == 999) { Log::fatal('category_id ' . $categoryId . ' level1 max = 999, out of limit!'); return false; } return ((int) ($max / 1000000) + 1) * 1000000; } else { if ($level2 == 0 && $level3 == 0) { // 增加二级分类 $sql = 'select max(category_id) as m from g_category where' . ' category_id >= ' . $level1 * 1000000 . ' and category_id < ' . ($level1 + 1) * 1000000; $ret = DB::getDB('w')->rawQuery($sql); if ($ret === false) { return false; } if (empty($ret) || empty($ret[0]['m'])) { return $level1 * 1000000 + 1000; } $maxLevel2 = (int) ((int) $ret[0]['m'] / 1000) % 1000; if ($maxLevel2 == 999) { Log::fatal('category_id ' . $categoryId . ' level2 max = 999, out of limit!'); return false; } return $level1 * 1000000 + ($maxLevel2 + 1) * 1000; } else { if ($level3 == 0) { // 增加三级分类 $sql = 'select max(category_id) as m from g_category where' . ' category_id >= ' . ($level1 * 1000000 + $level2 * 1000) . ' and category_id < ' . ($level1 * 1000000 + ($level2 + 1) * 1000); $ret = DB::getDB('w')->rawQuery($sql); if ($ret === false) { return false; } if (empty($ret) || empty($ret[0]['m'])) { return $level1 * 1000000 + $level2 * 1000 + 1; } $maxLevel3 = (int) $ret[0]['m'] % 1000; if ($maxLevel3 == 999) { Log::fatal('category_id ' . $categoryId . ' level3 max = 999, out of limit!'); return false; } return $level1 * 1000000 + $level2 * 1000 + $maxLevel3 + 1; } } } Log::error('error category_id(' . $categoryId . ') when generate category id'); return false; }
private function toWxLogin() { $openInfo = WxSDK::getOpenInfo('snsapi_base', WX_APP_ID, WX_APP_SECRET); if (empty($openInfo['openid'])) { // TODO 这里要显示的告诉用户 // header('Location: /TODO'); // exit(0); return; } $wxUserInfo = WxSDK::getUserInfo($openInfo['openid'], 'snsapi_base'); if (empty($wxUserInfo)) { // Log::warng('first get wxuinfo:' . $openInfo['openid'] . ' fail when autologin'); $wxUserInfo = WxSDK::getUserInfo($openInfo['openid'], 'snsapi_base'); if (empty($wxUserInfo)) { // Log::warng('second get wxuinfo:' . $openInfo['openid'] . ' fail when autologin'); // TODO 这里要显示的告诉用户 // header('Location: /TODO'); // exit(0); return; } } $ret = WxUserModel::findUserByOpenId($openInfo['openid']); if (!empty($ret)) { $this->doLoginInWx($openInfo['openid']); return; } else { // create one $from = WxUserModel::SUBSCRIBE_FROM_ALREADY; if ((int) $wxUserInfo['subscribe'] == 0) { $from = WxUserModel::SUBSCRIBE_FROM_UNSUBSCRIBE; } $ret = WxUserModel::newOne($wxUserInfo, $from); if ($ret === false) { // TODO 这里要显示的告诉用户 // header('Location: /TODO'); // exit(0); return; } $ret = $this->doLoginInWx($openInfo['openid']); if ($ret === false) { Log::error("create wx user fail! " . json_encode($wxUserInfo, JSON_UNESCAPED_UNICODE)); // TODO 这里要显示的告诉用户 // header('Location: /TODO'); // exit(0); } } }