Как подтвердить сервер в ВК при создании чат-бота на Java?

Первый раз пишу-чат для ВК на Java. Сам бот готов и работает, но его надо разместить на сервер. ВК отправляет POST-запрос, содержащий JSON. И, собственно, не очень понятно как его принять, а затем отправить подтверждение. В интернете есть куча ответов с другими языками, а для Java я не смог найти. Прошу Вашей помощи, желательно с примером.


Ответы (1 шт):

Автор решения: Дмитрий Никифоров

Привожу пример простейшего сервера на Java с использованием класса HttpServer. Можете отталкиваться от него. Туториалы по нему легко гуглятся.

import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

public class ConfirmationHelper {
  private static final int GROUP_ID = 12345;
  private static final String CONFIRMATION_STRING = "a1b2c3d4e5f6";

  public static void main(String[] args) throws IOException {
    HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8080), 0);
    HttpContext context = server.createContext("/my-confirmation-endpoint");
    context.setHandler(ConfirmationHelper::handleRequest);
    server.start();
  }

  private static void handleRequest(HttpExchange exchange) throws IOException {
    String jsonString = new String(exchange.getRequestBody().readAllBytes()).replaceAll("\\s+","");
    byte[] response;
    if (jsonString.contains("\"type\":\"confirmation\"") &&
            jsonString.contains("\"group_id\":" + GROUP_ID)) {
      response = CONFIRMATION_STRING.getBytes();
    } else {
      response = "ok".getBytes();
    }
    exchange.sendResponseHeaders(200, response.length);
    OutputStream os = exchange.getResponseBody();
    os.write(response);
    os.close();
  }
}

При отправке POST-запроса с телом {"type": "confirmation","group_id": 12345} на http://localhost:8080/my-confirmation-endpoint сервер отвечает нужной строкой, на остальные запросы строкой "ok". JSON обычно десериализуют в объект и работают с ним, но для простоты примера работал со строкой.

→ Ссылка