Ludo
  • 👋Welcome to Ludo
  • Overview
    • 💡What We Do
  • Gaming: Getting Started
    • 🎮Ludo Onboarding Guide
      • 1. Creating Your Account
      • 2. Setting Up Integrations
      • 3. Configuring Points
      • 4. Creating a Mini-Game
      • 5. Setting Up Campaigns
    • ⚙️Getting Set Up With Custom Integration
      • ⚒️Game Integration Setup Guide
      • Uploading Game Assets with JSON Files
      • 🪅Webhook Integration and Data Handling
  • Product Guides
    • 🎮Daily Games
    • 🏸Quests & Missions
  • Engaging Your Community
    • 💎Building a Loyal Community
    • 🎲Gamification and Reward Strategies
  • Blockchain Rewards
    • 🎯Why Blockchain for Loyalty Programs
  • USE CASES
    • 🛍️For Consumer Brands
    • 🇸🇴For Web2
    • ⛓️For Web3
    • 🎮For Gaming
    • Page
    • 🎥Case Studies
  • Learn more
    • 📜Whitepaper
    • 🔐Security Information
    • 🛠️Subprocessors
Powered by GitBook
On this page
  • Overview
  • Technical Details
  • Client Side
  • Ludo Side
  • Security Considerations
  • Next Steps
  1. Product Guides
  2. Overview of Key Features

Custom Integration

Technical Solution for Real-Time Data Integration

Overview

To pull in real-time data, our proposal involves implementing a webhook-based solution for instant data transfer. This lets us receive updates instantly when a new event occurs on the client's server.

The following diagram outlines the proposed system architecture:

[Client's Server]  --- (1) New Event ---> [Webhook Endpoint] --- (2) Process & Save ---> [Shared Database]
                                       ^                                 |
                                       |                                 |
                                        --------------------------------- (3) Acknowledgement
  1. Event: Whenever an event occurs, the client's server sends a POST request to our designated webhook endpoint with the transaction details.

  2. Process & Save: Our server receives the request, processes the data, and stores it in our database.

  3. Acknowledgment: After successfully processing and saving the data, our server sends an acknowledgment response back to the client's server.

Technical Details

Client Side

1. Webhook Endpoint on Client Server

The client's server must implement an API endpoint that will trigger whenever a bus ticket purchase is made. The endpoint will use a POST request to send data to our server. The API must provide the following data: ticket id, purchase price, purchase time, user email or id and any other necessary information.

Here's a Node.js based pseudocode of what the endpoint on the client's server could look like:

const express = require('express');
const axios = require('axios');
const app = express();

app.use(express.json());

app.post('/purchase', async (req, res) => {
    const purchaseData = req.body;

    // Extract necessary data
    const ticketId = purchaseData.ticket_id;
    const price = purchaseData.price;
    const purchaseTime = purchaseData.purchase_time;
    const userId = purchaseData.user_id;

    // Prepare data for our server
    const dataToSend = {
        'ticket_id': ticketId,
        'price': price,
        'purchase_time': purchaseTime,
        'user_id': userId
    };

    // Prepare authentication
    const apiKey = 'your_username'; // Replace with your Ludo apiKey

    // Send POST request to Ludo webhook
    try {
        await axios.post('<https://ludoserver.com/webhook-endpoint>', dataToSend, {
            headers: { 'Authorization': 'Basic ' + auth }
        });
        res.status(200).json({status: "success"});
    } catch (error) {
        res.status(500).json({status: "error", message: error.message});
    }
});

app.listen(3000, () => console.log('Server is listening on port 3000'));

Ludo Side

2. Webhook Endpoint on Our Server

Our server has an endpoint ready to receive the data from the client's server. Once the data is received, it's processed and stored in our database. Here's a Node.js based pseudocode of how this could look:

const express = require('express');
const mongoose = require('mongoose');
const app = express();
const auth = require('basic-auth');

app.use(express.json());

// Set up database connection
mongoose.connect('mongodb://localhost:27017/ticket_db', { useNewUrlParser: true, useUnifiedTopology: true });

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("We're connected!");
});

