sms_helper.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/3/12
  6. * Time: 下午4:48
  7. */
  8. class sms_helper
  9. {
  10. const repeat_mintime = 60;
  11. const code_expire = 5 * 60;
  12. static public function send($mobile,$type)
  13. {
  14. static $types = array('register', 'resetpass', 'getbonus');
  15. if (!in_array($type, $types)) {
  16. return array('code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}");
  17. }
  18. if ($type == 'register') {
  19. $itype = Sms::register_code;
  20. }
  21. elseif ($type == 'resetpass') { //重置密码需要在登录的状态下才可以执行。
  22. $itype = Sms::resetpass_code;
  23. } elseif ($type == 'getbonus') {
  24. $itype = Sms::getbonus_code;
  25. }
  26. $cur_time = time();
  27. if(isset($_SESSION['sms_code'][$itype]))
  28. {
  29. $last_time = $_SESSION['sms_code'][$itype]['last_time'];
  30. if($cur_time - $last_time < self::repeat_mintime) {
  31. return array('code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime));
  32. }
  33. }
  34. $sms = new Sms();
  35. $code = makeSmscode();
  36. $status = $sms->send($mobile, array('code' => $code, 'type' => $itype, 'time' => '5'));
  37. if ($status == 0)
  38. {
  39. if(isset($_SESSION['sms_code'][$itype])) {
  40. $count = $_SESSION['sms_code'][$itype]['count'];
  41. } else {
  42. $count = 0;
  43. }
  44. $_SESSION['sms_code'][$itype]['count'] = $count + 1;
  45. $_SESSION['sms_code'][$itype]['code'] = $code;
  46. $_SESSION['sms_code'][$itype]['last_time'] = time();
  47. return array('code' => 200);
  48. } else {
  49. $msg = self::get_errmsg($status,$itype);
  50. return array('code' => errcode::ErrSms, 'msg' => $msg);
  51. }
  52. }
  53. static public function check_code($itype,$code)
  54. {
  55. if(isset($_SESSION['sms_code'][$itype]))
  56. {
  57. $tmout = time() - $_SESSION['sms_code'][$itype]['last_time'];
  58. if($tmout <= self::code_expire)
  59. {
  60. if($code == $_SESSION['sms_code'][$itype]['code']) {
  61. return true;
  62. } else {
  63. return array('code' => errcode::ErrSmscode, 'msg' => '验证码错误.');
  64. }
  65. } else {
  66. return array('code' => errcode::ErrSmscodeExpire, 'msg' => errcode::msg(errcode::ErrSmscodeExpire));
  67. }
  68. } else {
  69. return array('code' => errcode::ErrRegister, 'msg' => errcode::msg(errcode::ErrRegister)); //这个错误码需要商榷
  70. }
  71. }
  72. static private function get_errmsg($status,$itype)
  73. {
  74. $iCode = intval($status);
  75. if($iCode == 160038) {
  76. return '短信验证码发送过频繁';
  77. }
  78. else if($iCode == 160040)
  79. {
  80. if($itype == Sms::register_code) {
  81. $stype = '注册验证码';
  82. } elseif ($itype == Sms::getbonus_code) {
  83. $stype = '红包验证码';
  84. } elseif ($itype == Sms::resetpass_code) {
  85. $stype = '重置密码验证码';
  86. }
  87. $msg = sprintf("%s,超过当天发送上限.",$stype);
  88. return $msg;
  89. }
  90. else {
  91. return "发送短信错误 error={$status}.";
  92. }
  93. }
  94. }