false, 'errors' => $errors], 422); } $orderId = 'ORD-' . date('Ymd-His') . '-' . substr(bin2hex(random_bytes(3)), 0, 6); $unitAmountCents = (int)round($price * 100); $payload = [ 'order_id' => $orderId, 'product_code' => trim((string)$data['product_code']), 'product_name' => trim((string)$data['product_name']), 'unit_amount_cents' => $unitAmountCents, 'quantity' => $quantity, 'customer_name' => trim((string)$data['customer_name']), 'address' => trim((string)$data['address']), 'postal_code' => trim((string)$data['postal_code']), 'city' => trim((string)$data['city']), 'province' => trim((string)$data['province']), 'phone' => trim((string)$data['phone']), 'email' => trim((string)$data['email']), ]; try { $session = kapvoe_create_checkout_session($config, $payload); kapvoe_append_order($config, [ 'order_id' => $orderId, 'created_at' => date('Y-m-d H:i:s'), 'product_code' => $payload['product_code'], 'product_name' => $payload['product_name'], 'unit_price' => $price, 'quantity' => $quantity, 'customer_name' => $payload['customer_name'], 'address' => $payload['address'], 'postal_code' => $payload['postal_code'], 'city' => $payload['city'], 'province' => $payload['province'], 'phone' => $payload['phone'], 'email' => $payload['email'], 'payment_status' => 'pending', 'stripe_session_id' => $session['id'] ?? '', 'payment_intent_id' => '', ]); kapvoe_json_response([ 'ok' => true, 'checkout_url' => $session['url'] ?? null, 'order_id' => $orderId, ]); } catch (Throwable $e) { kapvoe_json_response([ 'ok' => false, 'error' => $e->getMessage(), ], 500); }