secret = 'Superman2022@'; $this->fromEmailAddress = config('app.fromEmailAddress'); $this->emailFromName = config('app.emailFromName'); $this->appUrl = config('app.url'); $this->appInternalName = config('app.internalName'); $this->stringMappingConfig = config('constants.' . $this->appInternalName); } protected function callJava($endPoint, $data, $sessionKey, $attachment = null) { $data['secret'] = $this->secret; $url = config('app.backendUrl') . $endPoint; if($attachment){ $response = Http::asMultipart() ->attach( $attachment['fileName'], $attachment['contents'], $attachment['name'] ) ->withHeaders([ 'sessionKey' => $sessionKey ]) ->post($url, $data) ->body(); }else{ $response = Http::asForm() ->withHeaders([ 'sessionKey' => $sessionKey ]) ->post($url, $data) ->body(); } return json_decode($response, true); } //Emails public function sendUserPasswordResetEmail(User $user) { if(!$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-reset-password', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) null; $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Reset Password', 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function sendOrderInvoice(StoreOrder $storeOrder) { $user = $storeOrder->user; if(!$user) return; if(!@$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.invoice', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) view('emails.templates.invoice-txt', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Invoice from ' . $stringMappingConfig['name'] . ' #' . $storeOrder->iid ?? $storeOrder->id, 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function notifyUserOnFailedTransaction(User $user, StoreOrder $storeOrder) { if(!@$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-failed-order-charge', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) view('emails.templates.user-failed-order-charge-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Failed to process card payment', 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function notifyUserOnShippedOrder(User $user, $shippingDetails) { if(!@$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-order-shipped', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails')); $plainText = (string) view('emails.templates.user-order-shipped-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails')); $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Your order is on the way', 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function sendUserWelcomeEmail(User $user, $temporaryPassword = null) { if (!$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-welcome', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword')); $plainText = (string) view('emails.templates.user-welcome-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword')); $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Welcome!', 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function sendUserOrderChargeSuccessful(User $user, StoreOrder $storeOrder) { if (!$user->getEmail()) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-payment-successful', compact('storeOrder', 'user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) ''; $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => $user->getEmail(), 'subject' => 'Order Charged successfully!', 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function sendUserCustomEmail(User $user, array $emailData) { if (!@$emailData['to']) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.user-custom-email', compact('user', 'emailData', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) ''; $params = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => @$emailData['to'], 'subject' => @$emailData['subject'], 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => 'USER', 'entityUid' => $user->uid, ]; $response = $this->callJava('/api/email/send', $params, null); } public function sendEmailWithAttachment($params) { if (!@$params['toEmail']) return; $appInternalName = $this->appInternalName; $stringMappingConfig = $this->stringMappingConfig; $appUrl = $this->appUrl; $emailFromName = $this->emailFromName; $html = (string) view('emails.templates.attachment', compact('params', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig')); $plainText = (string) ''; $attachment = $this->getAttachmentFromStoragePath($params['attachmentPath'], 'attachment1'); $emailParams = [ 'fromEmailAddress' => $this->fromEmailAddress, 'fromName' => $this->emailFromName, 'toEmailAddress' => @$params['toEmail'], 'subject' => @$params['subject'], 'contentHtml' => $html, 'contentText' => $plainText, 'entityType' => null, 'entityUid' => null, 'attachment1' => $attachment ]; $response = $this->callJava('/api/email/send', $emailParams, null, $attachment); } protected function getAttachmentFromStoragePath($path, $fileName){ if (Storage::disk('custom')->exists($path)) { return [ 'fileName' => $fileName, 'name' => basename($path), 'contents' => Storage::disk('custom')->get($path), 'mime' => Storage::disk('custom')->mimeType($path), ]; } return null; } }