Имя: Пароль:
1C
1С v8
1c и Qiwi-scoring
0 vvf
 
01.03.14
18:04
Стоит следующая задача
Получать в 1с данные из системы Qiwi-scoring

1. Привожу техническую документацию, что дали из qiwi

//******************************************************

Описание взаимодействия с информационной системой
QIWI Scoring:

1. Общие сведения

Предоставление услуг QIWI Scoring осуществляется посредством работы с веб-сервисом, работающим по протоколу SOAP или HTTPS.

2. Описание веб-сервиса

2.1 Описание процесса информационного взаимодействия
Информационное взаимодействие производится по инициативе системы-потребителя информации. Взаимодействие осуществляется в синхронном режиме.

Схематично процесс взаимодейвтия выглядит следующим образом:





Процесс взаимодействия состоит сз следующих щагов:
1. Система-потребитель создает proxy-класс веб-сервиса на основании WSDL.
2. Система-потребитель вызывает метод веб-сервиса ProcessRequest, передает в этот метод XML-строку надлежащего формата.
3. Веб-сервис возвращает XML с данными по платежам запрошенного пользователя QIWI.



2.2 Формат запроса

Система принимает на вход строку строку XML-документа
      Описание элементов входящего XML:

extId - Уникальный номер запроса (от 2 до 20 латинских букв или цифры);
number - Номер телефона клиента (10 цифр);
startdate – Дата в формате YYYY-MM-DD, начиная с которой должен быть сформирован отчет;
type - Тип возвращаемых периодов. Принимаются следующие значения:
d – сутки
m – месяц
q – квартал
y – год
периоды отсчитываются от даты указанной в элементе <startdate> в большу сторону,
count - Максимальное количество таких периодов в ответе.




Пример запроса:

<request>
<extId>0123456789qwertyuiop</extId>
<number>9012223344</number>
<params startdate="2012-01-01" type="d" count="30"/>
</request>

На этот запрос система-поставщик вернет данные по номеру 9012223344 за период с 2012-01-01 по 2012-02-01 с разбиением по дням.

2.3 Форматы ответа.
В рамках проекта QIWI Scoring предусмотрено несколько вариантов предоставляемого ответа.

2.3.1 Стандартный формат. Предоставляет данные по кол-ву и сумме платежей пользователя QIWI в разрезе периодов.

Пример успешного ответа:
<Response>
    <Result>ОК</Result>
    <ExtId>0123456789qwertyuiop </ExtId>
    <Description>Успешно</Description>
    <Data>
        <Startdate>2012-01-01</Startdate>
        <Type>d</Type>
        <Period number="0"
            <firstdate>2012-01-01</firstdate>
            <Phone count="3" sum="1500.00"/>
        </Period>
        <Period number="1"
            <firstdate>2012-01-02</firstdate>
            <Phone count="10" sum="12501.00"/>
        </Period>
    </Data>
</Response>

Описание элементов возвращаемого ответа:

Result -  Результат обработки Возможные значения:
1) OK
2) Error

ExtId  - Уникальный номер запроса. (Значение берется из значения элемента extId входящего запроса)

Description -  Описание результата обработки Возможные варианты значения:
1) Успешно – в случае, если в элементе <Result> стоист значение OK
2) Описание ошибки – в случае, если в элементе <Result> стоист значение Error

Data - Элемент, содержащий детальное описание по платежам пользователя

Startdate - Дата начала отчетного периода. Значение берется из значения элемента startdate входящего запроса.

Type - Тип периода. Значение берется из значения элемента type входящего запроса.

Period – Элемент, описывающий информацию по платежам пользователя в разрезе одного периода.  Дочерние аттрибуты:
number – аттрибут, обозначает номер периода в рамках запрашиваемых данных

firstdate – Элемент, обозначает дату первого платежа в периоде
Phone – детализация всех платежей на указанный номер телефона. Дочерние аттрибуты:
count – кол-во платежей в периоде
sum – сумма платежей в периоде

