Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Описание

Система дает возможность регистрировать/отменять подписку и проводить платежи без участия карточных данных клиента. Данный функционал применим для магазинов, работающих по протоколу IntellectMoney, в настройках магазина должна быть включена настройка "Требовать HASH".

Схема работы

  • Выставляем счёт. Счёт можно выставить как через Merchant API так и с помощью HTML формы.

  • Оплачиваем, выставленный в пункте 1, счёт банковской картой. Оплатить можно на странице оплаты merchant.intellectmoney.ru или через Merchant API.

  • В оповещение о платеже, которое отправляется на Result URL, добавляются статусы по запрошенным операциям, хеш уведомлений при этом не изменяется. 

    Выставление счёта

    При выставлении счёта надо обязательно передать дополнительные параметры для использования карты в цепочке рекуррентных платежей.

    В случае передачи recurringType формирование хеша происходит по схеме: 

    Code Block
    languagexml
    titleФормирование hash- подписи
    eshopId::orderId::serviceName::recipientAmount::recipientCurrency::recurringType::secretKey

    Имя параметра

    Обязательный

    Описание

    recurringType

    Нет

    Тип операции рекарринга, возможные значения:

    НазваниеНазначениеОписаниеActivateДля регистрации цепочкиКарта регистрируется в цепочке платежей, дальше для всех операций с этой картой нужно передавать оплаченный счет в поле recurringSourceInvoiceId, остальные операции над выставленными счетами проводится системой в автоматическом режиме без участия пользователяDeactivateДля отмены регистрации цепочкиPayДля оплатыrecurringInfoНетИнформация для пользователя, которая показывается в процессе оплаты, перед вводом реквизитов банковской картыrecurringSourceInvoiceIdНет

    Номер СКО, которым была инициирована цепочка платежей (счет, по которому был передан recurringType = Activate)

    Является обязательным если не передан recurringType = Pay

    Оповещение на Result URL

    В оповещении, отправляемом на Result URL придет параметр recurringState

    Имя параметра

    Описание

    recurringState

    Activated - Активирован

    Deactivated - Активация отменена

    Payed - Оплата завершена

    Error - Ошибка обработки операции, операция обработана не будет

    SetScheduledOperation() — РЕДАКТИРОВАНИЕ ОПЕРАЦИЙ ПО РАСПИСАНИЮ

    Для редактирования операций по расписанию необходимо отправить GET- или POST-запрос на следующий адрес URL:
    https://api.intellectmoney.ru/personal/payment/setScheduledOperation

    В уведомлении придет параметр sourceInvoiceId

    Название

    Имя параметра

    Обязательный

    Описание

    Ключ доступаUserTokenДаКлюч доступа клиента к API, запрашиваемый операцией аутентификации клиента Рекуррентые платежи.

    Номер операции

    OperationId

    Нет

    Номер операции для ее изменения, если не передать создается новая операция (GUID)

    Объект операции

    ObjectId

    Да

    Объект источник, например:

    • SourceInvoiceId - для операции рекарринга
    Тип операции
    ObjectTypeVal
    ДаТип регулярной операции (1 - Recurring)
    ПараметрыParamsНет

     Дополнительные параметры в формате JSON, например:

    {'Amount':15}

    План выполненияRepeatPlanДаCron expressions запуска задачи (можно использовать http://www.cronmaker.com/)План повторов выполненияRetryOnFailPlanНетCron expressions запуска задачи (можно использовать http://www.cronmaker.com/)Количество повторов выполненияRetryOnFailCountНетКоличество повторных попыток выполнения (целое число)МногопоточностьIsSingleДа

    Флаг, указывающий возможность запуска паралельных тасков

    • 0 - один поток
    • 1 - не ограниченное количество потоков
    ПерезапускFireOnSkipДаФлаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1)АктивностьStateДа

    Флаг, указывающий статус активности

    • 0 - Активен
    • 1 - Выключен

    В ответ возвращается код операции и возможны 3 варианта:

    1. Запрос обработался моментально. Ответ типа <Response> будет содержать структуру <SetScheduledOperationData> (синхронная обработка). (Код операции - 0)

    2. Запрос был поставлен в очередь на обработку. Ответ типа <Response> будет содержать идентификатор операции, по которому можно запросить результат выполнения операции (асинхронная обработка). (Код операции - 1)

    3. Ошибка обработки операции. Операция выполнена не будет. (Код операции - 2)

    GetScheduledOperation() — получение списка операций по расписанию

    Для получения списка операций по расписанию необходимо отправить GET- или POST-запрос на следующий адрес URL:
    https://api.intellectmoney.ru/personal/payment/getScheduledOperation

    Название

    Имя параметра

    Обязательный

    Описание

    Ключ доступаUserTokenДаКлюч доступа клиента к API, запрашиваемый операцией аутентификации клиента Рекуррентые платежи.

    Номер операции

    OperationId

    Нет

    Номер операции для ее изменения, если не передать создается новая операция (GUID)

    Объект операции

    ObjectId

    Нет

    Объект источник, например:

    • SourceInvoiceId - для операции рекарринга
    Тип операции
    ObjectTypeVal
    Нет
    Тип регулярной операции (1 - Recurring)
    ПараметрыParamsНет

     Дополнительные параметры в формате JSON, например:

    {'Amount':15}

    План выполненияRepeatPlanНет
    Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/)План повторов выполненияRetryOnFailPlanНетCron expressions запуска задачи (можно использовать http://www.cronmaker.com/)Количество повторов выполненияRetryOnFailCountНетКоличество повторных попыток выполнения (целое число)МногопоточностьIsSingleНет

    Флаг, указывающий возможность запуска паралельных тасков

    • 0 - один поток
    • 1 - не ограниченное количество потоков
    ПерезапускFireOnSkipНет
    Флаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1)АктивностьStateНет

    Флаг, указывающий статус активности

    • 0 - Активен
    • 1 - Выключен
    Дата начала выборкиDateFromНетПограничные значения даты изменения расписания ММ.ДД.ГГГГ.Дата окончания выборкиDateToНетПограничные значения даты изменения расписания ММ.ДД.ГГГГ.Ограничение выборки по количеству объектовSkipНет

    Количество объектов, пропускаемых перед отдачей

    Ограничение выборки по количеству объектовTakeДа

    Ограничение на количество возвращаемых объектов.

    В ответ возвращается код операции и возможны 3 варианта:

    1. Запрос обработался моментально. Ответ типа <Response> будет содержать структуру <GetScheduledOperationData> (синхронная обработка). (Код операции - 0)

    2. Запрос был поставлен в очередь на обработку. Ответ типа <Response> будет содержать идентификатор операции, по которому можно запросить результат выполнения операции (асинхронная обработка). (Код операции - 1)

    3. Ошибка обработки операции. Операция выполнена не будет. (Код операции - 2)

    Пример на языке программирования PHP

    Code Block
    languagephp
    themeConfluence
    titleПример реализации
    $urlMerchantApi = "https://dev.app.server:1443/usemyachkin/merchant/";
    
    
    
    function curlRequest($func, $data) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_URL, $urlMerchantApi . $func . "" . $data);
        //curl_setopt($ch, CURLOPT_USERPWD, "im" . ":" . "smartim");
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_exec($ch);
        print_r($ch);
        curl_close($ch);
    }
    
    function createInvoice() {
        $orderId = '86543189414563218';
        $recipientAmount = number_format(floatval(10), 2, '.', '');
        $recipientCurrency = 'TST';
        $serviceName = 'test';
        $eshopId = '450090';
        $secretKey = '<56id786ih89';
        $recurringType = "Activate";
        $userName = "Payer Name";
        $email = "s.zhukov@intellectmoney.ru";
    
        $purchaseHash = md5($eshopId . "::" . $orderId . "::" . $serviceName . "::" . $recipientAmount . "::" . $recipientCurrency . "::" . $recurringType . "::" . $secretKey);
        $hash = md5("$eshopId::$orderId::$serviceName::$recipientAmount::$recipientCurrency::$userName::$email::::::::::::::::$secretKey");
    
        $data = array(
            'eshopId' => $eshopId,
            'recipientAmount' => $recipientAmount,
            'recipientCurrency' => $recipientCurrency,
            'email' => $email,
            'userName' => $userName,
            'serviceName' => $serviceName,
            'orderId' => $orderId,
            'recurringType' => $recurringType,
            'purchaseHash' => $purchaseHash,
            'hash' => $hash,
        );
        $queryString = http_build_query($data);
        curlRequest('createInvoice', $queryString);
    }
    function getToken(){
        $urlGetToken = "https://api.intellectmoney.ru/personal/user/getUserToken";
        $login = "s.zhukov@intellectmoney.ru"; 
        $password = "W56gh786gj89";
        $result = file_get_contents($urlGetToken."?Login=".$login."&Password=".$password);
        $xml = new SimpleXMLElement($result);
        echo $userToken = $xml->Result->UserToken[0];
        
        return $userToken;
    }
    function SetScheduledOperation() {
        $userToken = getToken();
        $operationId = "1BDB57A8-956F-4B0A-8C2B-BCE487B23CE6";
        $objectId = "SourceInvoiceId";
        $objectTypeVal = 1;
        $params = '{"Amount":"15"}';
        $repeatPlan = "0 0 12 1/1 * ? *";
        $retryOnFailPlan = "0 0/15 * 1/1 * ? *";
        $retryOnFailCount = 3;
        $fireOnSkip = 1;
        $state = 1;
    
        $data = array(
            'UserToken' => $userToken,
            'OperationId' => $operationId,
            'ObjectId' => $objectId,
            'ObjectTypeVal' => $objectTypeVal,
            'Params' => $params,
            'RepeatPlan' => $repeatPlan,
            'RetryOnFailPlan' => $retryOnFailPlan,
            'RetryOnFailCount' => $retryOnFailCount,
            'FireOnSkip' => $fireOnSkip,
            'State' => $state,
            'DateFrom' => $dateFrom,
            'DateTo' => $dateTo,
            'Skip' => $skip,
            'Take' => $take,
        );
        $queryString = http_build_query($data);
    
        curlRequest('GetScheduledOperation', $queryString);
    }
    function GetScheduledOperation() {
        $userToken = getToken();
        $operationId = "1BDB57A8-956F-4B0A-8C2B-BCE487B23CE6";
        $objectId = "SourceInvoiceId";
        $objectTypeVal = 1;
        $params = '{"Amount":"15"}';
        $repeatPlan = "0 0 12 1/1 * ? *";
        $retryOnFailPlan = "0 0/15 * 1/1 * ? *";
        $retryOnFailCount = 3;
        $fireOnSkip = 1;
        $state = 1;
        $dateFrom = "10.10.2017";
        $dateTo = "10.17.2017";
        $skip = 0;
        $take = 1;
    
        $data = array(
            'UserToken' => $userToken,
            'OperationId' => $operationId,
            'ObjectId' => $objectId,
            'ObjectTypeVal' => $objectTypeVal,
            'Params' => $params,
            'RepeatPlan' => $repeatPlan,
            'RetryOnFailPlan' => $retryOnFailPlan,
            'RetryOnFailCount' => $retryOnFailCount,
            'FireOnSkip' => $fireOnSkip,
            'State' => $state,
            'DateFrom' => $dateFrom,
            'DateTo' => $dateTo,
            'Skip' => $skip,
            'Take' => $take,
        );
        $queryString = http_build_query($data);
    
        curlRequest('GetScheduledOperation', $queryString);
    }
    
    createInvoice();
    SetScheduledOperation();
    GetScheduledOperation();

    IntellectMoney предлагает функционал для управления подписками, а также проведение платежей без использования данных банковской карты клиента.

    Перед началом работы с рекуррентными платежами, ознакомьтесь с инструкцией по подготовке к работе с операциями по расписанию.

    Порядок работы

    1. Привязка карты покупателя к счету.
    2. Создание операций по расписанию.
    3. Редактирование операций по расписанию.
    4. Отображений операций по расписанию.
    5. Деактивация операций по расписанию.

    Бизнес-процесс

    1. Привязка карты

    1. Покупатель на сайте магазина выбирает товар или услугу и заполняет платежную форму, указывая, хочет ли привязать свою карту.
    2. Магазин отправляет запрос на оплату в IntellectMoney.
    3. После подтверждения данных покупателем, IntellectMoney перенаправляет на страницу оплаты и уведомляет магазин по "Result URL" о создании счета.
    4. Покупатель оплачивает счет банковской картой, и IntellectMoney переводит покупателя на страницу успешной оплаты по "Success URL", параллельно отправляет уведомление на "Result URL" о завершении оплаты. В уведомлении на "Result URL" будет указан параметр "recurringState = Activated", означающий, что карта привязана успешно, подробнее в описание уведомлений от системы IntellectMoney при работе с операциями по расписанию.

    Пример создания счета для работы с операциями по расписанию.

    2. Создание операций

    Доступно после активации карты (оплата СКО созданного в пт. 1). 

    1. Покупателю на сайте магазина предоставляется возможность создать и настроить операцию по расписанию: это может быть страница личного кабинета или страница, где пользователь точно идентифицирован. Здесь покупатель может увидеть активные подписки и управлять ими. Если доступ к странице был осуществлён до подтверждения оплаты, статус операции будет отображаться как "Выполняется", после получения на "Result URL" уведомления, статус операции изменится в соответствии со статусом "recurringState". Как только платёж подтверждён, статус обновляется в соответствии с результатом "Успешно" или "Ошибка" (в последнем случае рекомендуется обратиться в поддержку по адресу ts@intellectmoney.ru).
    2. Покупатель выбирает опцию создать операцию по расписанию и заполняет все нужные поля, например: сумма списания с привязанной карты, дата окончания, дата регулярного списания денежных средств, после чего нажимает подтвердить.
    3. Магазин отправляет запрос в IntellectMoney на создание операции по расписанию.

    Пример создания операций по расписанию.

    3. Редактирование операций

    Аналогично созданию, с единственной разницей, дополнительно в запросе передается параметр Operation, который является идентификатором операции CronOperationId, полученный в результате создания операции по расписанию. 

    Пример редактирования операций по расписанию.

    4. Отображение операций

    Для просмотра операций по расписанию необходимо отправить запрос в IntellectMoney.

    Пример получения операций по расписанию.

    5. Деактивация операций

    Для отключения всех операций по расписанию и запланированных списаний по исходному счету необходимо отправить запрос в IntellectMoney. 

    Пример деактивации операций по расписанию.

    Требования МПС

    1. По рекуррентным платежам возможно четыре не успешные попытки в течение 16-календарных дней, при получении отказа с кодом: 
      • 05 - авторизация отклонена, оплату не проводить.
      • 51 - недостаточно средств на счёте.
      • 61 - сумма авторизации превысила расходный лимит по карте.
      • 65 - превышен лимит расходных операций по счёту.

      Warning
      Если в течение этого срока не был получен положительный код авторизации, то дальнейшие попытки проведения платежа будут прекращены.


    2. Если отказ в авторизации карты произошел с кодом:

      • 14 - недействительный номер карты.
      • 54 - истёк срок действия карты, изъятию не подлежит.
      • 57 - данный тип транзакции не предусмотрен для предъявленной карты.

      Warning
      Следующая попытка будет запрещена и рекуррентный платеж отменен.


    3. В случае получения других ошибок, обработка будет происходить в соответствии указанным параметрам "RetryOnFailPlan", "RetryOnFailCount", которые были указаны при создание или редактирование операций.

    Онлайн-касса

    Чеки для рекуррентных платежей формируются автоматически с одной позицией на сумму счёта, установка НДС выполняется согласно настройкам онлайн-кассы магазина в личном кабинете, наименование позиции устанавливается из описания счёта или из параметра "ParamsJson".

    Типы данных

    Anchor<SetScheduledOperationData><SetScheduledOperationData><SetScheduledOperationData>

    Поле

    Тип

    Описание

    State

    <RequestState>

    Статусы выполнения запросов

    SetScheduledOperationData

    Bool

    1 - Расписание отредактировано успешно
    0 - Ошибки, расписание не отредактировано

    Anchor<GetScheduledOperationData><GetScheduledOperationData><GetScheduledOperationData>

    Поле

    Тип

    Описание

    State

    <RequestState>

    Статусы выполнения запросов

    GetScheduledOperationData

    List<ScheduledOperationData>

    Список операций

    Anchor<ScheduledOperationData><ScheduledOperationData><ScheduledOperationData>

    Поле

    Тип

    Описание

    OperationId
    GUID
    Номер операции для ее изменения, если не передать создается новая операция (GUID)
    ObjectId
    long

    Объект источник, например:

    • SourceInvoiceId - для операции рекарринга
    ObjectTypeValtinyintТип регулярной операции (1 - Recurring)Paramstext

    Дополнительные параметры в формате JSON, например:

    {'Amount':15}

    RepeatPlantextCron expressions запуска задачи (можно использовать http://www.cronmaker.com/)RetryOnFailPlantextCron expressions запуска задачи (можно использовать http://www.cronmaker.com/)RetryOnFailCounttextКоличество повторных попыток выполнения (целое число)IsSinglebool

    Флаг, указывающий возможность запуска паралельных тасков

    • 0 - один поток
    • 1 - не ограниченное количество потоков
    FireOnSkipboolФлаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1)Statebool

    Флаг, указывающий статус активности

  • 0 - Активен
  • 1 - Выключен

    Table of Contents
    maxLevel2