--- tags: ОР ЛКК --- # Оформление займа Протокол: `http` `https` Адрес: `server/base/hs/api/loanProcessing/{название_метода}` Отправка запроса происходит после нажатия кнопки расчитать в калькуляторе, если поле **first_design** = Ложь. Иначе - процесс взятия займа через анкету. При успешном запросе возвращает список json. При отсутствии вернёт ошибочный результат ## Начало оформление договора ==POST== `start` **Параметры** * client_hash - хэш клиента * ip **Тело запроса** ```json= { "type": "ConsumerLoan", "sum":8000, "period":5, "type_period":"Month", "step_period":1 } ``` Данные для тела запроса - то, что выбрал клиент при расчитать, и часть что пришло на лимитах * type - тип (рассрочка/займ) в зависимости от того на какой закладке калькулятора нажимали кнопку рассчитать. Возможные значения: ==Installments/ConsumerLoan== **Описание ответа** ```json= { "error":false, "description":"", "response":{ "result":true, "description":"", "contract_num":"З21НвАР008300010", "text_no_card":"Обратитесь в ближайшее отделление...", "contract_conditions":{ "insurance_available":false, "sum":8000, "insurance_sum":0, "period":"5 месяцев", "rate_daily":"0,8% в день", "rate_annual":"292% в год" }, "insurance":true, "next":true } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description - **contract_num**: номер сформированного договора - **contract_conditions**: данные условий по конракту - **insurance_available**: признак доступности страховки у клиента - **sum**:сумма , в т.ч. сумма страховкиs - **insurance_sum**: сумма страховки - **period**: период займа по договору - **rate_daily**: процентная ставка в день - **rate_annual**: годовая процентная ставка - **result**: результат операции - **description**: описание результата операции при result:false - **insurance**: признак необходимости согласия на страховку - если здесь true, то перед следующим шагом нужно в окне показать галку согласия на страховку, и результат выбора клиентом пероедать на следующий этап - **next**: признак наличия следующего шага - **text_no_card**: текст сообщения при отсутствии карты Арифметика Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Продолжение оформление договора ==GET== `continue` **Параметры** * client_hash - хэш клиента * ip * contract_num - номер договора пришедшего на start * insurance - булево, выбор клиента в поле фладка страховки **Описание ответа** ```json= { "error":false, "description":"", "response":{ "contract_num":"З21НвАР008300010", "base_source":"%D0%A0%D0%91%D0%9E-%D0%9D%D1%81%D0%BA", "key":"9725D3C8187047E49FE90E0405AC41847F447D85E58CE54CFBCCABE22A1BA957", "documents":[ { "name":"Согласия займ", "extension":"pdf", "data":"Двоичные данные в base64", "agreement":false } ], "contract_conditions":{ "insurance_available":false, "sum":8000, "insurance_sum":0, "period":"5 месяцев", "rate_daily":"0,8% в день", "rate_annual":"292% в год" }, "insurance":true, "next":true, "result":true, "description":"", "need_sign_agree":false } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description - **base_source**: код базы, где создан договор - **contract_num**: номер сформированного договора - **key**: ключ данных пакета документов, - **documents_signed**: признак, что документы подписаны(для траншей), - **documents**: массив данных документов - **name**: наименование файла - **agreement**: признак соглашения ПЭП - **extension**: расширение - **data**: двоичные данные в base64 - **contract_conditions**: данные условий по конракту - **insurance_available**: признак доступности страховки у клиента - **sum**:сумма , в т.ч. сумма страховкиs - **insurance_sum**: сумма страховки - **period**: период займа по договору - **rate_daily**: процентная ставка в день - **rate_annual**: годовая процентная ставка - **result**: результат операции - **description**: описание результата операции при result:false - **insurance**: признак необходимости согласия на страховку - **next**: признак наличия следующего шага - **need_sign_agree** - нужно ли согласие на ПЭП - надо посмотреть что мы с ним делали ранее, это я подставляю Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Отправить смс клиенту для подписания пакета документов ==GET== `getSms` **Параметры** * client_hash - хэш клиента * ip * key - полученный на прошлом этапе * repeat - признак повторной отправки смс **Описание ответа** ```json= { "error":false, "description":"", "response":{ "result":true, "code":"D3918389A738B4E770C952DED1EE3E83B200D9F5", "code_length":5, "time":180, "key":"9725D3C8187047E49FE90E0405AC41847F447D85E58CE54CFBCCABE22A1BA957", "code_test":"25053" } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description - **result**: результат операции, - **description**: описание результата операции при result:false, - **code**: код подписи в формате хеша SHA1, - **code_length**: длина кода(число), по умолчанию равно 5 при значении 0 - **time**: период, через который можно отправить запрос на отправку кода повторно (секунды), - **key**: ключ данных - **code_test** - открытый код смс (только в тестовой БД) Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Подписание пакета документов кодом из смс ==GET== `sign` **Параметры** * client_hash - хэш клиента * ip * key - полученный на прошлом этапе * contract_num - номер договора (есть и на старте и на продолжении) * code - введенный код пользователем (но изначально можно проверить по полю code операции getSms что хэши совпдают) **Описание ответа** ```json= { "error":false, "description":"", "response":{ "result":true, "description":"" } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Отправить смс клиенту для подписания пакета документов ==GET== `getSms` **Параметры** * client_hash - хэш клиента * ip * key - полученный на прошлом этапе * repeat - признак повторной отправки смс **Описание ответа** ```json= { "error":false, "description":"", "response":{ "result":true, "code":"D3918389A738B4E770C952DED1EE3E83B200D9F5", "code_length":5, "time":180, "key":"9725D3C8187047E49FE90E0405AC41847F447D85E58CE54CFBCCABE22A1BA957", "code_test":"25053" } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description - **result**: результат операции, - **description**: описание результата операции при result:false, - **code**: код подписи в формате хеша SHA1, - **code_length**: длина кода(число), по умолчанию равно 5 при значении 0 - **time**: период, через который можно отправить запрос на отправку кода повторно (секунды), - **key**: ключ данных - **code_test** - открытый код смс (только в тестовой БД) Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Этап добавления карт По кругу гоняем этапы - продолжение, запрос смс, подписание, пока на продолжении не прийдет * result: true и next : false - означает конец оформления, * либо - result: true; next : true; need_card: true - это значит этап добавления карт (для удобства сделал один параметр - card_stage true/false - можешь ориентироваться либо на него, либо на три описаных выше что приходят от них) Этот этап возникает на ответе операции **Продолжение оформление договора** поэтому сначала рассмотрим что будет в ответе, а после что отправлять. Все параметры идентичны тому, что приходят в **Продолжение оформление договора** за исключением одного - массив **cards** - в нем будут указаны доступные для выбора карты. Далее есть два варианта * Клиент выбирает карту из списка пришедшего в массиве cards - в этом случае после выбора отправляем запрос на продолжение, все стандартно. НО дополнительно передаем два параметра, указанные ниже. После отправки продолжаем гонять цикл продолжение, запрос смс, подписание. * card - номер выбранной карты * card_accepted = true * Клиент хочет добавить новую карту - также отправляем запрос на продолжение со стандартными параметрами, дополнительно передаем два параметра - * card_accepted = false * redirect_url - заполняется URL для возврата в ЛК В этом случае прийдет такой ответ: ```json= { "error":false, "description":"", "response":{ "result":true, "need_card":false, "description":"", "error_description":"", "link":"https://cs.demo.korona.net/cardencrypt/mfo-acq/full.html?&backurl=http://146.120.88.162:80/cerd_gentest_ext/hs/redir/card/9A946B5BDF95600227DCC22415F3C7E9&rnd=e0538b8789a540f1badffd245994f348&svc=ips", "insurance":false, "next":true, "need_sign_agree":false, "card_stage":false } } ``` Здесь интересует поле link - туда мы и отправляем клиента для ввода карты. После редиректа обратно к нам - отправляем запрос на **Получение состояния регистрации карты** Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа) ## Получение состояния регистрации карты ==GET== `getCardState` **Параметры** * client_hash - хэш клиента * ip * contract_num - номер договора **Описание ответа** ```json= { "error":false, "description":"", "response":{ "result": true/false, "status": true/false, "available_actions": [ "continue"/"change_card" ], "success_reg": true/false, "cards": [<массив карт клиента>] } } ``` **Параметры** В случае ошибки - их result подставится в наш error и description - **success_reg** - интересует только этот параметр, если он true, значит регистрация карты на стороннем сервисе прошла успешно, иначе нет После этой операции открывается окно Ошибочный ответ, см. [пример](/E1rcq73tSPODd0Ds-6qT9w#Пример-ошибочного-ответа)