feat(01-purchase-data-layer): add post-payment purchase data layer
Phase 1 complete: - move purchase event to order confirmation after successful payment - add backend purchase payload builder for transaction and ticket lines - remove premature purchase push from przelewy24 redirect view
This commit is contained in:
@@ -4,6 +4,54 @@ namespace controls;
|
||||
|
||||
class Tickets
|
||||
{
|
||||
private static function buildPurchaseDataLayer(array $order)
|
||||
{
|
||||
$items = [];
|
||||
$tickets = $order['tickets'] ?? [];
|
||||
|
||||
foreach ($tickets as $ticket) {
|
||||
$itemPrice = (float) str_replace(',', '.', (string) ($ticket['price'] ?? 0));
|
||||
$itemQuantity = (int) ($ticket['quantity'] ?? 0);
|
||||
$productId = (int) ($ticket['product_id'] ?? 0);
|
||||
$itemId = $productId > 0 ? (string) $productId : (string) ($ticket['id'] ?? '');
|
||||
|
||||
$items[] = [
|
||||
'item_id' => $itemId,
|
||||
'item_name' => trim((string) ($ticket['name'] ?? '')),
|
||||
'product_id' => $productId,
|
||||
'quantity' => $itemQuantity,
|
||||
'price' => $itemPrice,
|
||||
'date_visit' => trim((string) ($ticket['date_visit'] ?? '')),
|
||||
];
|
||||
}
|
||||
|
||||
$orderValue = (float) str_replace(',', '.', (string) ($order['order_price'] ?? 0));
|
||||
|
||||
return [
|
||||
'event' => 'purchase',
|
||||
'ecommerce' => [
|
||||
'transaction_id' => (string) ($order['id'] ?? ''),
|
||||
'value' => $orderValue,
|
||||
'currency' => 'PLN',
|
||||
'shipping' => 0.0,
|
||||
'tax' => 0.0,
|
||||
'payment_type' => 'przelewy24',
|
||||
'items' => $items,
|
||||
],
|
||||
'order' => [
|
||||
'id' => (int) ($order['id'] ?? 0),
|
||||
'hash' => trim((string) ($order['hash'] ?? '')),
|
||||
'payment_date' => trim((string) ($order['payment_date'] ?? '')),
|
||||
'date_added' => trim((string) ($order['date_added'] ?? '')),
|
||||
'payment_status' => (int) ($order['payment_status'] ?? 0),
|
||||
'vat' => (int) ($order['vat'] ?? 0),
|
||||
'city' => trim((string) ($order['city'] ?? '')),
|
||||
'zip_code' => trim((string) ($order['zip_code'] ?? '')),
|
||||
'country' => 'PL',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function sendPaidOrderSummaryEmail(array $order)
|
||||
{
|
||||
$hash = trim((string) ($order['hash'] ?? ''));
|
||||
@@ -799,12 +847,14 @@ class Tickets
|
||||
$order = \factory\Tickets::get_order_details_by_hash(\S::get('order'));
|
||||
$order_successful = false;
|
||||
$order_fail = false;
|
||||
$purchaseDataLayer = null;
|
||||
|
||||
if ( $order && !empty($order['payment_status']) && empty($order['informed_user']) )
|
||||
{
|
||||
if ($order['payment_status'])
|
||||
{
|
||||
$order_successful = true;
|
||||
$purchaseDataLayer = self::buildPurchaseDataLayer($order);
|
||||
$mailSent = self::sendPaidOrderSummaryEmail($order);
|
||||
if ($mailSent) {
|
||||
$mdb->update('orders', ['informed_user' => 1], ['id' => $order['id']]);
|
||||
@@ -820,7 +870,8 @@ class Tickets
|
||||
return \Tpl::view( 'tickets/order-confirm', [
|
||||
'order' => $order,
|
||||
'order_successful' => $order_successful,
|
||||
'order_fail' => $order_fail
|
||||
'order_fail' => $order_fail,
|
||||
'purchase_data_layer' => $purchaseDataLayer
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user