Fintech and payments Case study

Also: Business software and compliance

Xpress Money: global remittance platform

Xpress Money, a remittance platform for Wizz Financial: Angular portals and .NET services deployed on Azure, with the commercial ESB replaced by Azure Service Bus.

Xpress Money: global money transfer
Client
Wizz Financial
Service
Web apps, Integrations
Years
2022–2023
Stack
Azure Service Fabric, Azure Service Bus, Azure Functions, Azure Active Directory and 13 more
Platforms
Web

Overview

Xpress Money is a global remittance platform built for Wizz Financial. Money is sent and paid out through branches, agents and payout partners, with approvals, daily rates, compliance screening and a ledger behind every transaction. Between 2022 and 2023 we built the back-end services and the two Angular portals, XM Backoffice for staff and XM Biz for agents, deployed the whole application on Azure, and replaced the platform’s commercial service bus with a custom Azure Service Bus layer. The database and the original partner integrations came from elsewhere; we deployed and integrated them.

The challenge

A working stack built around a commercial enterprise service bus already served branches, agents and payout partners, with approvals, daily rates, compliance screening and a full ledger. Two things needed work. The whole application had to run reliably on Azure. And the service bus carried an expensive per-seat licence and was difficult to manage, which slowed every change to the partner flows.

What we built

  1. Deployed the whole application on Azure, with the services hosted on Azure Service Fabric and the databases, cache and search set up around them
  2. Azure DevOps pipelines for each service and each portal, with GitVersion and SonarQube checks on every build
  3. The back-end services, each owning one area: customers and agents, products and pricing, retail transactions with cancel, refund and stop-payment flows, finance and ledger, compliance, audit, documents and notifications
  4. Sign-in through an identity service backed by Azure Active Directory
  5. A scheduler service for recurring jobs such as rates imports, payment files and compliance retries
  6. PDF and Excel report generation and receipts, with SSRS for reporting
  7. XM Backoffice, an Angular 14 back-office portal for staff: customers, transactions, approvals, compliance, finance, pricing, rates and configuration
  8. XM Biz, an Angular 14 agent portal: remittance, amendments and cancellations, pay-outs, margins and promotional pricing, and fund requests
  9. The move off the old service bus: a proof of concept first, then a step-by-step migration behind an HTTP anti-corruption layer that places the services’ messages on Azure Service Bus queues, so the interface the services use stayed stable and they did not need rewriting
  10. Azure Functions queue handlers for each business area (audit, compliance, customer, finance, notification, rates and retail transactions), plus email
  11. Retired the commercial service bus and RabbitMQ, leaving Azure Service Bus as the single broker
  12. Tests for each service, load tests for key endpoints, and UAT support for each release

How a system like this fits together

Reference architecture: global remittance platform

Simplified reference architecture, not a client schematic.

Reference architecture: global remittance platformZones from left to right: clients (the back-office and agent portals), the application on Azure Service Fabric (identity, API gateway, core services and a scheduler), data (SQL Server, Redis, Elastic and file storage), messaging and integration (an HTTP anti-corruption layer, Azure Service Bus queues and queue handlers) and partner services. Full description in the numbered list below the diagram.ClientsApplication (Azure Service Fabric)DataMessaging and integration (async)Partner servicessign inRESTroutestimed jobsdataenqueuequeuerunsXM BackofficeAngular back-officeportalXM BizAngular agentportalIdentitySign-in with AzureActive DirectoryAPI gatewayIn front of theService Fabric appsCore servicesC# on .NET 6: customers,transactions, finance,compliance, reportsSchedulerHangfire jobs: rates,payment files, retriesSQL ServerTransactions, configand identity dataRedisCacheElasticCentralised logsFile storageDocuments and filesACL (HTTP)Anti-corruptionlayer (HTTP)Service BusAzure queues perbusiness areaQueue handlersAzure Functions perbusiness areaPartnersPayouts, rates,and emailReference architecture: global remittance platformZones from left to right: clients (the back-office and agent portals), the application on Azure Service Fabric (identity, API gateway, core services and a scheduler), data (SQL Server, Redis, Elastic and file storage), messaging and integration (an HTTP anti-corruption layer, Azure Service Bus queues and queue handlers) and partner services. Full description in the numbered list below the diagram.ClientsApplication (Service Fabric)DataMessaging (async)Partner servicessign inRESTroutestimed jobsdataenqueuequeuerunscallsXM BackofficeAngular back-officeportalXM BizAngular agent portalIdentitySign-in with AzureActive DirectoryAPI gatewayIn front of theService Fabric appsCore servicesC# on .NET 6: customers,transactions, finance,compliance, reportsSchedulerHangfire jobs: rates,payment files, retriesSQL ServerTransactions, config,identity dataRedisCacheElasticCentralised logsFile storageDocuments and filesACL (HTTP)Anti-corruptionlayer (HTTP)Service BusAzure queues perbusiness areaQueue handlersAzure Functions perbusiness areaPartnersPayouts, ratesand email
Agents and staff use two Angular portals; services on Azure Service Fabric sit behind an API gateway, and an Azure Service Bus layer carries messages to partners and email.
  1. A branch or agent user signs in to one of the two Angular portals; an identity service backed by Azure Active Directory handles the sign-in.
  2. The portal calls REST services through an API gateway into the applications on Azure Service Fabric.
  3. A service applies the rules and records the transaction in SQL Server, with Redis for cache, file storage for documents and Elastic for centralised logs.
  4. For partner and notification work the service passes the message to an HTTP anti-corruption layer, which places it on an Azure Service Bus queue.
  5. Queue-triggered Azure Functions for each business area complete the work and call the partner and email services.

