Мастер-Тур(15):PaymentService

Материал из Megatec
Перейти к: навигация, поиск

Введение

Начиная с релиза 15.8 разработан сервис оплат (PaymentService), который нужен для проведения оплаты в ПК Мастер-Тур.
В этот сервис постепенно будут добавляться новые методы из Мастер-Центр оплат. На текущий момент реализован метод ДобавитьОплатуРассчитывать

Установка службы сервиса оплат

  • Скопировать папку PaymentService из дистрибутива на сервер. Служба PaymentService должна устанавливаться на компьютере, имеющем доступ к серверу баз данных, или на компьютере, который сам является сервером баз данных (установлен MS SQL Server).
  • Перед установкой службы сервиса оплат необходимо настроить конфигурационный файл appsettings.json.
Название Описание Настройка
1 Строка подключения Строка подключения к базе данных ПК «Мастер-Тур» указывается в секции ConnectionStrings.

Внимание!

  • Обратите внимание, что в целях безопасности необходимо ограничить доступ к этому конфигурационному файлу. Он должен быть доступен только для данного приложения.
  • Для корректной работы в поле User Id достаточно указать пользователя, привязанного к группе avServices в модуле Мастер-Администратор (обрабатывается с релиза 15.6).
  • Пароль пользователей системы, от которых работают службы и приложения, не должен содержать ни одного из следующих символов: < > " ' &
"MtDatabase": "Server=Server; Database=Database; User Id=User; Password=Password;"
2 Путь к службе сервиса оплат По умолчанию служба сервиса оплат использует порт 5010 и название PaymentService. Рекомендуется использование значений по умолчанию.

Внимание!
При смене порта необходимо также изменить порт в установочном скрипте _Install.cmd.

"applicationUrl": "http://*:5010",
"ApplicationName": "PaymentService",
3 Путь к службе MTS Необходимо указать адрес и порт к установленной службе MTS (для подписи проводимых платежей)
"SoapServiceAddress": "http://localhost:80/MTS",
  • Установка осуществляется запуском скрипта _Install.cmd от имени администратора. Запуск от имени администратора
  • При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта PaymentService.
  • В Службах Windows добавляется служба PaymentService.
  • Для удаления службы необходимо запустить скрипт _UnInstall.cmd от имени администратора. При этом будут удалены правила для входящих подключений.

Работа службы сервиса оплат

Добавить оплату (AddPayment)

