sms_helper.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. static public function send($mobile,$type)
  14. {
  15. static $types = array('register', 'resetpass', 'getbonus','getwxbind','getfcode');
  16. if (!in_array($type, $types)) {
  17. return array('code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}");
  18. }
  19. if ($type == 'register') {
  20. $itype = Sms::register_code;
  21. }
  22. elseif ($type == 'resetpass') { //重置密码需要在登录的状态下才可以执行。
  23. $itype = Sms::resetpass_code;
  24. }
  25. elseif ($type == 'getbonus') {
  26. $itype = Sms::getbonus_code;
  27. }
  28. elseif($type == 'getwxbind') {
  29. $itype = Sms::getbind_code;
  30. }
  31. elseif($type == 'getfcode') {
  32. $itype = Sms::getfcode_code;
  33. }
  34. $cur_time = time();
  35. if(isset($_SESSION['sms_code'][$itype]))
  36. {
  37. $last_time = $_SESSION['sms_code'][$itype]['last_time'];
  38. if($cur_time - $last_time < self::repeat_mintime) {
  39. return array('code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime));
  40. }
  41. }
  42. //$sms = new Sms();
  43. $code = makeSmscode();
  44. Log::record("sms code = {$code}",Log::DEBUG);
  45. //Logic('queue')->sendSMS(array('mobile'=>$mobile,'type'=>$itype,'datas' => array('code'=>$code,'time'=>'5')));
  46. QueueClient::push('sendSMS',array('mobile'=>$mobile,'type'=>$itype,'datas' => array('code'=>$code,'time'=>'5')));
  47. $status = 0;
  48. if ($status == 0)
  49. {
  50. if(isset($_SESSION['sms_code'][$itype])) {
  51. $count = $_SESSION['sms_code'][$itype]['count'];
  52. } else {
  53. $count = 0;
  54. }
  55. $_SESSION['sms_code'][$itype]['count'] = $count + 1;
  56. $_SESSION['sms_code'][$itype]['code'] = $code;
  57. $_SESSION['sms_code'][$itype]['last_time'] = time();
  58. $_SESSION['sms_code'][$itype]['mobile'] = $mobile;
  59. return array('code' => 200);
  60. } else {
  61. $msg = self::get_errmsg($status,$itype);
  62. return array('code' => errcode::ErrSms, 'msg' => $msg);
  63. }
  64. return array('code' => 200);
  65. }
  66. static public function send_nostore_message($mobile,$type,$datas)
  67. {
  68. QueueClient::push('sendSMS', array('mobile' => $mobile,'type' => $type, 'datas' => $datas));
  69. }
  70. static public function check_code($itype,$code,$mobile)
  71. {
  72. if(isset($_SESSION['sms_code'][$itype]))
  73. {
  74. if($_SESSION['sms_code'][$itype]['mobile'] != $mobile) {
  75. return array('code' => errcode::ErrSmscode, 'msg' => '验证手机号和发送验证码手机号不一致.');
  76. }
  77. $tmout = time() - $_SESSION['sms_code'][$itype]['last_time'];
  78. if($tmout <= self::code_expire)
  79. {
  80. if($code == $_SESSION['sms_code'][$itype]['code']) {
  81. return true;
  82. } else {
  83. return array('code' => errcode::ErrSmscode, 'msg' => '验证码错误.');
  84. }
  85. } else {
  86. return array('code' => errcode::ErrSmscodeExpire, 'msg' => errcode::msg(errcode::ErrSmscodeExpire));
  87. }
  88. } else {
  89. return array('code' => errcode::ErrSmscode, 'msg' => '验证码错误.');
  90. }
  91. }
  92. static private function get_errmsg($status,$itype)
  93. {
  94. $iCode = intval($status);
  95. if($iCode == 160038) {
  96. return '短信验证码发送过频繁';
  97. }
  98. else if($iCode == 160040)
  99. {
  100. if($itype == Sms::register_code) {
  101. $stype = '注册验证码';
  102. } elseif ($itype == Sms::getbonus_code) {
  103. $stype = '红包验证码';
  104. } elseif ($itype == Sms::resetpass_code) {
  105. $stype = '重置密码验证码';
  106. }
  107. $msg = sprintf("%s,超过当天发送上限.",$stype);
  108. return $msg;
  109. }
  110. else if($iCode == 160042) {
  111. return "号码格式不正确.";
  112. }
  113. else if($iCode == 160000) {
  114. return "第三方短信系统错误.";
  115. }
  116. else if($iCode == 160034) {
  117. return "号码在第三方短信系统黑名单中.";
  118. }
  119. else {
  120. return "发送短信错误 error={$status}.";
  121. }
  122. }
  123. }