Система дает возможность регистрировать/отменять подписку и проводить платежи без участия карточных данных клиента. Данный функционал применим для магазинов, работающих по протоколу IntellectMoney, в настройках магазина должна быть включена настройка "Требовать HASH".
Выставляем счёт. Счёт можно выставить как через Merchant API так и с помощью HTML формы.
Оплачиваем, выставленный в пункте 1, счёт банковской картой. Оплатить можно на странице оплаты merchant.intellectmoney.ru или через Merchant API.
В оповещение о платеже, которое отправляется на Result URL, добавляются статусы по запрошенным операциям, хеш уведомлений при этом не изменяется.
При выставлении счёта надо обязательно передать дополнительные параметры для использования карты в цепочке рекуррентных платежей.
В случае передачи recurringType формирование хеша происходит по схеме:
eshopId::orderId::serviceName::recipientAmount::recipientCurrency::recurringType::secretKey |
Имя параметра | Обязательный | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
recurringType | Нет | Тип операции рекарринга, возможные значения:
| ||||||||||||
recurringInfo | Нет | Информация для пользователя, которая показывается в процессе оплаты, перед вводом реквизитов банковской карты | ||||||||||||
recurringSourceInvoiceId | Нет | Номер СКО, которым была инициирована цепочка платежей (счет, по которому был передан recurringType = Activate) Является обязательным если не передан recurringType = Pay |
В оповещении, отправляемом на Result URL придет параметр recurringState
Имя параметра | Описание |
---|---|
recurringState | Activated - Активирован Deactivated - Активация отменена Payed - Оплата завершена Error - Ошибка обработки операции, операция обработана не будет |
Для редактирования операций по расписанию необходимо отправить 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)
Для получения списка операций по расписанию необходимо отправить 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)
$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(); |
Поле | Тип | Описание |
---|---|---|
State | Статусы выполнения запросов | |
SetScheduledOperationData | Bool | 1 - Расписание отредактировано успешно |
Поле | Тип | Описание |
---|---|---|
State | Статусы выполнения запросов | |
GetScheduledOperationData | Список операций |
Поле | Тип | Описание |
---|---|---|
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 | Флаг, указывающий статус активности
|