API для работы с чартерной перевозкой


1. порядок подключения


1.1 регистрация на сайте Библио-Глобус
http://export.bgoperator.ru/texts/api/load-xml-prices.html#login

для турагентств
https://www.bgoperator.ru/docs.shtml?id_flt=1000522#сoperation
для частных лиц
https://www.bgoperator.ru/docs.shtml?id_flt=1000523#personal_register

1.2 письмо в support c запросом информации о подключении
Вы сейчас здесь
1.3 разработка стыковки с сервисами Библио-Глобус

1.4 запрос в support на проведение тестирования.
в ответ безопасные для тестирования даты и направления

1.5 тестирование. запрос на чистку созданных заявок
подтверждение удаления созданных заявок, разрешение использовать в production

1.6 выпуск в production


2. описание сервисов


2.0 авторизация
http://export.bgoperator.ru/texts/api/load-xml-prices.html#auth_work
http://export.bgoperator.ru/texts/api/load-xml-prices.html#compress

2.1 справочники системы Библио-Глобус
некоторые запросы требуют ID в системе Библио-Глобус, его можно получить из справочников
http://export.bgoperator.ru/texts/api/load-xml-prices.html#reference
список доступных аэропортов и авиакомпаний
https://export.bgoperator.ru/yandex?action=avia

2.2 получение расписания рейсов
https://export.bgoperator.ru/yandex?action=flights&aircountry1=....&aircountry2=....&data=20.02.2019
для aircountry1 и aircountry2 можно использовать id Библио-Глобус или двухбувенный ISO-код страны.

2.3 запрос цены на маршрут
http://export.bgoperator.ru/texts/api/load-xml-prices.html#blockavia

2.4 подготовка бронирования
http://export.bgoperator.ru/tour-api.html#createaviatour1
коды ошибок
http://export.bgoperator.ru/tour-api.html#errors

2.5 бронирование и создание заявки
http://export.bgoperator.ru/tour-api.html#createaviatour2
коды ошибок
http://export.bgoperator.ru/tour-api.html#errors

2.6 получение информации о заявке
http://export.bgoperator.ru/requests-tozaya-in-xml.html#singletozaya

2.7 оплата заявки с депозита
обсуждается по запросу

3. пример авторизации для работы с сервисом

    

Java 1.7
HttpClient 4.5.3 - версия меньше 4.5 не поддерживает сессионные cookie
HttpCore 4.4.6



public static void main(String[] args) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
        HttpClient client = getHTTPSClient();
        HttpPost httpPost = new HttpPost("https://login.bgoperator.ru/auth");

        ArrayList postParameters;
        postParameters = new ArrayList();
        postParameters.add(new BasicNameValuePair("login", login));
        postParameters.add(new BasicNameValuePair("pwd", password));
        httpPost.setEntity(new UrlEncodedFormEntity(postParameters));

        Reader reader = doRequest(client, httpPost);

        //пример GET-запроса цены
        HttpGet httpGet = new HttpGet("http://export.bgoperator.ru/site?action=biletblock&vr0=1&vr1=1&vr2=0&idfrom=MOW&idto=BCN&datefrom=2017-07-09&dateto=2017-07-23&class=Y&cur=EUR");
        reader = doRequest(client, httpGet);

        /*
        //пример POST-запроса бронирования
        httpPost = new HttpPost("https://www.bgoperator.ru/zayavkaapi?prx=104499999900000094&action=createaviatour");
        httpPost.setEntity(new StringEntity("\n" +
                .... 
                + ""));
        reader = doRequest(client, httpPost);
        */

        StringBuilder res = new StringBuilder();
        char[] buf = new char[10000];
        int len = 0;
        while ((len = reader.read(buf))==10000) {
            res.append(buf);
        }
        if (len>0) res.append(buf,0, len);
        System.out.println(res);
    }

    public static HttpClient getHTTPSClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
        org.apache.http.ssl.SSLContextBuilder context_b = SSLContextBuilder.create();
        context_b.loadTrustMaterial(new org.apache.http.conn.ssl.TrustStrategy() {

            @Override
            public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                return true;
            }
        });
        SSLContext ssl_context = context_b.build();
        org.apache.http.conn.ssl.SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ssl_context,
                new org.apache.http.conn.ssl.NoopHostnameVerifier());

        HttpClientBuilder builder = HttpClients.custom().setSSLSocketFactory(sslSocketFactory);

        HttpClient client = builder.build();
        return client;
    }

    private static Reader doRequest(HttpClient client, HttpRequestBase method) throws IOException { //SocketTimeoutException или ConnectException
        try {
            HttpResponse response = client.execute(method);
            int returnCode = response.getStatusLine().getStatusCode();

            if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) 
                System.err.println("The Post method is not implemented by this URI");
            else return new InputStreamReader(response.getEntity().getContent());
        } catch (Exception ex) {
            ex.printStackTrace(System.out);
        }
        return null;
    }