Detailed diagrams

Platform architecture (starting point). The platform as drawn by the delivery team before the messaging migration. It still shows the commercial ESB (Neuron) and RabbitMQ, which were later retired.

  • This is the starting architecture, before the move to Azure Service Bus; the Neuron integration service and RabbitMQ shown here were later retired.
  • Users reach two web sites, XM Backoffice (4xPlus) and XM Biz (ezRemit). Sign-in goes to an Identity service backed by Azure Active Directory and an identity database.
  • Both web sites call an API gateway. Requests pass through the Service Fabric cluster and reverse proxy to the applications running on Service Fabric: Core, Fossil, Audit, TaskScheduler, Notifications, Finance, EzRemit, Compliance and Document Processing. Dashed lines connect XM Backoffice to Fossil and XM Biz to EzRemit.
  • The applications read and write the config database and other databases, and use file storage for documents. Elastic and Redis support the cluster.
  • Neuron, the integration service, has its own Neuron DB, works with RabbitMQ, and connects to third-party API integrations, file storage and SMTP for email.
  • Users reach reports through an SSRS web site backed by an SSRS server.

Tap the diagram to open it full size.

Open full size (opens the platform architecture (starting point) in a new tab)

Azure Service Bus integration. The Azure Service Bus layer that replaced the old ESB: how notification and access-control messages reach the integration layer.

  • This is the layer that replaced the old ESB.
  • The XpressMoney microservices send requests to an Azure Application Gateway dedicated to the Neuron endpoints. It has discovery, HTTP and HTTPS listeners.
  • Requests continue to Azure API Management, which exposes three operations: a discovery operation that returns static JSON describing the client connectors, a notification operation and an ACL operation.
  • The notification and ACL operations feed the Neuron Logic App, which passes messages to Azure Service Bus.
  • Service Bus holds a notification queue and an ACL queue. A notification Logic App reads the notification queue and calls a sendEmail function; the Logic App for the ACL queue is marked pending in the original.

Tap the diagram to open it full size.

Open full size (opens the azure service bus integration in a new tab)

Technology used

Technology named in the project records, by layer
LayerChoicePurpose
MessagingAzure Service Bus and Azure Functionsqueues and handlers that replaced the commercial ESB and RabbitMQ
IdentityAzure Active Directorysign-in through an identity service
DeliveryAzure DevOps, Terraform, GitVersion, SonarQubepipelines, environments and code quality
Front endAngular 14back-office and agent portals
ServicesC# on .NET 6, Azure Service Fabricdomain services as separately deployable applications
DataSQL Server, Redis, file storagetransactions, cache and documents
LoggingElasticsearchcentralised logs
JobsHangfirescheduled and background work
ReportingSSRS, PDF and Excelreports and receipts

What happened next

  • Delivered

    The work described above was delivered to the client.

  • Operational facts
    • Our work on this project spanned 2022–2023.

Could this be your project?

  • You are building or modernising a money-transfer or remittance product. Remittance software development
  • Your platform has to connect to payment, compliance and accounting systems.
  • You work in fintech and want a team that has built for it before. Fintech work

Request similar work

Questions about this project

How long did this project take?

Our work on it ran from 2022 to 2023, with 6,000+ engineering hours logged in total.

What technology was used?

Azure Service Fabric, Azure Service Bus, Azure Functions, Azure Active Directory, Azure DevOps, Angular, TypeScript, .NET 6, C#, SQL Server, Redis, Elasticsearch, Hangfire, Terraform, SSRS, SonarQube, GitVersion.

Similar work

QCare: quality, compliance and risk evaluation. Modules: OE certification and compliance, programme tracking and workflow, training and people management, quality field tool, facility and asset management, holistic network management. DEKRA.

Also Angular, same industry

QCare: compliance platform for DEKRA

  • Business software and compliance
  • Operations and facility management
  • Web apps
  • Integrations

2024–2026

QCare, DEKRA's quality, compliance and risk evaluation platform on the Collabtic service platform: certification and compliance tracking, organisations, training, shop certification and headquarters dashboards, on an Angular front end and a PHP API.

Wise Pelican logo

Also Angular, same industry

Wise Pelican: direct mail platform for real estate

  • Business software and compliance
  • Web apps
  • Integrations

2018–2021

A browser-based template editor for real estate postcards, with a mailing list builder, address validation and print-ready PDFs.

GoAquatix: aquatic workforce management platform screenshot

Also Angular, same industry

GoAquatix: aquatic workforce management platform

  • Operations and facility management
  • Business software and compliance
  • Web apps
  • Mobile apps

2019–2025

A MEAN-stack web app and iOS/Android apps for field-staff scheduling, duty and incident reports, water-safety testing, repair requests, training and hiring across aquatic facilities, built and maintained for six years.

Building something similar?

Tell us what you need and your industry. We will tell you what is realistic, what it would take, and show you the closest work we have done.

Are you ready to partner with us?

Our good-natured team is waiting to hear your business requirements.

Book a free project call