source: pro-violet-viettel/www/deploy/api/platform/modules/user/actions/actions.class.php @ 784

Last change on this file since 784 was 784, checked in by dungnv, 10 years ago
File size: 19.1 KB
Line 
1<?php
2
3class userActions extends sfActions
4{
5  const TOKENPW = 'violet';
6 
7  public function executeTest() {
8    var_dump(1);
9    return sfView::NONE;
10  }
11
12  private function getUserField($fieldName, $value, $currentId = null) {
13    $c = new Criteria();
14    $c->add($fieldName, $value);
15    if ($currentId) $c->add(TbluserPeer::US_ID, $currentId, Criteria::NOT_EQUAL);
16    return TbluserPeer::doSelectOne($c);
17  }
18
19  private function validateData($name, $email, $phone, &$error, $checkfullname = true) {
20         $nameValid = $checkfullname ? ($name != null && !myUtility::validate('sfFilterValidator', $name, $error)) ||
21                 ($name != null && !myUtility::validate('sfFullnameValidator', $name, $error)) : TRUE;
22    return
23    $nameValid  ||  ($email != null && !myUtility::validate('sfEmailValidator', $email, $error)) ||
24    ($phone != null && !myUtility::validate('sfPhoneValidator', $phone, $error));
25  }
26
27  private function getUserInfo($tbluser) {
28        $fullname = '';
29        if ($tbluser->getUsStatus()<10) {
30      if (null==$tbluser->getUsLastname() && null==$tbluser->getUsFirstname())
31                  $fullname = '';       
32      else
33        $fullname = $tbluser->getUsLastname().' '.$tbluser->getUsFirstname();
34    } else {
35        $fullname = 'Đang bị khóa';
36    }
37
38    $result  = 'id='.$tbluser->getUsId();
39    $result .= '&username='.$tbluser->getUsUsername();
40    $result .= '&fullname='.$fullname;
41    $result .= '&gender='.($tbluser->getUsSex()==1? 'male': 'female');
42    $result .= '&email='.$tbluser->getUsEmail();
43    $result .= '&phone='.$tbluser->getUSPhone();
44    $result .= '&school='.$tbluser->getUsSchool();
45    $result .= '&province='.$tbluser->getUsProvince();
46    $result .= '&money='.$tbluser->getUsMoney();
47    return $result;
48  }
49
50  private function getPEncrypted($tbluser) {
51    $result  = 'pencrypted='.$tbluser->getUsPassword();
52    return $result;
53  }
54
55  private function getLicense($tbluser) {
56    $productId = $this->getRequestParameter('product');
57    $version = $this->getRequestParameter('version');
58    if ($productId == null) return;
59
60    $c = new Criteria();
61    $c->add(TblprolicensePeer::LI_TYPE, 1);
62    $c->add(TblprolicensePeer::LI_CUSTOMER, $tbluser->getUsId());
63    $c->add(TblprolicensePeer::LI_PRODUCT, $productId);
64    $c->add(TblprolicensePeer::LI_VERSION, $version, Criteria::GREATER_EQUAL);
65    $c->add(TblprolicensePeer::LI_EXPIREDATE, date('Y-m-d H:i:s'), Criteria::GREATER_EQUAL);
66    $license = TblprolicensePeer::doSelectOne($c);
67    $userdetail = TblblogcheckinfoPeer::retrieveByPk($tbluser->getUsId());
68    if ($license == null && $userdetail != null) {
69      $c = new Criteria();
70      $c->add(TblprolicensePeer::LI_TYPE, 2);
71      $c->add(TblprolicensePeer::LI_CUSTOMER, $userdetail->getCiSchool());
72      $c->add(TblprolicensePeer::LI_PRODUCT, $productId);
73      $c->add(TblprolicensePeer::LI_VERSION, $version, Criteria::GREATER_EQUAL);
74      $c->add(TblprolicensePeer::LI_EXPIREDATE, date('Y-m-d H:i:s'), Criteria::GREATER_EQUAL);
75      $license = TblprolicensePeer::doSelectOne($c);
76    }
77    return $license;
78  }
79
80  public function executeLogin() {
81    $src = $this->getRequestParameter('src');
82    $token = $this->getRequestParameter('token');
83    $account = $this->getRequestParameter('username');
84    $password = $this->getRequestParameter('password');         
85
86    if ($account == null || $password == null) return $this->renderText('status=1&errMsg=Not enough data');
87    if ($src == null || $token != md5($account.self::TOKENPW)) return $this->renderText('status=10');
88
89    $tbluser = $this->getUserField(TbluserPeer::US_USERNAME, $account);
90
91    if (!$tbluser) $tbluser = $this->getUserField(TbluserPeer::US_EMAIL, $account);
92    if (!$tbluser) $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $account);
93    if (!$tbluser) return $this->renderText('status=2&errMsg=User not found');
94    if ($tbluser->getUsPassword() != md5($password)) return $this->renderText('status=3&errMsg=Incorrect password');
95
96    $loginResult = $this->getUserInfo($tbluser);
97    if ($tbluser->getUsStatus() == 0) return $this->renderText($loginResult.'&status=4&errMsg=Account is not activated');
98   
99        if ($license = $this->getLicense($tbluser)) {
100      $loginResult .= '&level='.$license->getLiLevel();
101      $ltype = $license->getLiType();
102      $cid = $license->getLiCustomer();
103      $customer = $ltype == 1? $tbluser->getUsFullname(): TblblogschoolsPeer::retrieveByPk($cid)->getScName();
104      $loginResult .= '&licType='.$ltype;
105      $loginResult .= '&licCustomer='.$customer;
106      $loginResult .= '&licCreate='.$license->getLiCreatedate('d/m/Y');
107      $loginResult .= '&licExpire='.$license->getLiExpiredate('d/m/Y');
108    }
109    else
110                $loginResult .= '&level=0';
111
112    $loginResult .= '&status=0';
113
114    /*try {
115      $this->getUser()->signIn($tbluser);
116    } catch (Exception $e) {
117      return $this->renderText('&status=5&errMsg='.$e->getMessage());
118    }*/
119    $ip = myUtility::getRealIpAddr();
120    myUtility::log("$ip login from $src ($account)", 'apiuser.log');
121    return $this->renderText($loginResult);
122  }
123
124  public function executeLogout() {
125    $this->getUser()->signOut();
126    return sfView::NONE;
127  }
128
129  /*public function executeGetinfo() {
130    $src = $this->getRequestParameter('src');
131    $us_id = $this->getRequestParameter('us_id');
132    $uname = $this->getRequestParameter('username');
133    $email = $this->getRequestParameter('email');
134    $phone = $this->getRequestParameter('phone');
135    $token = $this->getRequestParameter('token');
136    if ($src == null) return sfView::NONE;
137
138    if ($us_id && $token==md5($us_id.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_ID, $us_id);
139    if ($uname && $token==md5($uname.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_USERNAME, $uname);
140    if ($email && $token==md5($email.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_EMAIL, $email);
141    if ($phone && $token==md5($phone.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
142
143    if ($tbluser) $result = $this->getUserInfo($tbluser);
144    else return sfView::NONE;
145
146    $ip = myUtility::getRealIpAddr();
147    myUtility::log("$ip get info from $src".($tbluser? ' ('.$tbluser->getUsUsername().')': ' failed'), 'apiuser.log');
148    return $this->renderText($result);
149  }*/
150
151  public function executeGetinfo() {
152    $src = $this->getRequestParameter('src');
153    $us_id = $this->getRequestParameter('us_id');
154    $uname = $this->getRequestParameter('username');
155    $email = $this->getRequestParameter('email');
156    $phone = $this->getRequestParameter('phone');
157    $token = $this->getRequestParameter('token');
158
159        $passwd_only = $this->getRequestParameter('ponly');
160
161    if ($src == null) return sfView::NONE;
162
163    if ($us_id && $token==md5($us_id.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_ID, $us_id);
164    if ($uname && $token==md5($uname.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_USERNAME, $uname);
165    if ($email && $token==md5($email.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_EMAIL, $email);
166    if ($phone && $token==md5($phone.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
167
168    if ($tbluser)
169                $result = !$passwd_only ? $this->getUserInfo($tbluser) : $this->getPEncrypted($tbluser);
170    else return sfView::NONE;
171
172    $ip = myUtility::getRealIpAddr();
173    myUtility::log("$ip get info from $src".($tbluser? ' ('.$tbluser->getUsUsername().')': ' failed'), 'apiuser.log');
174    return $this->renderText($result);
175  }
176
177  public function executeUpdate() {
178    $src = $this->getRequestParameter('src');
179    $us_id = $this->getRequestParameter('us_id');
180    $username = $this->getRequestParameter('username');
181    $password = $this->getRequestParameter('password');
182    $fullname = $this->getRequestParameter('fullname');
183    $gender = $this->getRequestParameter('gender');
184    $email = $this->getRequestParameter('email');
185    $phone = $this->getRequestParameter('phone');
186    $school = $this->getRequestParameter('school');
187    $province = $this->getRequestParameter('province');
188    $token = $this->getRequestParameter('token');
189    $sendmail = $this->getRequestParameter('sendmail');
190    $oldpass = $this->getRequestParameter('oldpass');
191
192    if ($src == null) return $this->renderText('status=10');
193    //if ($this->validateData($fullname, $email, $phone, $error, false)) return $this->renderText('status=7&errMsg='.$error);
194       
195        if ($us_id == null) {     
196      if ($token != md5($username.self::TOKENPW)) return $this->renderText('status=10');
197      if (!$username || !$password /*|| !$fullname*/) return $this->renderText('status=1&errMsg=Not enough data');
198      if ($this->getUserField(TbluserPeer::US_USERNAME, $username)) return $this->renderText('status=2&errMsg=Username has existed');
199      if ($this->getUserField(TbluserPeer::US_EMAIL, $email)) return $this->renderText('status=3&errMsg=Email has existed');
200      if ($this->getUserField(TbluserPeer::US_PHONE, $phone)) return $this->renderText('status=4&errMsg=Phone number has existed');
201     
202          $tbluser = new Tbluser();
203          $tbluser->setUsRegisterdate(date('Y-m-d H:i:s'));
204      $tbluser->setUsScore(sfConfig::get('app_user_start_point'));       
205
206    } else {     
207      if ($token != md5($us_id.self::TOKENPW)) return $this->renderText('status=10');
208      if ($username != null && $this->getUserField(TbluserPeer::US_USERNAME, $username, $us_id)) return $this->renderText('status=2&errMsg=Username has existed');
209      if ($email != null && $this->getUserField(TbluserPeer::US_EMAIL, $email, $us_id)) return $this->renderText('status=3&errMsg=Email has existed');
210      if ($phone != null && $this->getUserField(TbluserPeer::US_PHONE, $phone, $us_id)) return $this->renderText('status=4&errMsg=Phone number has existed');
211
212      $tbluser = TbluserPeer::retrieveByPK($us_id);
213      if ($tbluser == null) return $this->renderText('status=5&errMsg=User not found');   
214      if (($username != null || $password != null) && md5($oldpass) != $tbluser->getUsPassword() && $src != 'SBG') return $this->renderText('status=6&errMsg=Incorrect old password');
215          if ($oldpass != null && (md5($oldpass) != $tbluser->getUsPassword()) || $src != 'SBG') return $this->renderText('status=6&errMsg=Incorrect old password');
216      if ($email != null && $email != $tbluser->getUsEmail()) $tbluser->setEmailConfirm(0);
217      if ($phone != null && $phone != $tbluser->getUsPhone()) $tbluser->setMobileConfirm(0);
218    }
219
220    if ($username != null) $tbluser->setUsUsername($username);
221    if ($password != null) $tbluser->setUsPassword(md5($password));
222    if ($fullname != null) $tbluser->setUsFullname($fullname);
223    if ($gender != null) $tbluser->setUsSex($gender=='male'? 1: 2);
224    if ($email != null) $tbluser->setUsEmail($email);
225    if ($phone != null) $tbluser->setUsPhone($phone);
226    if ($school != null) $tbluser->setUsSchool($school);
227    if ($province != null) $tbluser->setUsProvince($province);
228
229        $tbluser->save();
230
231        if ($sendmail == 'true') userMessage::sendConfirmEmail($tbluser, $password);
232    $ip = myUtility::getRealIpAddr();
233    $act = ($us_id == null? 'create': 'update');
234    myUtility::log("$ip $act from $src".($tbluser? ' ('.$tbluser->getUsUsername().')': ' failed'), 'apiuser.log');
235    return $this->renderText('status=0&id='.$tbluser->getUsId());
236  }
237
238  public function executeForgotpassword() {
239    $src = $this->getRequestParameter('src');
240    $email = $this->getRequestParameter('email');
241    $token = $this->getRequestParameter('token');
242    if ($src != null && $email != null && $token == md5($email.self::TOKENPW)) {
243      $c = new Criteria();
244      $c->add(TbluserPeer::US_EMAIL, trim($email));
245      $tbluser = TbluserPeer::doSelectOne($c);
246      if ($tbluser != null) {
247        $res = userMessage::sendForgotPassEmail($tbluser);
248        $ip = myUtility::getRealIpAddr();
249        $acc = $tbluser->getUsUsername();
250        myUtility::log("$ip from $src get password ($acc)".($res?'':' failed'), 'apiuser.log');
251        return $this->renderText('status=0');
252      }
253      return $this->renderText('status=1&errMsg=Email not found');
254    }
255    return $this->renderText('status=10');
256  }
257
258  public function executeGetonlineuser() {
259    return sfView::NONE;
260  }
261
262  public function executeGetprice() {
263    $products = $this->getRequestParameter('product');
264    $products = explode(',', $products);
265    $result = '';
266    foreach ($products as $product) {
267      $c = new Criteria();
268      $c->add(TblproductPeer::PRO_NAME, $product);
269      $tblprod = TblproductPeer::doSelectOne($c);
270      if ($tblprod) $result .= '&'.$product.'='.$tblprod->getProPrice();
271    }
272    return $this->renderText($result);
273  }
274
275  public function executePayment() {
276    $src = $this->getRequestParameter('src');
277    $us_id = $this->getRequestParameter('us_id');
278    $product = $this->getRequestParameter('product');
279    $token = $this->getRequestParameter('token');
280    if ($src == null || $token != md5($us_id.self::TOKENPW)) return $this->renderText('status=10');
281
282    $c = new Criteria();
283    $c->add(TblproductPeer::PRO_NAME, $product);
284    $tblprod = TblproductPeer::doSelectOne($c);
285    $price = $tblprod->getProPrice();
286
287    $tbluser = TbluserPeer::retrieveByPk($us_id);
288    if ($tbluser == null) return $this->renderText('status=1&errMsg=User not found');
289    if ($tbluser->getUsMoney() < $price) return $this->renderText('status=2&errMsg=Not enough money');
290    $tbluser->doTransaction(-$price, 'pay', $product);
291
292    if ($tblprod->getProType() > 0) {
293      if ($tbllic = $tblprod->getUserLicense($us_id)) {
294        $exp = $tbllic->getLiExpiredate();
295        $start = strtotime($exp) > time()? $exp: date('Y-m-d H:i:s');
296        $tbllic->setLiExpiredate(date('Y-m-d H:i:s', strtotime($start.' + 1 year')));
297        $tbllic->save();
298      } else {
299        $tblprod->createUserLicense($us_id, 1);
300      }
301    }
302    $ip = myUtility::getRealIpAddr();
303    $acc = $tbluser->getUsUsername();
304    myUtility::log("$ip pay $price from $src ($acc)", 'apiuser.log');
305    return $this->renderText('status=0&price='.$price.'&money='.$tbluser->getUsMoney());
306  }
307
308  public function executeActivate() {
309    $arParams['access_key']   = $this->getRequestParameter('access_key', 'no_access_key');
310    $arParams['command']      = $this->getRequestParameter('command', 'no_command');
311    $arParams['mo_message']   = $this->getRequestParameter('mo_message', 'no_mo_message');
312    $arParams['msisdn']       = $this->getRequestParameter('msisdn', 'no_msisdn');
313    $arParams['request_id']   = $this->getRequestParameter('request_id', 'no_request_id');
314    $arParams['request_time'] = $this->getRequestParameter('request_time', 'no_request_time');
315    $arParams['short_code']   = $this->getRequestParameter('short_code', 'no_short_code');
316    $arParams['signature']    = $this->getRequestParameter('signature', 'no_signature');
317
318    $data  = "access_key=" . $arParams['access_key'] . "&command=" . $arParams['command'] . "&mo_message=" . $arParams['mo_message'] . "&msisdn=" . $arParams['msisdn'];
319    $data .= "&request_id=" . $arParams['request_id'] . "&request_time=" . $arParams['request_time'] . "&short_code=" . $arParams['short_code'];
320    $secret = 'evvx931itxysfnp9m94rf2vxd101zegr';
321    $signature = hash_hmac("sha256", $data, $secret);
322
323    $smsPrice = array('80'=>500, '81'=>1000, '82'=>2000, '83'=>3000, '84'=>4000, '85'=>5000, '86'=>10000, '87'=>15000);
324    $money = @$smsPrice[substr($arParams['short_code'], 0, 2)];
325
326    if ($arParams['signature'] == $signature) {
327      $phone = preg_replace('/^84/', '0', $arParams['msisdn']);
328      preg_match('/^nc +(\w+) *(\d*)/i', $arParams['mo_message'], $match);
329      $key = strtolower(@$match[1]);
330      $uid = @$match[2];
331      $findid = ($key == 'nt' && is_numeric($uid));
332      if ($findid) $tbluser = TbluserPeer::retrieveByPk($uid);
333      else $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
334
335      if ($tbluser != null) {
336        switch ($key) {
337        case 'kh':
338          if ($tbluser->getMobileConfirm() == 0) {
339            $tbluser->setUsScore($tbluser->getUsScore() + sfConfig::get('app_user_activate_point'));
340            $tbluser->setMobileConfirm(1);
341            $tbluser->save();
342            $arResponse['sms'] = 'Kich hoat thanh cong tai khoan '.$tbluser->getUsUsername();
343          } else {
344            $arResponse['sms'] = 'Tai khoan '.$tbluser->getUsUsername().' da duoc kich hoat';
345          }
346          break;
347        case 'mk':
348          $passwd = myUtility::create_password();
349          $tbluser->setUsPassword(md5($passwd));
350          $tbluser->setMobileConfirm(1);
351          $tbluser->save();
352          $arResponse['sms'] = 'Tai khoan Violet.vn, ten truy nhap: '.$tbluser->getUsUsername().', mat khau: '.$passwd;
353          break;
354        case 'nt':
355          $tbluser->doTransaction($money, 'sms', $phone);
356          $arResponse['sms'] = 'Tai khoan '.$tbluser->getUsUsername().' da duoc nap them '.$money.' dong, hien dang co '.$tbluser->getUsMoney().' dong';
357          break;
358        default:
359          $arResponse['sms'] = 'Tin nhan cua quy vi khong dung cu phap cua Violet.vn';
360        }
361      } else {
362        $arResponse['sms'] = 'Khong tim thay tai khoan nao co '.($findid? ('id '.$uid): ('so dien thoai '.$phone)).' tren Violet.vn';
363      }
364    } else {
365      $arResponse['sms'] = 'Sai chu ky';
366    }
367
368    $arResponse['status'] = 1;
369    $arResponse['type'] = 'text';
370    myUtility::log($arParams['msisdn'].': '.$arParams['mo_message'].' -> '.$arParams['short_code'].' | '.$arResponse['sms'], 'sms.log');
371    return $this->renderText(json_encode($arResponse));
372  }
373
374  private function execPostRequest($url, $data){
375    $ch = curl_init();
376    curl_setopt($ch, CURLOPT_URL, $url);
377    curl_setopt($ch, CURLOPT_POST, 1);
378    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);       
379    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
380    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
381    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
382    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
383    $result = curl_exec($ch);   
384    curl_close($ch);
385    return $result;
386  }
387
388  public function executeCardcharge() {
389    $src = $this->getRequestParameter('src');
390    $us_id = $this->getRequestParameter('us_id');
391    $token = $this->getRequestParameter('token');
392    if ($src == null || $token != md5($us_id.self::TOKENPW)) return $this->renderText('status=10');
393
394    $tbluser = TbluserPeer::retrieveByPk($us_id);
395    if ($tbluser == null) return $this->renderText('status=5&errMsg=User not found');
396
397    $access_key = 'in3je3d6lxh8zx8m68ox';
398    $secret = 'evvx931itxysfnp9m94rf2vxd101zegr';
399    $type = $this->getRequestParameter('type');
400    $pin = $this->getRequestParameter('pin');
401    $serial = $this->getRequestParameter('serial');
402
403    $data = "access_key=".$access_key."&pin=".$pin."&serial=".$serial."&type=".$type;
404    $signature = hash_hmac("sha256", $data, $secret);
405    $data .= "&signature=".$signature;
406    $res = json_decode($this->execPostRequest('https://api.1pay.vn/card-charging/v2/topup', $data));
407    $status = (int)$res->status;
408    $amount = (int)$res->amount;
409    $desc = $res->description;
410
411    if ($status == 0) $tbluser->doTransaction($amount*2, 'card', $serial);
412    $ip = myUtility::getRealIpAddr();
413    myUtility::log("$ip load $type $serial (pin $pin) from $src: ".($status==0? $amount.'VND': $desc), 'card.log');
414    return $this->renderText('status='.$status.'&amount='.$amount.'&money='.$tbluser->getUsMoney().'&errMsg='.$desc);
415  }
416}
417
418?>
Note: See TracBrowser for help on using the repository browser.