2.3.2 Формат с детализаций по регионам. Предоставляет данные по кол-ву и сумме платежей пользователя QIWI в разрезе периодов и регионов (субъектов федерации).

Пример успешного ответа:
<response>
    <result>ОК</result>
    < extId >0123456789qwertyuiop </ extId >
    <Description>Успешно</Description>
    <Data>
        <startdate>2012-01-01</startdate>
        <type>d</type>
        <Period number="0" region_id="Московская обл">
            <firstdate>2013-03-18</firstdate>
            <Phone count="1" sum="50.00"/>
        </Period>
        <Period number="0" region_id="Саха">
            <firstdate>2013-03-18</firstdate>
            <Phone count="2" sum="200.00"/>
        </Period>    
</Data>
    <Data>
        <type>stat</type>
        <summax>1000</summax>
        <summax6mouth>1000</summax6mouth>
        <first>2013-03-18</first>
        <last>2013-04-15</last>
        <maxPeriod>3</maxPeriod>
    </Data>
</Response>

Описание возвращаемого ответа:
Базовая структура XML соответствует документу из пункта 2.3.1, к нему добавляется второй элемент Data с аггрегированными данными.


К  эелементу <Period> добавляется аттрибут region_id принимащий значение субъекта РФ, в котором производились платежи. В случае, если не удается определить регион для данного платежа, в элементе указывается значение «Не определено»

Описание второго элемента Data:
type - статичное значение, всегда равно stat
summax - максимальная сумма платежа за весь запрашиваемый период
summax6mouth - максимальная сумма платежа за последние 6 месяцев запрашиваемого периода
first - дата первого платежа в запрашиваемом периоде
last - дата последнего платежа в запрашиваемом периоде
maxPeriod - максимальный период в днях между платежами



2.3.3 Формат аггрегированных данных за 1 год.

Пример успешного ответа:

<Response>
  <Result>OK</Result>
  <ExtId>123</ExtId>
  <Description>Успешно</Description>
  <Data>
    <Startdate>2013-07-01</Startdate>
    <type>d</type>
    <Period number="17">
      <firstdate>2013-07-18</firstdate>
      <Bank count="0" sum="0" />
      <Utility count="0" sum="0" />
      <Phone count="1" sum="150" />
    </Period>
    <Period number="20">
      <firstdate>2013-07-21</firstdate>
      <Bank count="0" sum="0" />
      <Utility count="0" sum="0" />
      <Phone count="1" sum="200" />
    </Period>
  </Data>
  <AggregatedData>
    <PhoneNumber>9000000000</PhoneNumber>
    <ActualDate>2013-08-31</ActualDate>
    <TotalPaymentsSum>4117</TotalPaymentsSum>
    <Payments6MonthSum>2197</Payments6MonthSum>
    <Payments3MonthSum>800</Payments3MonthSum>
    <Payments1MonthSum>150</Payments1MonthSum>
    <TotalPaymentsCount>32</TotalPaymentsCount>
    <Payments6MonthCount>14</Payments6MonthCount>
    <Payments3MonthCount>5</Payments3MonthCount>
    <Payments1MonthCount>1</Payments1MonthCount>
    <TotalMaxPayment>500</TotalMaxPayment>
    <MaxPayment6Month>500</MaxPayment6Month>
    <MaxPayment3Month>200</MaxPayment3Month>
    <MaxPayment1Month>150</MaxPayment1Month>
    <FirstPayDate>2012-08-05</FirstPayDate>
    <LastPayDate>2013-07-31</LastPayDate>
    <ProviderWithMaximumPaymentsCount>Билайн</ProviderWithMaximumPaymentsCount>
    <ProviderWithMaximumPaymentsSum>Билайн</ProviderWithMaximumPaymentsSum>
    <PaymentsForMaxPaymentsCountProvider>32</PaymentsForMaxPaymentsCountProvider>
    <MaxDifferenceInDays>63</MaxDifferenceInDays>
    <FirstPaymentRegion>Московская обл</FirstPaymentRegion>
    <MaxPaymentRegion>Москва г</MaxPaymentRegion>
    <life_period>0</ period >
  <MAXGAPDAYS>31</MAXGAPDAYS>
  <region_maxpays>Москва г</region_maxpays>
  <region_maxpayscount>27</region_maxpayscount>
  <region_percent>79</region_percent>
  <AverageSum>94</AverageSum>
  <MaxPayHour>0</MaxPayHour>
  <MaxPayHourValue>0</MaxPayHourValue>
  <RosSvyaz_Region>Москва и Московская область</RosSvyaz_Region>
  <RosSvyaz_Operator>МегаФон</RosSvyaz_Operator>
  </AggregatedData>
