Page tree

Versions Compared

Key

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

Описание

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

Схема работы

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

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

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

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

    Описание

    recurringState

    Статус, по итогам регистрации операции в банке эквайере:

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

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

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

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

  4. Регистрация регулярной операции через документацию по Операции по расписанию


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

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

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

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

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

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

Описание

recurringType

Нет

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

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

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

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

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

Code BlocklanguagephpthemeConfluence

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

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

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

Описание

recurringState

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

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

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

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

titleПример выставления счета через Merchant API


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();


Типы данных

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