Метод производит внесение оплаты в базу данных Мастер-Тур.

  • Формат запроса:
    • POST .../PaymentService/AddPayment?
  • Принимаемые параметры (* – обязательный):
    • PaymentOperation * – ключ типа операции (PO_Id из таблицы PaymentOperations)
    • PaymentSum * – сумма платежа в валюте платежа
    • CurrencyISOCode * – ISO код валюты (RA_ISOCode из таблицы Rates)
    • DogovorKey * – ключ путевки
    • DogovorCode – код путевки (отрабатывает, если не указан DogovorKey)
    • PaymentDate * – дата платежа (в формате yyyy-mm-dd
    • CourseDate – курс (если не указан, берется на дату платежа)
    • DocNumber – номер документа
    • ReceivedFrom – от кого получен платеж
    • PaymentFor – за что произведен платеж
    • PartnerKey – если платеж производиться партнеру, то этот ключ определяет конкретного партнера
    • NoDetails – детализация платежа (по умолчанию - false, детализация платежа будет создана)
  • Возвращаемый результат:
    • ключ платежа
Пример

Вызов метода AddPayment

POST http://localhost:5010/PaymentService/AddPayment?PaymentOperation=1&PaymentSum=100&CurrencyISOCode=RUB&DogovorCode=IS28070006&NoDetails=false? HTTP/1.1

Возвращаемый результат метода AddPayment

4455


Список прошедших заездов по турам (TourList)

Метод возвращает список туров, по которым в заданные даты были совершены заезды (то есть, есть оформленные путевки).

  • Формат запроса:
    • GET .../PaymentService/TourList?
  • Принимаемые параметры (* – обязательный):
    • dateFrom * – дата заезда с в формате yyyy.mm.dd
    • dateTo * – дата заезда по в формате yyyy.mm.dd
  • Возвращаемый результат:
    • tourProgramsId – ключ программы тура
    • tourName – название программы тура
    • dateBegin – массив дат заездов по указанному туру в заданный период
Пример

Вызов метода TourList

GET http://localhost:5010/PaymentService/TourList?dateFrom=2022.04.01&dateTo=2022.04.10

Возвращаемый результат метода TourList

[{
        "tourProgramsId": 100001232,
        "tourName": "Общая проверка системы",
        "dateBegin": [
            "03.04.2022",
            "05.04.2022"
        ]
    }, {
        "tourProgramsId": 100001247,
        "tourName": "Тур в Кострому",
        "dateBegin": [
            "01.04.2022",
            "03.04.2022",
            "05.04.2022"
         ]
    }
]


Финансовая информация по турам (TourFinInfo)

Метод возвращает детальную информацию по услугам и оплатам по туру.

  • Формат запроса:
    • GET .../PaymentService/TourFinInfo?
  • Принимаемые параметры (* – обязательный):
    • tourProgramsId * – ключ программы тура
    • tourDate * – дата заезда по туру в формате yyyy.mm.dd
  • Возвращаемый результат:
    • tourName – название программы тура
    • arrivalDate – дата заезда по туру
    • touristCount – общее количество туристов по путевкам
    • payed – сумма оплат от покупателей по всем путевкам в национальной валюте
    • services – массив услуг (группировка по классу услуг)
      • serviceType – название класса услуги
      • serviceName – название услуги
      • serviceTouristCount – количество туристов, пользующихся услугой по всем путевкам
      • partner – поставщик по услуге
      • netto – стоимость нетто по всем путевкам по каждой услуге
      • brutto – стоимость брутто по всем путевкам по каждой услуге
Пример

Вызов метода TourFinInfo

GET http://localhost:5010/PaymentService/TourFinInfo?tourProgramsId=100001232&tourDate=2022.04.05

Возвращаемый результат метода TourFinInfo

{
    "tourName": "Общая проверка системы",
    "arrivalDate": "05.04.2022",
    "touristCount": 50,
    "payed": "350400 RUB",
    "services": [{
            "serviceType": "Авиаперелет",
            "serviceName": "А_П::Варшава/Канкун/3G5656, WAW-VIE, 05:50-08:50/C Бизнес класс",
            "serviceTouristCount": 50,
            "partner": "Партнер",
            "netto": "100000,00 RUB",
            "brutto": "120000,00RUB"
        }, 
            "serviceType": "Отель/Круиз",
            "serviceName": "HOTEL::Канкун/Sheraton-1*,7 ночей/Double(Standart),2 взр./AI Шведский стол",
            "serviceTouristCount": 50,
            "partner": "Партнер",
            "netto": "200000,00 RUB",
            "brutto": "230000,00 RUB"
        }, 
            "serviceType": "Авиаперелет",
            "serviceName": "А_П::Канкун/Варшава/AF3444, VIE-WAW, 15:50-18:50/C Бизнес класс",
            "serviceTouristCount": 50,
            "partner": "Партнер",
            "netto": "0,00 RUB",
            "brutto": "0,00 RUB"
        }
    ]
}


Информация по туристу, выводимая по ключу туриста (SelectTouristInfoByKey)

Метод возвращает детальную информацию по туристу, выводимую по ключу туриста.

  • Формат запроса:
    • POST .../PaymentService/SelectTouristInfoByKey?
  • Принимаемые параметры (* – обязательный):
    • key * – ключ туриста
  • Возвращаемый результат:
    • key – ключ туриста
    • isMain – признак главного туриста
    • ageType – тип туриста (0 – взрослый, 1 – ребенок, 2 – инфант)
    • sex – пол туриста (0 – мужской, 1 – женский)
    • firstName – имя (лат)
    • lastName – фамилия (лат)
    • patronymic – отчество (лат)
    • firstNameRus – имя (рус)
    • lastNameRus – фамилия (рус)
    • patronymicRus – отчество (рус)
    • phone – телефон
    • email – e-mael
    • birthDay – дата рождения
    • birthPlace – место рождения
    • citizen – гражданство
    • internationalPassportSer – серия загранпаспорта
    • internationalPassportNum – номер загранпаспорта
    • internationalPassportDate – дата выдачи загранпаспорта
    • internationalPassportDateEnd – дата окончания загранпаспорта
    • internationalPassportByWhom – кем выдан загранпаспорт
    • nationalPassportSer – серия паспорта
    • nationalPassportNum – номер паспорта
    • nationalPassportDate – дата выдачи паспорта
    • nationalPassportByWhom – кем выдан паспорт
    • postIndex – индекс
    • city – город
    • street – улица
    • build – дом
    • flat – квартира
    • citizenID – ID туриста
Пример

Вызов метода SelectTouristInfoByKey

POST http://localhost:5010/PaymentService/SelectTouristInfoByKey?key=111125

Возвращаемый результат метода SelectTouristInfoByKey

