抖音小程序

Securecode.php 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Libs\YPSMS;
  5. class Securecode extends Model
  6. {
  7. protected $table = 'securecode';
  8. public $timestamps = false;
  9. protected static $tplId = '5883552';# 发送验证码
  10. public static function sendPhoneVerify($user) {
  11. $operation='verify';
  12. $timeout = 180; //验证码3分钟过期
  13. $phone=$user->mobile;
  14. $data = self::getLastSms($user->id, $operation);
  15. $cur_time = time();
  16. if(!$data || $data->timeout_time < $cur_time) {
  17. //创建验证码
  18. $code = mt_rand(1000, 9999);
  19. self::insertSms($user->id, $operation, $code, $timeout, $phone);
  20. } else {
  21. $code = $data->code;
  22. }
  23. //验证码是否在60s
  24. if( $data && ($data->create_time + 60 - $cur_time)>0 ){
  25. return ['success' => false, 'wait_time' => (60 + $data->create_time - $cur_time)];
  26. }
  27. $params = ('#code#').'='.urlencode($code);
  28. YPSMS::sendMsgWithParams($phone, $params, self::$tplId);
  29. return ['success' => true, 'wait_time' => 60];
  30. }
  31. public static function insertSms($userid, $operation, $code, $timeout, $phone) {
  32. $cur_time = time();
  33. $id = self::query()->insertGetId(
  34. ['user_id' => $userid,
  35. 'operation' => $operation,
  36. 'code' => $code,
  37. 'create_time' => $cur_time,
  38. 'timeout_time'=> $cur_time + $timeout,
  39. 'phone' => $phone]
  40. );
  41. return $id;
  42. }
  43. public static function getLastSms($userid, $operation) {
  44. $securecode = self::query()->where('user_id', $userid)->where('operation', $operation)->orderBy('id', 'desc')->first();
  45. return $securecode;
  46. }
  47. public static function receivePhoneVerify($phone, $code, $operation='verify') {
  48. $securecode = self::query()->where('phone', $phone)->where('operation', $operation)->orderBy('id', 'desc')->first();
  49. if (!$securecode || $securecode->code != $code || $securecode->timeout_time < time()) {
  50. return false;
  51. }
  52. return true;
  53. }
  54. }