ВКонтакте - пример интеграции

Материал из BiTel WiKi

Версия от 10:45, 10 февраля 2017; Dog (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

реализация 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;
	}
 
}
Личные инструменты