{
    "key": 111125,
    "isMain": 1,
    "ageType": 0,
    "sex": 0,
    "firstName": "Ivan",
    "lastName": "Ivanov",
    "patronymic": "Ivanovich",
    "firstNameRus": "Иван",
    "lastNameRus": "Иванов",
    "patronymicRus": "Иванович",
    "phone": "+79991234567",
    "email": "ivan@mail.ru",
    "birthDay": "01.02.1980",
    "birthPlace": "Москва",
    "citizen": "Россия",
    "internationalPassportSer": "1111",
    "internationalPassportNum": "222222",
    "internationalPassportDate": "01.05.2022",
    "internationalPassportDateEnd": "01.05.2027",
    "internationalPassportByWhom": "Отделом УФМС год. Москвы",
    "nationalPassportSer": "11",
    "nationalPassportNum": "6665544",
    "nationalPassportDate": "01.05.2030",
    "nationalPassportByWhom": "УФМС 52",
    "postIndex": "151515",
    "city": "Москва",
    "street": "Ленина",
    "build": "5",
    "flat": "2",
    "citizenID": "123456789"
}


Информация по туристам, выводимая по номеру путевки (SelectTouristsByDogovorKey)

Метод возвращает детальную информацию по туристам, выводимая по номеру путевки.

  • Формат запроса:
    • POST .../PaymentService/SelectTouristsByDogovorKey?
  • Принимаемые параметры (* – обязательный):
    • dgCode * – номер путевки
  • Возвращаемый результат:
    • key – ключ туриста
    • isMain – признак главного туриста
    • ageType – тип туриста (0 – взрослый, 1 – ребенок, 2 – инфант)
    • sex – пол туриста (0 – мужской, 1 – женский)
    • firstName – имя (лат)
    • lastName – фамилия (лат)
    • patronymic – отчество (лат)
    • firstNameRus – имя (рус)
    • lastNameRus – фамилия (рус)
    • patronymicRus – отчество (рус)
    • phone – телефон
    • email – e-mael
    • birthDay – дата рождения
    • birthPlace – место рождения
    • citizen – гражданство
    • internationalPassportSer – серия загранпаспорта
    • internationalPassportNum – номер загранпаспорта
    • internationalPassportDate – дата выдачи загранпаспорта
    • internationalPassportDateEnd – дата окончания загранпаспорта
    • internationalPassportByWhom – кем выдан загранпаспорт
    • nationalPassportSer – серия паспорта
    • nationalPassportNum – номер паспорта
    • nationalPassportDate – дата выдачи паспорта
    • nationalPassportByWhom – кем выдан паспорт
    • postIndex – индекс
    • city – город
    • street – улица
    • build – дом
    • flat – квартира
    • citizenID – ID туриста
Пример

Вызов метода SelectTouristsByDogovorKey

POST http://localhost:5010/PaymentService/SelectTouristsByDogovorKey?dgCode=AU20050005

Возвращаемый результат метода SelectTouristsByDogovorKey

{
    "key": 111125,
    "isMain": 1,
    "ageType": 0,
    "sex": 0,
    "firstName": "Ivan",
    "lastName": "Ivanov",
    "patronymic": "Ivanovich",
    "firstNameRus": "Иван",
    "lastNameRus": "Иванов",
    "patronymicRus": "Иванович",
    "phone": "+79991234567",
    "email": "ivan@mail.ru",
    "birthDay": "01.02.1980",
    "birthPlace": "Москва",
    "citizen": "Россия",
    "internationalPassportSer": "1111",
    "internationalPassportNum": "222222",
    "internationalPassportDate": "01.05.2022",
    "internationalPassportDateEnd": "01.05.2027",
    "internationalPassportByWhom": "Отделом УФМС год. Москвы",
    "nationalPassportSer": "11",
    "nationalPassportNum": "6665544",
    "nationalPassportDate": "01.05.2030",
    "nationalPassportByWhom": "УФМС 52",
    "postIndex": "151515",
    "city": "Москва",
    "street": "Ленина",
    "build": "5",
    "flat": "2",
    "citizenID": "123456789"
}


Информация по путевкам за период (SelectDogovorsInPeriod)

Метод возвращает детальную информацию по путевкам за период.

  • Формат запроса:
    • GET .../PaymentService/SelectDogovorsInPeriod?
  • Принимаемые параметры (* – обязательный):
    • beginDate * – дата начала отбора
    • endDate * – дата окончания отбора
    • selectionType – тип дополнительного отбора
    • additionalSelection – значение дополнительного отбора

