ContactController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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\Services\MailService; // 导入 MailService
  7. class ContactController extends Controller
  8. {
  9. protected $liquidRenderer;
  10. public function __construct(LiquidRenderer $liquidRenderer)
  11. {
  12. $this->liquidRenderer = $liquidRenderer;
  13. }
  14. function create()
  15. {
  16. // 构建导航数据 开始
  17. $breadcrumbs = [
  18. [
  19. 'url' => '/',
  20. 'name' => 'Home',
  21. ]
  22. ];
  23. $breadcrumbs[] = [
  24. 'url' => '#',
  25. 'name' => 'Contact Us',
  26. ];
  27. //模板支持多级目录,需要目录符号
  28. $output = LiquidRenderer::render('pages_sp_contact.liquid', [
  29. 'breadcrumbs' => $breadcrumbs,
  30. ]);
  31. return response($output);
  32. }
  33. function store(Request $request)
  34. {
  35. try {
  36. // 如果请求中有 Token,则进行验证
  37. if ($request->has('_token')) {
  38. if ($request->input('_token') !== csrf_token()) {
  39. return response()->json([
  40. 'status' => 'error',
  41. 'message' => 'Invalid token.',
  42. ], 403); // 返回 HTTP 403 错误
  43. }
  44. }
  45. // 验证请求数据
  46. $validatedData = $request->validate([
  47. 'customer_name' => 'required|string|max:255', // 必填,字符串,最大长度255
  48. 'content' => 'required|string', // 必填,字符串
  49. // 其他字段的验证规则可以在这里添加
  50. ]);
  51. // 从请求中获取所有数据
  52. $data = $request->all();
  53. // 指定特殊字段的值
  54. $data['dist_id'] = 0; // app('dist')->id; // 指定当前登录的分销商ID
  55. $data['referer_url']=$request->headers->get('referer'); // 获取上一页的URL
  56. $data['ip_address'] = $request->server('HTTP_X_REAL_IP');
  57. if (empty($data['ip_address'])) {
  58. $forwardedFor = $request->server('HTTP_X_FORWARDED_FOR');
  59. if ($forwardedFor) {
  60. $ips = explode(',', $forwardedFor);
  61. $data['ip_address'] = trim($ips[0]); // 取第一个 IP 并去除空格
  62. } else {
  63. $data['ip_address'] = $request->ip(); // 备用方案
  64. }
  65. }
  66. $data['order_number']= generateOrderNumber('ORD');
  67. // 使用模型的 create 方法插入数据
  68. $distInquiry = DistInquiry::create($data);
  69. // 如果插入失败,抛出异常
  70. if (!$distInquiry) {
  71. throw new \Exception('submit failed, please try again later. ');
  72. }
  73. // 询盘数据
  74. $inquiryData = [
  75. 'order_number' => $distInquiry->order_number,
  76. 'customer_name' => $distInquiry->customer_name,
  77. 'email' => $distInquiry->email,
  78. 'whats_app' => $distInquiry->whats_app,
  79. 'consulting_products' => $distInquiry->consulting_products,
  80. 'freight_forwarder' => $distInquiry->freight_forwarder,
  81. 'business_model' => $distInquiry->business_model,
  82. 'content' => $distInquiry->content,
  83. 'referer_url' => $distInquiry->referer_url,
  84. 'ip'=> $data['ip_address'],
  85. ];
  86. // 使用 MailService 静态方法发送邮件
  87. $mailSent = MailService::sendInquiryMail($inquiryData);
  88. // 成功时的响应
  89. $response = [
  90. 'status' => 'success'
  91. ];
  92. return response()->json($response, 200);
  93. } catch (\Exception $e) {
  94. // 捕获所有异常并返回错误信息
  95. $response = [
  96. 'status' => 'error',
  97. 'message' => 'submit failed, please try again later. ',
  98. ];
  99. return response()->json($response, 500); // 返回 HTTP 500 错误
  100. }
  101. }
  102. }