SmsController.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\User;
  4. use App\Services\Api\ErrorMsgServive;
  5. use App\Services\SmsServer;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\Mail;
  9. use App\Models\MailCode;
  10. use Illuminate\Support\Facades\Validator;
  11. use libphonenumber\PhoneNumberUtil;
  12. class SmsController extends Controller
  13. {
  14. //发送短信验证码
  15. public function send(Request $request)
  16. {
  17. $checkResult = $this->checkMobile($request->mobile);
  18. if ($checkResult['prefix'] == '-1') { //手机号不合法
  19. return $this->error('手机号不合法');
  20. }
  21. $request->event = $request->event ?: 'login';
  22. if ($request->event == "forget") {
  23. if (!User::where(['mobile' => $request->mobile])->first()) {
  24. return $this->error('手机号未注册');
  25. }
  26. }
  27. $prefix = $checkResult['prefix'];
  28. $result = SmsServer::send($request->mobile, $request->event, $prefix);
  29. if (isset($result['error'])) {
  30. return $this->error('短信发送失败');
  31. }
  32. $data = [
  33. 'smsCode' => $result['smsCode'], //注意:实际不适合把验证码返回,主要是开发方便测试,生产环境请变为 ""
  34. ];
  35. return $this->success($data);
  36. }
  37. /**
  38. * @param $mobile
  39. * @return array
  40. * 验证手机号是否合法(支持全球手机号验证)$phoneUtil->parse($mobile, "CN"),两个参数:(要验证的手机号,国家区号)
  41. * 国际区号映射关系在 vendor\giggsey\libphonenumber-for-php\src\CountryCodeToRegionCodeMap.php
  42. * 可以 在 PhoneNumberUtil::getInstance() 方法中 点击 CountryCodeToRegionCodeMap::$countryCodeToRegionCodeMap 跳过去
  43. */
  44. public static function checkMobile($mobile)
  45. {
  46. $phoneUtil = PhoneNumberUtil::getInstance();
  47. try {
  48. $cnNumberProto = $phoneUtil->parse($mobile, "CN"); //大陆
  49. $prefix = '-1';
  50. if ($isValid_CN = $phoneUtil->isValidNumber($cnNumberProto)) {
  51. $prefix = '86';
  52. }
  53. $checkResult = [
  54. 'prefix' => $prefix
  55. ];
  56. return $checkResult;
  57. } catch (\libphonenumber\NumberParseException $exception) {
  58. ErrorMsgServive::write($exception, request()->url());
  59. }
  60. }
  61. }