Beispiel #1
0
 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');
     }
 }
Beispiel #2
0
 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;
     }
 }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 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);
         }
     }
 }