Skip to main content
Version: Next

Transaction Status Programming Examples

These examples show how to receive the POSTed JSON payload and handle it on your side. Each one stands up an endpoint like yoursite.com/api/transaction-status, which you register on your Comms Settings > API Settings page to begin receiving delivery reports. Persist the payload however you prefer (database, queue, log, etc.), and respond quickly — see Endpoint requirements.

Pick your preferred language.

Spring Boot
// DTO
public class TxStatusPayload {
public String MsgFollowUpUniqueCode;
public String number;
public String Status;
}

@RestController
public class TxStatusController {

@PostMapping("/api/transaction-status")
public ResponseEntity<String> receive(@RequestBody TxStatusPayload payload) {
// TODO: persist payload (DB, queue, etc.)
System.out.println("Status: " + payload.Status + " for " + payload.number);
return ResponseEntity.ok("OK");
}
}
Jakarta EE / JAX-RS
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

@Path("/api/transaction-status")
public class TxStatusResource {

public static class TxStatusPayload {
public String MsgFollowUpUniqueCode;
public String number;
public String Status;
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response receive(TxStatusPayload payload) {
// TODO: persist payload (DB, queue, etc.)
System.out.println("Status: " + payload.Status + " for " + payload.number);
return Response.ok("OK").build();
}
}
Plain Java (HttpServer, Java 7+)
// Full example, the webhook endpoint created will be '/api/transaction-status' at port 55566
// This example is compatible with Java 7 so it should run on all common JVMs
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.URL;

public class Main {

// Inner class representing the request object
public static class MessageRequest {
private String MsgFollowUpUniqueCode;
private String number;
private String Status;

public MessageRequest() {}

public MessageRequest(String MsgFollowUpUniqueCode, String number, String Status) {
this.MsgFollowUpUniqueCode = MsgFollowUpUniqueCode;
this.number = number;
this.Status = Status;
}

// Getters and Setters
public String getMsgFollowUpUniqueCode() {
return MsgFollowUpUniqueCode;
}

public void setMsgFollowUpUniqueCode(String MsgFollowUpUniqueCode) {
this.MsgFollowUpUniqueCode = MsgFollowUpUniqueCode;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getStatus() {
return Status;
}

public void setStatus(String Status) {
this.Status = Status;
}
}

// Simple JSON parser
public static class JsonParser {
public static MessageRequest parseMessageRequest(String json) {
MessageRequest request = new MessageRequest();

// Remove curly braces and quotes
json = json.trim();
if (json.startsWith("{") && json.endsWith("}")) {
json = json.substring(1, json.length() - 1);
}

// Split by comma, but be careful with nested objects
String[] pairs = json.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

for (String pair : pairs) {
String[] keyValue = pair.split(":(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
if (keyValue.length == 2) {
String key = keyValue[0].trim().replace("\"", "");
String value = keyValue[1].trim().replace("\"", "");

if ("MsgFollowUpUniqueCode".equals(key)) {
request.setMsgFollowUpUniqueCode(value);
} else if ("number".equals(key)) {
request.setNumber(value);
} else if ("Status".equals(key)) {
request.setStatus(value);
}
}
}

return request;
}
}

// Server endpoint implementation
public static class MessageEndpointHandler {

public String handleRequest(String jsonRequest) {
try {
// Parse the incoming JSON
MessageRequest request = JsonParser.parseMessageRequest(jsonRequest);

// Validate required fields
if (request.getMsgFollowUpUniqueCode() == null ||
request.getNumber() == null ||
request.getStatus() == null) {
return "{\"error\": \"Missing required fields\"}";
}

// Process the request (example)
System.out.println("Received message:");
System.out.println(" Unique Code: " + request.getMsgFollowUpUniqueCode());
System.out.println(" Number: " + request.getNumber());
System.out.println(" Status: " + request.getStatus());

// Return success response
return "{\"success\": true, \"message\": \"Request processed successfully\"}";

} catch (Exception e) {
return "{\"error\": \"" + e.getMessage() + "\"}";
}
}
}

public static void main(String[] args) throws IOException {
// Create HTTP server on port 55566
HttpServer server = HttpServer.create(new InetSocketAddress(55566), 0);

// Create context for the endpoint
server.createContext("/api/transaction-status", new PostHandler());

// Set executor (optional)
server.setExecutor(null);

// Start the server
server.start();

System.out.println("Server started on port 55566");
System.out.println("Endpoint: POST http://localhost:55566/api/transaction-status");
System.out.println("Send JSON data to this endpoint");
System.out.println("Press Ctrl+C to stop the server");

// Keep server running
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}

// Helper method to send POST request (if needed)
public static String sendPostRequest(String endpointUrl, String jsonData) {
try {
URL url = new URL(endpointUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);

// Send JSON data
OutputStream os = conn.getOutputStream();
os.write(jsonData.getBytes());
os.flush();
os.close();

// Read response
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();

return response.toString();

} catch (IOException e) {
return "{\"error\": \"" + e.getMessage() + "\"}";
}
}

public static class PostHandler implements HttpHandler {
private MessageEndpointHandler handler = new MessageEndpointHandler();

@Override
public void handle(HttpExchange exchange) throws IOException {
// Allow only POST requests
if (!"POST".equals(exchange.getRequestMethod())) {
String response = "{\"error\": \"Method not allowed. Use POST.\"}";
exchange.sendResponseHeaders(405, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
return;
}

try {
// Read the request body
BufferedReader reader = new BufferedReader(
new InputStreamReader(exchange.getRequestBody()));
StringBuilder jsonBuffer = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
jsonBuffer.append(line);
}
String jsonData = jsonBuffer.toString();

// Process the request
String response = handler.handleRequest(jsonData);

// Send response
exchange.getResponseHeaders().set("Content-Type", "application/json");
exchange.sendResponseHeaders(200, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();

} catch (Exception e) {
String error = "{\"error\": \"" + e.getMessage() + "\"}";
exchange.sendResponseHeaders(500, error.length());
OutputStream os = exchange.getResponseBody();
os.write(error.getBytes());
os.close();
}
}
}
}