SendSms.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * 发送短信
  4. */
  5. namespace app\api\controller\v1;
  6. use app\api\services\RequestUtilService;
  7. use app\common\model\NumRecordModel;
  8. use app\Request;
  9. use app\services\SmsServices;
  10. use sms\Verify;
  11. use think\Exception;
  12. use think\facade\Db;
  13. use utils\AES;
  14. class SendSms
  15. {
  16. /**
  17. * 发送短信
  18. * @param Request $request
  19. * @param SmsServices $services
  20. * @return mixed
  21. */
  22. public function index (Request $request)
  23. {
  24. $mobile = $request->post('mobile');
  25. $mobile_sign = $request->post('mobile_sign');
  26. $type = $request->post('type');
  27. $ali_verify = $request->post('ali_verify');
  28. // [$mobile, $mobile_sign, $type, $ali_verify] = $request->getMore([
  29. // ['mobile', ''],
  30. // ['mobile_sign', ''],
  31. // ['type', 'verify'],
  32. // ['ali_verify', '']
  33. // ], true);
  34. // if (_limit_frequency('_limit_frequency_send_sms', $mobile, 3))
  35. // return app('json')->json_error('操作频繁,请等3秒后再试~');
  36. // if (!in_array($type, ['register', 'change'])) { // 签名验证
  37. // if (empty($mobile_sign))
  38. // return api_error_return('发送失败');
  39. // $sign = AES::encrypt($mobile);
  40. // if ($sign != $mobile_sign) // 验证sign
  41. // return api_error_return('发送失败11');
  42. // } else { // 人机验证
  43. // if (empty($ali_verify))
  44. // return api_error_return('发送失败');
  45. // $ali_verify = json_decode(html_entity_decode($ali_verify), true);
  46. //
  47. // /** @var Verify $verify */
  48. // $verify = new Verify();
  49. // $result = $verify->ali_verify($ali_verify['appkey'], $ali_verify['scene'], $ali_verify['csessionid'], $ali_verify['nc_token'], $ali_verify['sig']);
  50. //
  51. // if (!$result)
  52. // return api_error_return('发送失败');
  53. // }
  54. if (Db::name('user')->where('mobile', $mobile)->find()){
  55. return api_error_return('该手机号已注册,请直接登录');
  56. }
  57. $m = new NumRecordModel();
  58. $count = $m->whereDay('create_time', 'today')->where('ip', $request->ip())->count();
  59. // if ($count > 25){
  60. // return api_error_return('发送失败,超过同一IP 最大发送短信数量');
  61. // }
  62. Db::startTrans();
  63. try {
  64. $code = '';
  65. for ($i=0; $i < 6; $i++) {
  66. $code .= rand(1, 9);
  67. }
  68. $ser_request = new RequestUtilService();
  69. $result = $ser_request->reqeustSmsCode($mobile, $code);
  70. if ($result == 0){
  71. $data = [
  72. 'type'=>$type,
  73. 'content'=>$code,
  74. 'isfrom'=>'h5',
  75. 'phone'=>$mobile,
  76. 'uid'=>0,
  77. 'create_time'=>sr_getcurtime(time()),
  78. 'ip'=>$request->ip()
  79. ];
  80. $m->insert($data);
  81. }else{
  82. throw new Exception('22'.$result);
  83. }
  84. Db::commit();
  85. }catch (\Exception $e){
  86. Db::rollback();
  87. return api_error_return('发送失败'.$e->getMessage());
  88. }
  89. return api_succ_return(['msg'=>'发送成功', 'code'=>0]);
  90. }
  91. }