sms_helper.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/3/12
  6. * Time: 下午4:48
  7. */
  8. require_once(BASE_CORE_PATH . '/framework/libraries/sms.php');
  9. class sms_helper
  10. {
  11. const repeat_mintime = 60;
  12. const code_expire = 5 * 60;
  13. const register = 'register';
  14. const resetpass = 'resetpass';
  15. const getbonus = 'getbonus';
  16. const getwxbind = 'getwxbind';
  17. const getfcode = 'getfcode';
  18. const order_sended = 'order_sended';
  19. const order_received = 'order_received';
  20. const after_comment = 'after_comment';
  21. const evidence = 'evidence';
  22. const balance_warning = 'balance_warning';
  23. static private $arrTypes = ['register','resetpass','getbonus','getwxbind','getfcode',
  24. 'order_sended','order_received','after_comment'];
  25. public function send_code($mobile,$type,$fcheck = true)
  26. {
  27. if(!in_array($type,sms_helper::$arrTypes)) {
  28. return ['code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}"];
  29. }
  30. if($fcheck)
  31. {
  32. $cur_time = time();
  33. if(isset($_SESSION['sms_code'][$type]))
  34. {
  35. $last_time = $_SESSION['sms_code'][$type]['last_time'];
  36. if($cur_time - $last_time < self::repeat_mintime) {
  37. return ['code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime)];
  38. }
  39. }
  40. }
  41. $code = makeSmscode();
  42. Log::record("sms code = {$code}",Log::DEBUG);
  43. QueueClient::push('sendSMS', ['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
  44. // $logic = Logic('queue');
  45. // $logic->sendSMS(['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
  46. $status = 0;
  47. if ($status == 0)
  48. {
  49. if($fcheck)
  50. {
  51. if(isset($_SESSION['sms_code'][$type])) {
  52. $count = $_SESSION['sms_code'][$type]['count'];
  53. } else {
  54. $count = 0;
  55. }
  56. $_SESSION['sms_code'][$type] = ['count' => $count + 1, 'code' => $code, 'last_time' => time(),'mobile' => $mobile];
  57. }
  58. return ['code' => 200];
  59. } else {
  60. $msg = self::get_errmsg($status,$type);
  61. return ['code' => errcode::ErrSms, 'msg' => $msg];
  62. }
  63. }
  64. public function send($mobile, $type)
  65. {
  66. if(!in_array($type,sms_helper::$arrTypes)) {
  67. return ['code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}"];
  68. }
  69. $cur_time = time();
  70. if(isset($_SESSION['sms_code'][$type]))
  71. {
  72. $last_time = $_SESSION['sms_code'][$type]['last_time'];
  73. if($cur_time - $last_time < self::repeat_mintime) {
  74. return ['code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime)];
  75. }
  76. }
  77. //$sms = new Sms();
  78. $code = makeSmscode();
  79. Log::record("sms code = {$code}",Log::DEBUG);
  80. //Logic('queue')->sendSMS(array('mobile'=>$mobile,'type'=>$itype,'datas' => array('code'=>$code,'time'=>'5')));
  81. QueueClient::push('sendSMS', ['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
  82. $status = 0;
  83. if ($status == 0)
  84. {
  85. if(isset($_SESSION['sms_code'][$type])) {
  86. $count = $_SESSION['sms_code'][$type]['count'];
  87. } else {
  88. $count = 0;
  89. }
  90. $_SESSION['sms_code'][$type]['count'] = $count + 1;
  91. $_SESSION['sms_code'][$type]['code'] = $code;
  92. $_SESSION['sms_code'][$type]['last_time'] = time();
  93. $_SESSION['sms_code'][$type]['mobile'] = $mobile;
  94. return ['code' => 200];
  95. } else {
  96. $msg = self::get_errmsg($status,$type);
  97. return ['code' => errcode::ErrSms, 'msg' => $msg];
  98. }
  99. }
  100. static public function send_nostore_message($mobile,$type,$datas)
  101. {
  102. QueueClient::push('sendSMS', ['mobile' => $mobile,'type' => $type, 'datas' => $datas]);
  103. }
  104. static public function check_code($itype,$code,$mobile)
  105. {
  106. if(isset($_SESSION['sms_code'][$itype]))
  107. {
  108. if($_SESSION['sms_code'][$itype]['mobile'] != $mobile) {
  109. return ['code' => errcode::ErrSmscode, 'msg' => '验证手机号和发送验证码手机号不一致.'];
  110. }
  111. $tmout = time() - $_SESSION['sms_code'][$itype]['last_time'];
  112. if($tmout <= self::code_expire)
  113. {
  114. if($code == $_SESSION['sms_code'][$itype]['code']) {
  115. return true;
  116. } else {
  117. return ['code' => errcode::ErrSmscode, 'msg' => '验证码错误.'];
  118. }
  119. }
  120. else {
  121. return ['code' => errcode::ErrSmscodeExpire, 'msg' => errcode::msg(errcode::ErrSmscodeExpire)];
  122. }
  123. }
  124. else {
  125. return ['code' => errcode::ErrSmscode, 'msg' => '验证码错误.'];
  126. }
  127. }
  128. static private function get_errmsg($status,$itype)
  129. {
  130. $iCode = intval($status);
  131. if($iCode == 160038) {
  132. return '短信验证码发送过频繁';
  133. }
  134. elseif($iCode == 160040)
  135. {
  136. if($itype == sms_helper::register) {
  137. $stype = '注册验证码';
  138. } elseif ($itype == sms_helper::getbonus) {
  139. $stype = '红包验证码';
  140. } elseif ($itype == sms_helper::resetpass) {
  141. $stype = '重置密码验证码';
  142. }
  143. $msg = sprintf("%s,超过当天发送上限.",$stype);
  144. return $msg;
  145. }
  146. elseif($iCode == 160042) {
  147. return "号码格式不正确.";
  148. }
  149. elseif($iCode == 160000) {
  150. return "第三方短信系统错误.";
  151. }
  152. elseif($iCode == 160034) {
  153. return "号码在第三方短信系统黑名单中.";
  154. }
  155. else {
  156. return "发送短信错误 error={$status}.";
  157. }
  158. }
  159. }