Как подтвердить сервер в ВК при создании чат-бота на 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 обычно десериализуют в объект и работают с ним, но для простоты примера работал со строкой.