ВКонтакте - пример интеграции
Материал из BiTel WiKi
(Различия между версиями)
Dog (Обсуждение | вклад)
(Новая страница: «реализация API: <source lang="java"> package ru.bgcrm.dyn.vk; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.u…»)
Следующая правка →
(Новая страница: «реализация API: <source lang="java"> package ru.bgcrm.dyn.vk; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.u…»)
Следующая правка →
Версия 10:45, 10 февраля 2017
реализация API:
package ru.bgcrm.dyn.vk; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.ParseException; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONObject; import ru.bgcrm.model.message.Message; import ru.bgcrm.util.Setup; /** * @author Сергей * */ public class VkAPI { /** * Ключ к API */ private String VK_ACCESS_TOKEN; /** * */ private String VK_API_BASE_URI = "https://api.vk.com/method/"; /** * Версия VK API с которой работаем */ private String VK_V; /** * Отображаемое имя паблика */ private String VK_PUBLIC_NAME; public VkAPI(){ VK_ACCESS_TOKEN = Setup.getSetup().get("vk.access.token", ""); VK_V = Setup.getSetup().get("vk.vk.v", "5.60"); VK_PUBLIC_NAME = Setup.getSetup().get("vk.vk.pname", "ООО \"Рога и копыта\""); } /** * Получение диалогов * * @param unanswered 0 - все; 1 - только не отвеченные сообщения; * @param important 0 - все; 1 - только важные; * @param unread 0 - все; 1 - только не прочитанные; * @return */ public List<VkDialog> getDialogs(Integer unanswered, Integer important, Integer unread){ List<VkDialog> result = new ArrayList<VkDialog>(); String method = "messages.getDialogs"; String body = ""; body = "unanswered=" + unanswered + "&important" + important + "&unread=" + unread; try { String response = sendRequest(method, body); JSONObject jsonResponse = new JSONObject(response); JSONArray jsonArrayDialogs = jsonResponse.getJSONObject("response").getJSONArray("items"); if (jsonArrayDialogs.length() > 0){ for(int i=0; i<jsonArrayDialogs.length(); i++){ VkDialog vkDialog = new VkDialog(jsonArrayDialogs.getJSONObject(i).getJSONObject("message").getInt("user_id"), jsonArrayDialogs.getJSONObject(i).getInt("in_read"), jsonArrayDialogs.getJSONObject(i).getInt("out_read"), jsonArrayDialogs.getJSONObject(i).getJSONObject("message")); result.add(vkDialog); } } } catch (ParseException | IOException e) { e.printStackTrace(); } return result; } /** * Конвертируем лист сообщений VK в лист сообщений CRM * * @param vkMessageList * @return */ public List<Message> toMessageList(List<VkMessage> vkMessageList){ List<Message> result = new ArrayList<Message>(); for (VkMessage vkMessage : vkMessageList){ Message message = new Message(); message.setDirection(Message.DIRECTION_INCOMING); message.setFrom(String.valueOf(vkMessage.fromId)); message.setFromTime(new Date((long)vkMessage.date*1000)); message.setText(vkMessage.body); message.setSubject(vkMessage.body); message.setTo(VK_PUBLIC_NAME); message.setTypeId(200); message.setProcessed(false); message.setSystemId(String.valueOf(vkMessage.fromId)); result.add(message); } return result; } /** * Отсылаем запрос. Возвращаем JSON * * @param method * @param body * @return * @throws ParseException * @throws IOException */ private String sendRequest(String method, String body) throws ParseException, IOException{ CloseableHttpClient httpClient = HttpClientBuilder.create().build(); body = body + "&access_token=" + VK_ACCESS_TOKEN + "&v=" + VK_V; HttpPost request = new HttpPost(VK_API_BASE_URI + method + "?" + body); request.addHeader("content-type", "application/json"); HttpResponse result = httpClient.execute(request); String jsonString = EntityUtils.toString(result.getEntity(), "UTF-8"); System.out.println(jsonString); httpClient.close(); return jsonString; } }
класс сообщения VK
package ru.bgcrm.dyn.vk; public class VkMessage { public int id; public int userId; public int fromId; public int date; public int readState; public int out; public String body; public VkMessage(int id, int user_id, int from_id, int date, int read_state, int out, String body) { this.id = id; this.userId = user_id; this.fromId = from_id; this.date = date; this.readState = read_state; this.out = out; this.body = body; } }