GamePhoneVerityCode.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Models;
  3. use App\Util;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Facades\DB;
  6. class GamePhoneVerityCode extends Model
  7. {
  8. public function addCode($UserID, $Code, $PhoneNum, $Ip)
  9. {
  10. $now = date('Y-m-d H:i:s');
  11. $query = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  12. ->where('PhoneNum',$PhoneNum)
  13. ->first();
  14. $pack=Util::getPackageByURL();
  15. ///// 如果发送过验证码,直接返回,更新手机号和过期时间
  16. if ($query) {
  17. DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  18. ->where('PhoneNum',$PhoneNum)
  19. ->update(['UserID'=>$UserID,'Code'=>$query->Code,'CreateDate'=>$now,'Channel'=>$pack['channel']]);
  20. }else{
  21. $data = [
  22. 'UserID' => $UserID,
  23. 'PhoneNum' => $PhoneNum,
  24. 'Code' => $Code,
  25. 'CreateDate' => $now,
  26. 'Ip' => $Ip,
  27. 'Channel'=>$pack['channel']
  28. ];
  29. DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  30. ->updateOrInsert(['PhoneNum'=>"$PhoneNum"],$data);
  31. }
  32. return true;
  33. }
  34. // 验证 一个手机号对应的IP,只能发10次OTP,超过10次,则这个IP,无论使用任何的手机号,在今日无法再次发送OTP,24点过后次日立即解除限制
  35. public function verifyIp($Ip)
  36. {
  37. $count = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  38. ->whereDate('CreateDate', date('Y-m-d'))
  39. ->where('Ip', $Ip)
  40. ->count();
  41. if ($count > 10) {
  42. return true;
  43. }
  44. return false;
  45. }
  46. //
  47. /**
  48. * 验证验证码 flag =》true 验证间隔日期 false=》验证验证码
  49. * @param $phone
  50. * @param string $code
  51. * @param bool $flag
  52. * @return int
  53. */
  54. public static function verifyCode($phone, $code = '', $flag = false)
  55. {
  56. if ($flag) {
  57. $first = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  58. ->where('PhoneNum', $phone)
  59. ->orderByDesc('CreateDate')
  60. ->first();
  61. if ($first) {
  62. // 60 秒后发送一次验证码
  63. if (time() - strtotime($first->CreateDate) < 60) {
  64. return 2;
  65. }
  66. }
  67. return 0;
  68. } else {
  69. $first = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
  70. ->where('PhoneNum', $phone)
  71. ->where('Code', $code)
  72. ->orderByDesc('CreateDate')
  73. ->first();
  74. // 验证码或手机号错误
  75. if (!$first) {
  76. return 1;
  77. }
  78. // 验证码过期
  79. // if (time() - strtotime($first->CreateDate) > 600) {
  80. // return 3;
  81. // }
  82. \Log::info('timeCheck',[time(),date('Y-m-d H:i:s'),strtotime(date('Y-m-d H:i:s')),'ssstime',$first->CreateDate,strtotime($first->CreateDate)]);
  83. return $first->Code;
  84. }
  85. }
  86. }