EmailService.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace App\Http\Services;
  3. use App\Models\PromoCode;
  4. use App\Models\StoreOrder;
  5. use Illuminate\Support\Facades\Http;
  6. use Illuminate\Support\Facades\View;
  7. use App\Models\User;
  8. class EmailService
  9. {
  10. protected $fromEmailAddress;
  11. protected $emailFromName;
  12. protected $secret;
  13. public $appUrl;
  14. public $appInternalName;
  15. public $stringMappingConfig;
  16. public function __construct()
  17. {
  18. $this->secret = 'Superman2022@';
  19. $this->fromEmailAddress = config('app.fromEmailAddress');
  20. $this->emailFromName = config('app.emailFromName');
  21. $this->appUrl = config('app.url');
  22. $this->appInternalName = config('app.internalName');
  23. $this->stringMappingConfig = config('constants.' . $this->appInternalName);
  24. }
  25. protected function callJava($endPoint, $data, $sessionKey)
  26. {
  27. $data['secret'] = $this->secret;
  28. $url = config('app.backendUrl') . $endPoint;
  29. $response = Http::asForm()
  30. ->withHeaders([
  31. 'sessionKey' => $sessionKey
  32. ])
  33. ->post($url, $data)
  34. ->body();
  35. return json_decode($response, true);
  36. }
  37. //Emails
  38. public function sendUserPasswordResetEmail(User $user)
  39. {
  40. if(!$user->getEmail()) return;
  41. $appInternalName = $this->appInternalName;
  42. $stringMappingConfig = $this->stringMappingConfig;
  43. $appUrl = $this->appUrl;
  44. $emailFromName = $this->emailFromName;
  45. $html = (string) view('emails.templates.user-reset-password', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  46. $plainText = (string) view('emails.templates.user-reset-password-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  47. $params = [
  48. 'fromEmailAddress' => $this->fromEmailAddress,
  49. 'fromName' => $this->emailFromName,
  50. 'toEmailAddress' => $user->getEmail(),
  51. 'subject' => 'Reset Password',
  52. 'contentHtml' => $html,
  53. 'contentText' => $plainText,
  54. 'entityType' => 'USER',
  55. 'entityUid' => $user->uid,
  56. ];
  57. $response = $this->callJava('/api/email/send', $params, null);
  58. }
  59. public function sendOrderInvoice(StoreOrder $storeOrder)
  60. {
  61. $user = $storeOrder->user;
  62. if(!$user) return;
  63. if(!@$user->getEmail()) return;
  64. $appInternalName = $this->appInternalName;
  65. $stringMappingConfig = $this->stringMappingConfig;
  66. $appUrl = $this->appUrl;
  67. $emailFromName = $this->emailFromName;
  68. $html = (string) view('emails.templates.invoice', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  69. $plainText = (string) view('emails.templates.invoice-txt', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  70. $params = [
  71. 'fromEmailAddress' => $this->fromEmailAddress,
  72. 'fromName' => $this->emailFromName,
  73. 'toEmailAddress' => $user->getEmail(),
  74. 'subject' => 'Invoice from ' . $stringMappingConfig['name'] . ' #' . $storeOrder->iid ?? $storeOrder->id,
  75. 'contentHtml' => $html,
  76. 'contentText' => $plainText,
  77. 'entityType' => 'USER',
  78. 'entityUid' => $user->uid,
  79. ];
  80. $response = $this->callJava('/api/email/send', $params, null);
  81. }
  82. public function notifyUserOnFailedTransaction(User $user)
  83. {
  84. if(!@$user->getEmail()) return;
  85. $appInternalName = $this->appInternalName;
  86. $stringMappingConfig = $this->stringMappingConfig;
  87. $appUrl = $this->appUrl;
  88. $emailFromName = $this->emailFromName;
  89. $html = (string) view('emails.templates.user-failed-order-charge', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  90. $plainText = (string) view('emails.templates.user-failed-order-charge-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  91. $params = [
  92. 'fromEmailAddress' => $this->fromEmailAddress,
  93. 'fromName' => $this->emailFromName,
  94. 'toEmailAddress' => $user->getEmail(),
  95. 'subject' => 'Failed to process card payment',
  96. 'contentHtml' => $html,
  97. 'contentText' => $plainText,
  98. 'entityType' => 'USER',
  99. 'entityUid' => $user->uid,
  100. ];
  101. $response = $this->callJava('/api/email/send', $params, null);
  102. }
  103. public function notifyUserOnShippedOrder(User $user, $shippingDetails)
  104. {
  105. if(!@$user->getEmail()) return;
  106. $appInternalName = $this->appInternalName;
  107. $stringMappingConfig = $this->stringMappingConfig;
  108. $appUrl = $this->appUrl;
  109. $emailFromName = $this->emailFromName;
  110. $html = (string) view('emails.templates.user-order-shipped', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails'));
  111. $plainText = (string) view('emails.templates.user-order-shipped-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails'));
  112. $params = [
  113. 'fromEmailAddress' => $this->fromEmailAddress,
  114. 'fromName' => $this->emailFromName,
  115. 'toEmailAddress' => $user->getEmail(),
  116. 'subject' => 'Your order is on the way',
  117. 'contentHtml' => $html,
  118. 'contentText' => $plainText,
  119. 'entityType' => 'USER',
  120. 'entityUid' => $user->uid,
  121. ];
  122. $response = $this->callJava('/api/email/send', $params, null);
  123. }
  124. public function sendUserWelcomeEmail(User $user, $temporaryPassword = null)
  125. {
  126. if (!$user->getEmail()) return;
  127. $appInternalName = $this->appInternalName;
  128. $stringMappingConfig = $this->stringMappingConfig;
  129. $appUrl = $this->appUrl;
  130. $emailFromName = $this->emailFromName;
  131. $html = (string) view('emails.templates.user-welcome', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword'));
  132. $plainText = (string) view('emails.templates.user-welcome-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword'));
  133. $params = [
  134. 'fromEmailAddress' => $this->fromEmailAddress,
  135. 'fromName' => $this->emailFromName,
  136. 'toEmailAddress' => $user->getEmail(),
  137. 'subject' => 'Welcome!',
  138. 'contentHtml' => $html,
  139. 'contentText' => $plainText,
  140. 'entityType' => 'USER',
  141. 'entityUid' => $user->uid,
  142. ];
  143. $response = $this->callJava('/api/email/send', $params, null);
  144. }
  145. }