const ticketSchema = new mongoose.Schema({}, { strict: false });
const Ticket = mongoose.model('Ticket', ticketSchema, 'ticket_data');

const authMiddleware = (req, res, next) => {
    const credentials = auth(req);
    if (!credentials || credentials.name !== 'your_username' || credentials.pass !== 'your_password') {
        res.status(401).json({status: "error", message: "Access denied"});
    } else {
        next();
    }
}

app.post('/webhook-endpoint', authMiddleware, async (req, res) => {
    const incomingData = req.body;

    // Data validation could go here

    // Save data to our database
    try {
        await Ticket.create(incomingData);
        res.status(200).json({status: "success"});
    } catch (error) {
        res.status(500).json({status: "error", message: error.message});
    }
});

app.listen(3000, () => console.log('Server is listening on port 3000'));

3. Data Processing

Upon receiving a webhook call, our server will parse the data and perform necessary validations to ensure it's coming from the client's server. After successful validation, the data will be processed and structured in a format suitable for our database.

Here's a Node.js (Express) pseudocode example:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook-endpoint', (req, res) => {
  const data = req.body;

  // Validate incoming data
  if (!data.ticket_id || !data.price || !data.purchase_time) {
    return res.status(400).json({status: "error", message: "Missing required fields"});
  }

  // Process data if necessary (convert types, format date, etc.)
  const processedData = {
    ticket_id: String(data.ticket_id),
    price: Number(data.price),
    purchase_time: new Date(data.purchase_time),
		user_id: String(data.user_id),
  };

  // Further operations with processedData

  return res.status(200).json({status: "success"});
});

app.listen(3000, () => console.log('Server is listening on port 3000'));

4. Database Integration

The processed data will be saved into our database. Depending on the requirements, this could be a relational database like PostgreSQL or MySQL, or a NoSQL database like MongoDB.

We'll continue with Node.js, using the MongoDB native driver to store the data:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;

const app = express();
app.use(express.json());

const client = new MongoClient('mongodb://localhost:27017/', { useUnifiedTopology: true });

let db, collection;

client.connect(err => {
  if (err) throw err;
  db = client.db('ticket_db');
  collection = db.collection('ticket_data');
  app.listen(3000, () => console.log('Server is listening on port 3000'));
});

app.post('/webhook-endpoint', (req, res) => {
  const data = req.body;

  // Validate incoming data
  if (!data.ticket_id || !data.price || !data.purchase_time) {
    return res.status(400).json({status: "error", message: "Missing required fields"});
  }

  // Process data if necessary (convert types, format date, etc.)
  const processedData = {
    ticket_id: String(data.ticket_id),
    price: Number(data.price),
    purchase_time: new Date(data.purchase_time),
		user_id: String(data.user_id),
  };

  // Insert data into the database
  collection.insertOne(processedData, (err, result) => {
    if (err) throw err;
    console.log(`Saved document with _id: ${result.insertedId}`);
    return res.status(200).json({status: "success"});
  });
});

In this expanded code, we have the webhook endpoint validating and processing the incoming data. The processed data is then inserted into our MongoDB database. The Express server and the MongoDB client are set up to start when the database connection is successfully established.

5. Acknowledgment

Once the data is successfully saved, an acknowledgment will be sent back to the client's server to confirm the successful processing of the transaction data.

Security Considerations

The webhook endpoint will be secured using HTTPS and a shared secret for data validation. This ensures that the data is securely transferred and comes from a trusted source.

Next Steps

Upon agreement, we will collaborate with your tech team to set up the webhook integration and customize it to your specific needs.

This solution allows for real-time integration with minimal latency, providing instant updates on purchase events. It's reliable and secure and will provide the necessary data for our loyalty reward program.

The outlined approach is a high-level view of the solution, and more technical details will be provided as we proceed with the implementation. We're confident in providing a robust, secure, and efficient real-time ticket purchase data integration solution.

Last updated 1 year ago

🔮
🔌