</Response>

Описание возвращаемого ответа:
Базовая структура XML соответствует документу из пункта 2.3.1, к нему добавляется второй элемент AggregatedData с аггрегированными данными по платежам пользователя QIWI за последний год от текущей даты.

К элементу Period добавляется два дочерних элемента Bank и Utility. В результате:
Элемент Bank – содержит кол-во и сумму платежей в пользу банковских услуг
Элемент Phone – содержит кол-во и сумму платежей в пользу сотовой связи
Элемент Utility – содержит кол-во и сумму платежей в пользу всех остльаных провайдеров

Описание элемента AggregatedData:

PhoneNumber --Номер телефона
ActualDate --Дата актуальности выгрузки
TotalPaymentsSum --Сумма платежей через терминалы за всё время
Payments6MonthSum --Сумма платежей через терминалы за последние 6 месяцев
Payments3MonthSum --Сумма платежей через терминалы за последние 3 месяца
Payments1MonthSum --Сумма платежей через терминалы за последний 1 месяц
TotalPaymentsCount --Количество платежей через терминалы за всё время
Payments6MonthCount --Количество платежей через терминалы за последние 6 месяцев
Payments3MonthCount --Количество платежей через терминалы за последние 3 месяца
Payments1MonthCount --Количество платежей через терминалы за последний 1 месяц
TotalMaxPayment --Сумма максимального платежа за всё время
MaxPayment6Month --Сумма максимального платежа за последние 6 месяцев
MaxPayment3Month --Сумма максимального платежа за последние 3 месяца
MaxPayment1Month --Сумма максимального платежа за последний месяц
FirstPayDate --Дата первого платежа
LastPayDate --Дата последнего платежа
ProviderWithMaximumPaymentsCount --Название провайдера с наиболее частыми платежами
ProviderWithMaximumPaymentsSum --Название провайдера с максимальным платежом
PaymentsForMaxPaymentsCountProvider --Количество платежей наиболее частому провайдеру
MaxDifferenceInDays --Максимальный период между платежами в днях
FirstPaymentRegion --Регион первого платежа
LastPaymentRegion --Регион последнего платежа
MaxPaymentRegion --Регион максимального платежа
life_period  --Время жизни номера: 0 – до месяца, 1 - от месяца до года, 2 – больше года и меньше 3-х лет, 3 –
        больше 3-х лет и до 5 лет, 4 – более 5 лет
MAXGAPDAYS --Максимальный период между платежами в днях за последние 6 месяцев
region_maxpays --Доминирующий регион по кол-ву платежей
region_maxpayscount –Кол-во платежей, произведенных в доминирующем регионе
region_percent –Процент пополнения в доминирующем регионе (по кол-ву платежей)
AverageSum –Средняя сумма платежа за весь период
MaxPayHour –Основное время пополнения  (час в сутках)
MaxPayHourValue –Максимальное кол-во платежей, произведенное в основное время пополнения.
RosSvyaz_Region –Регион телефона по ресурсу нумерации РосСвязи.  
RosSvyaz_Operator –Оператора телефона по ресурсу нумерации РосСвязи.  


2.3.4 Ответ в случае отсутствия платежей по указаноому номеру.


Если по указанному номеру телефона не было платежей, запрос все равно считается успешным, но элементы Period могут отсутствовать.

