SmsController.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace app\admin\controller\sms;
  3. use app\model\Member;
  4. use app\model\MemberQuota;
  5. use support\Redis;
  6. use support\Request;
  7. use Hhink\WebmanSms\Sms;
  8. class SmsController
  9. {
  10. const KEY_PREFIX = 'SMS:CODE:';
  11. /**
  12. * @Desc 核销验证码
  13. * @Author Gorden
  14. * @Date 2024/6/4 8:46
  15. *
  16. * @param Request $request
  17. * @return \support\Response
  18. */
  19. public function sendSmsCodeByQuota(Request $request)
  20. {
  21. $quotaIds = $request->post('quota_id', []);
  22. if (!$quotaIds) {
  23. return json_fail("参数异常");
  24. }
  25. $quotas = MemberQuota::whereIn('member_quota_id', $quotaIds)->get()->toArray();
  26. $memberIds = array_column($quotas, 'join_quota_member_id');
  27. if (count(array_unique($memberIds)) > 1) {
  28. return json_fail("不可同时核销多个会员的权益");
  29. }
  30. $status = array_column($quotas, 'member_quota_status');
  31. if (in_array('USED', $status) || in_array('CANCEL',$status)) {
  32. return json_fail('存在已核销 / 无效的权益,请重新选择');
  33. }
  34. try {
  35. $member = Member::find(current($memberIds));
  36. $mobile = $member->member_mobile;
  37. $code = random_string(6, 'number');
  38. $key = self::KEY_PREFIX . 'QUOTA:' . $mobile;
  39. Redis::set($key, $code);
  40. Redis::expire($key, 600);
  41. Sms::app()->send($mobile, [
  42. 'template' => 'SMS_240865706',
  43. 'data' => [
  44. 'code' => $code
  45. ],
  46. ]);
  47. } catch (\Exception $e) {
  48. return json_fail("短信发送失败,请稍后重试");
  49. }
  50. return json_success('success');
  51. }
  52. }