В качестве параметров нужно передать две даты: дата начала и даты окончания. В отбор попадут путевки, у которых дата создания попадает в указанный период. Можно усилить отбор. Для этого нужно передать в качестве третьего параметра число, определяющее тип отбора:

  • 1 – поиск по коду путевки. В качестве четвертого параметра передается код путевки (или его часть). Поиск производится методом LIKE. В отбор попадут все путевки с датой создания в заданном периоду, у которых код путевки содержит строку, указанную в четвертом параметре
  • 2 – поиск производится по ФИО главного туриста. При этом используется следующий алгоритм: берется строка: (Фамилия + " " + Имя + " " + Отчество) и в этой строке ищется строка, переданная в четвертом параметре
  • 3 – поиск по названию партнера. Поиск производится методом LIKE
  • 4 – поиск по ИНН партнера. Поиск производится методом LIKE
  • 5 – поиск по ключу статуса путевки
  • 6 – поиск по ключу путевки
  • 7 – отбор путевок, по которым были сделаны детализации платежей за указанный период (без удаленных платежей). В качестве четвертого параметра можно указать список ключей типов платежей, разделенных знаком ";". Тогда в отборе будут участвовать платежи только с указанным типом. Отбор производится по датам СОЗДАНИЯ платежа.
  • 8 – отбор путевок по ключу тура (tourProgramsId)
  • 9 – отбор путевок по диапазону дат тура (заезда), в этом случае четвертый параметр не заполняется
  • 10 – аналогично варианту 7, только отбор производится по датам ПЛАТЕЖА.

Во всех вариантах кроме 7, 9, 10 в качестве дат используются даты СОЗДАНИЯ ПУТЕВКИ.

  • Возвращаемый результат:
    • dogovorKey – ключ путевки
    • dogovorCode – номер путевки
    • createDate – дата создания путевки
    • createTime – время создания путевки
    • externalNumberPartnerDogovor – номер путевки партнера (поле из Работы менеджеров)
    • price – стоимость путевки
    • payed – оплачено
    • isoCode – ISO-код валюты путевки
    • touristId – ключ главного туриста по путевке
    • lastName – фамилия главного туриста (лат)
    • firstName – имя главного туриста (лат)
    • patronymic – отчество главного туриста (лат)
    • lastNameRus – фамилия главного туриста (рус)
    • firstNameRus – имя главного туриста (рус)
    • patronymicRus – отчество главного туриста (рус)
    • sex – пол туриста (0 – муж, 1 – жен)
    • partnerKey – ключ партнера покупателя путевки
    • partnerCode – код партнера
    • partnerName – название партнера
    • discountSum – сумма скидки по путевке
    • priceNationalRate – стоимость путевки в национальной валюте
    • payedNationalRate – оплачено по путевке в национальной валюте
    • discountNationalRate – сумма скидки по путевке в национальной валюте
    • filialKey – ключ филиала
    • orderStatusCode – ключ статуса путевки
    • orderStatusName – название статуса путевки
    • tourDate – дата заезда
    • daysCount – количество дней по путевке
    • touristCount – количество туристов по путевке
    • countryId – ключ страны
    • countryName – название страны
    • cityId – ключ города
    • cityName – название города
    • tourProgramsId – ключ тура
    • dogovorPartnerKey – ключ договора партнера по путевке
Пример

Вызов метода SelectDogovorsInPeriod

GET http://localhost:5010/PaymentService/SelectDogovorsInPeriod?beginDate=05.01.2022&endDate=31.05.2022&selectionType=1&additionalSelection=AU

Возвращаемый результат метода SelectDogovorsInPeriod

[{
        "dogovorKey": 48690,
        "dogovorCode": "AU2006000C",
        "createDate": "12.05.2022",
        "createTime": "11:51:18",
        "externalNumberPartnerDogovor": null,
        "price": 1200,
        "payed": 600,
        "isoCode": "USD",
        "touristId": 111148,
        "lastName": "Ivanov",
        "firstName": "Ivan",
        "patronymic": "Ivanovich",
        "lastNameRus": "Иванов",
        "firstNameRus": "Иван",
        "patronymicRus": "Иванович",
        "sex": 0,
        "partnerKey": 12667,
        "partnerCode": "658",
        "partnerName": "Партнер-покупатель",
        "discountSum": 10,
        "priceNationalRate": 120000,
        "payedNationalRate": 60000,
        "discountNationalRate": 10000,
        "filialKey": 11587,
        "orderStatusCode": 3,
        "orderStatusName": "Wait-лист",
        "tourDate": "20.06.2022",
        "daysCount": 8,
        "touristCount": 2,
        "countryId": 90,
        "countryName": "Австрия",
        "cityId": 35,
        "cityName": "Вена",
        "tourProgramsId": 100011071,
        "dogovorPartnerKey": 505
    }
]