<Response>
    <Result>ОК</Result>
    <ExtId>0123456789qwertyuiop </ExtId>
    <Description>Успешно</Description>
    <Data>
<Startdate>2010-01-03</Startdate>
<type>m</type>
</Data>
</Response>

2.3.5 Ответ в случае ошибки обработки запроса

Пример ответа в случае некорректного формата запроса
<Response>
    <Result>Error</Result>
    <Description>Описание ошибки</Description>
</Response>

3. Ограничения

Система QIWI Scoring предоставляет данные максимум за 1 год от первого дня текущего месяца.

Тестовая версия веб-сервиса возвращает данные только по 1 номеру телефона (9000000000) не зависимо от запрашиваемого номера

Для доступа к рабочему веб-сервису необходимо прислать свой IP адрес и получить клиентский сертификат.

4. Доступ к веб-сервису

4.1 SOAP
Для тестирования следует использовать веб-серис, расположеный по адресу http://ratservice.gc-master.ru/Service.svc

Рабочий веб-сервис расположен по адресу https://qiwiscoring.gc-master.ru/service.svc - ограничения по доступу описаны в пункте 3.

4.2 HTTP
Для тестирования следует отправлять POST запросы на адрес http://ratservice.gc-master.ru/scorephone.aspx

Для работы с полноценной системой QIWI Scoring следует отправлять POST запросы на адрес  https://qiwiscoring.gc-master.ru /scorephone.aspx - ограничения по доступу описаны в пункте 3.

//******************************************************


2. Qiwi прислала сертификат, который был успешно установлен на сервер.
3. Написал обработку со следующим кодом


    ИмяСертификата = "LOCAL_MACHINE\My\ScoringCertificate";
    
    Запрос = "<request>" +
            "<extId>79279066369qwerty</extId>" +
            "<number>79279066369</number>" +
            "<params startdate=""2013-09-01"" type=""m"" count=""6""/>" +
            "</request>";

    
    // Запрос
    //Попытка
        пОбъект= Новый COMObject("WinHttp.WinHttpRequest.5.1");
        пОбъект.Option(9,80);
        // Попробовать закомментирвать следующую строку
        пОбъект.Option(4,13056);
        Тм = пОбъект.SetClientCertificate(ИмяСертификата);
        пОбъект.Open("POST","https://qiwiscoring.gc-master.ru/scorephone.aspx",0);
        пОбъект.SetRequestHeader("Accept-Language", "ru");
        пОбъект.SetRequestHeader("Accept-Charset","Windows-1251");
        пОбъект.setRequestHeader("Content-Language", "ru");
        пОбъект.setRequestHeader("Content-Charset", "Windows-1251");
        пОбъект.setRequestHeader("Content-Type","text/xml; charset=Windows-1251");
        пОбъект.Send(Запрос);
        Сообщить(пОбъект.ResponseText());

4. При запуске обработки выходит следующая ошибка

{Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (Send)
        пОбъект.Send(Запрос);
по причине:
Произошла исключительная ситуация (WinHttp.WinHttpRequest): The certificate authority is invalid or incorrect


Как решить проблему непонятно, техподдержка qiwi не в силах помочь
1 Wobland
 
01.03.14
18:09
прям беда. что планируешь делать?
2 xReason
 
01.03.14
18:14
c QIwi лучше не связываться сдохнуть может внезапно
3 vvf
 
01.03.14
18:23
Есть ответы по-существу решения проблемы?
4 shuhard
 
01.03.14
18:26
(3) используй иную среду, например php
5 Маленький Мук
 
01.03.14
18:35
Проблема с сертификатом скорее всего. А так попробуй из php или из 1с постучись к ним на тест без сартификата в номер 9000000000
6 mistеr
 
02.03.14
00:01
(0) Километровая портянка копипасты не по делу отбивает желание отвечать. Учти на будущее.

Qiwi не при чем, погугли как заставить WinHttp работать с клиентскими сертификатами. Это большая редкость в вебе, так что возможны и баги.