sms_helper.php 6.2 KB

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