SmsController.php 2.2 KB

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