ContactController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Services\LiquidRenderer;
  5. use App\Models\DistInquiry;
  6. use App\Mail\InquiryMail;
  7. use Illuminate\Support\Facades\Mail;
  8. class ContactController extends Controller
  9. {
  10. protected $liquidRenderer;
  11. public function __construct(LiquidRenderer $liquidRenderer)
  12. {
  13. $this->liquidRenderer = $liquidRenderer;
  14. }
  15. function create()
  16. {
  17. // 构建导航数据 开始
  18. $breadcrumbs = [
  19. [
  20. 'url' => '/',
  21. 'name' => 'Home',
  22. ]
  23. ];
  24. $breadcrumbs[] = [
  25. 'url' => '#',
  26. 'name' => 'Contact Us',
  27. ];
  28. //模板支持多级目录,需要目录符号
  29. $output = LiquidRenderer::render('pages_sp_contact.liquid', [
  30. 'csrf_token' => csrf_token(),
  31. 'breadcrumbs' => $breadcrumbs,
  32. ]);
  33. return response($output);
  34. }
  35. function store(Request $request)
  36. {
  37. try {
  38. // 验证 CSRF Token
  39. if (!$request->has('_token') || $request->input('_token') !== csrf_token()) {
  40. return response()->json([
  41. 'status' => 'error',
  42. 'message' => 'Invalid token.',
  43. ], 403); // 返回 HTTP 403 错误
  44. }
  45. // 从请求中获取所有数据
  46. $data = $request->all();
  47. // 指定特殊字段的值
  48. $data['dist_id'] = 0; // app('dist')->id; // 指定当前登录的分销商ID
  49. $data['referer_url']=$request->headers->get('referer'); // 获取上一页的URL
  50. $data['ip_address'] = $request->ip(); // 获取用户IP地址
  51. $data['order_number']= generateOrderNumber('ORD');
  52. // 使用模型的 create 方法插入数据
  53. $distInquiry = DistInquiry::create($data);
  54. // 如果插入失败,抛出异常
  55. if (!$distInquiry) {
  56. throw new \Exception('submit failed, please try again later. ');
  57. }
  58. // 询盘数据
  59. // 询盘数据
  60. $inquiryData = [
  61. 'order_number' => $distInquiry->order_number,
  62. 'customer_name' => $distInquiry->customer_name,
  63. 'email' => $distInquiry->email,
  64. 'consulting_products' => $distInquiry->consulting_products,
  65. 'freight_forwarder' => $distInquiry->freight_forwarder,
  66. 'business_model' => $distInquiry->business_model,
  67. 'content' => $distInquiry->content,
  68. 'referer_url' => $distInquiry->referer_url,
  69. ];
  70. // 获取配置中的收件人和抄送地址
  71. $toAddress = config('mail_recipients.to.address');
  72. $ccAddress = config('mail_recipients.cc.address');
  73. // 判断收件人地址是否存在
  74. if (!empty($toAddress)) {
  75. $mail = Mail::to($toAddress);
  76. // 如果有 CC 地址,添加 CC
  77. if (!empty($ccAddress)) {
  78. $mail->cc($ccAddress);
  79. }
  80. // 发送邮件
  81. $mail->send(new InquiryMail($inquiryData));
  82. // // 返回响应
  83. // return back()->with('success', '您的询盘已提交,我们将尽快回复您。');
  84. } else {
  85. // // 没有收件人地址时记录日志或返回错误信息
  86. // logger()->warning('邮件未发送:缺少收件人地址');
  87. // return back()->with('error', '邮件发送失败,缺少收件人地址。');
  88. }
  89. // 成功时的响应
  90. $response = [
  91. 'status' => 'success'
  92. ];
  93. return response()->json($response, 200);
  94. } catch (\Exception $e) {
  95. // 捕获所有异常并返回错误信息
  96. $response = [
  97. 'status' => 'error',
  98. 'message' => 'submit failed, please try again later. ',
  99. ];
  100. return response()->json($response, 500); // 返回 HTTP 500 错误
  101. }
  102. }
  103. }