Add order_created email with QR code generation
Enhanced email notification system to send order confirmation emails immediately after order creation with embedded QR code for payment.
Changes:
- Checkout.tsx: Added send-notification call after payment creation with comprehensive logging
- send-notification: Added QRCode library integration for generating base64 QR images for order_created emails
- NotifikasiTab.tsx: Added QR code section to default order_created template and updated shortcodes list
Technical details:
- QR code generated as base64 data URL for email client compatibility
- Fire-and-forget pattern ensures checkout flow isn't blocked
- Added detailed console logging for debugging email send issues
- New shortcodes: {qr_code_image}, {qr_expiry_time}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { serve } from "https://deno.land/std@0.190.0/http/server.ts";
|
||||
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";
|
||||
import { EmailTemplateRenderer } from "../shared/email-template-renderer.ts";
|
||||
import QRCode from 'https://esm.sh/qrcode@1.5.3';
|
||||
|
||||
const corsHeaders = {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
@@ -246,6 +247,24 @@ serve(async (req: Request): Promise<Response> => {
|
||||
...variables,
|
||||
};
|
||||
|
||||
// Special handling for order_created: generate QR code image
|
||||
if (template_key === 'order_created' && allVariables.qr_string) {
|
||||
console.log('[SEND-NOTIFICATION] Generating QR code for order_created email');
|
||||
try {
|
||||
const qrDataUrl = await QRCode.toDataURL(allVariables.qr_string, {
|
||||
width: 300,
|
||||
margin: 2,
|
||||
color: { dark: '#000000', light: '#FFFFFF' }
|
||||
});
|
||||
allVariables.qr_code_image = qrDataUrl;
|
||||
console.log('[SEND-NOTIFICATION] QR code generated successfully');
|
||||
} catch (qrError) {
|
||||
console.error('[SEND-NOTIFICATION] Failed to generate QR code:', qrError);
|
||||
// Continue without QR code - don't fail the email
|
||||
allVariables.qr_code_image = '';
|
||||
}
|
||||
}
|
||||
|
||||
const subject = replaceVariables(template.subject, allVariables);
|
||||
const htmlContent = replaceVariables(template.body_html || template.body_text || "", allVariables);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user