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 | ||||
---|---|---|---|---|
| ||||
eshopId::orderId::serviceName::recipientAmount::recipientCurrency::recurringType::secretKey |
Имя параметра | Обязательный | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
recurringType | Нет | Тип операции рекарринга, возможные значения:
| ||||||||||||
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 | Да | Объект источник, например:
|
Тип операции | ObjectTypeVal | Да | Тип регулярной операции (1 - Recurring) |
Параметры | Params | Нет | Дополнительные параметры в формате JSON, например: {'Amount':15} |
План выполнения | RepeatPlan | Да | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
План повторов выполнения | RetryOnFailPlan | Нет | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
Количество повторов выполнения | RetryOnFailCount | Нет | Количество повторных попыток выполнения (целое число) |
Многопоточность | IsSingle | Да | Флаг, указывающий возможность запуска паралельных тасков
|
Перезапуск | FireOnSkip | Да | Флаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1) |
Активность | State | Да | Флаг, указывающий статус активности
|
В ответ возвращается код операции и возможны 3 варианта:
Запрос обработался моментально. Ответ типа <Response> будет содержать структуру <SetScheduledOperationData> (синхронная обработка). (Код операции - 0)
Запрос был поставлен в очередь на обработку. Ответ типа <Response> будет содержать идентификатор операции, по которому можно запросить результат выполнения операции (асинхронная обработка). (Код операции - 1)
Ошибка обработки операции. Операция выполнена не будет. (Код операции - 2)
GetScheduledOperation() — получение списка операций по расписанию
Для получения списка операций по расписанию необходимо отправить GET- или POST-запрос на следующий адрес URL:
https://api.intellectmoney.ru/personal/payment/getScheduledOperation
Название | Имя параметра | Обязательный | Описание |
---|---|---|---|
Ключ доступа | UserToken | Да | Ключ доступа клиента к API, запрашиваемый операцией аутентификации клиента Рекуррентые платежи. |
Номер операции | OperationId | Нет | Номер операции для ее изменения, если не передать создается новая операция (GUID) |
Объект операции | ObjectId | Нет | Объект источник, например:
|
Тип операции | ObjectTypeVal | Нет | Тип регулярной операции (1 - Recurring) |
Параметры | Params | Нет | Дополнительные параметры в формате JSON, например: {'Amount':15} |
План выполнения | RepeatPlan | Нет | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
План повторов выполнения | RetryOnFailPlan | Нет | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
Количество повторов выполнения | RetryOnFailCount | Нет | Количество повторных попыток выполнения (целое число) |
Многопоточность | IsSingle | Нет | Флаг, указывающий возможность запуска паралельных тасков
|
Перезапуск | FireOnSkip | Нет | Флаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1) |
Активность | State | Нет | Флаг, указывающий статус активности
|
Дата начала выборки | DateFrom | Нет | Пограничные значения даты изменения расписания ММ.ДД.ГГГГ. |
Дата окончания выборки | DateTo | Нет | Пограничные значения даты изменения расписания ММ.ДД.ГГГГ. |
Ограничение выборки по количеству объектов | Skip | Нет | Количество объектов, пропускаемых перед отдачей |
Ограничение выборки по количеству объектов | Take | Да | Ограничение на количество возвращаемых объектов. |
В ответ возвращается код операции и возможны 3 варианта:
Запрос обработался моментально. Ответ типа <Response> будет содержать структуру <GetScheduledOperationData> (синхронная обработка). (Код операции - 0)
Запрос был поставлен в очередь на обработку. Ответ типа <Response> будет содержать идентификатор операции, по которому можно запросить результат выполнения операции (асинхронная обработка). (Код операции - 1)
Ошибка обработки операции. Операция выполнена не будет. (Код операции - 2)
Пример на языке программирования PHP
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
$urlMerchantApi = "https://api.intellectmoney.ru/personal/payment";
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 = "";
$password = "";
$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>
<SetScheduledOperationData> | |
<SetScheduledOperationData> |
Поле | Тип | Описание |
---|---|---|
State | Статусы выполнения запросов | |
SetScheduledOperationData | Bool | 1 - Расписание отредактировано успешно |
Anchor <GetScheduledOperationData> <GetScheduledOperationData>
<GetScheduledOperationData>
<GetScheduledOperationData> | |
<GetScheduledOperationData> |
Поле | Тип | Описание |
---|---|---|
State | Статусы выполнения запросов | |
GetScheduledOperationData | Список операций |
Anchor <ScheduledOperationData> <ScheduledOperationData>
<ScheduledOperationData>
<ScheduledOperationData> | |
<ScheduledOperationData> |
Поле | Тип | Описание |
---|---|---|
OperationId | GUID | Номер операции для ее изменения, если не передать создается новая операция (GUID) |
ObjectId | long | Объект источник, например:
|
ObjectTypeVal | tinyint | Тип регулярной операции (1 - Recurring) |
Params | text | Дополнительные параметры в формате JSON, например: {'Amount':15} |
RepeatPlan | text | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
RetryOnFailPlan | text | Cron expressions запуска задачи (можно использовать http://www.cronmaker.com/) |
RetryOnFailCount | text | Количество повторных попыток выполнения (целое число) |
IsSingle | bool | Флаг, указывающий возможность запуска паралельных тасков
|
FireOnSkip | bool | Флаг, указывающий необходимость создания всех запланированных задач, в случае их непредвиденного пропуска (0 или 1) |
State | bool | Флаг, указывающий статус активности
|
Table of Contents | ||
---|---|---|
|