Пользователь БД

Для подключения к БД для приема платежей из внешних систем необходимо использовать специального пользователя AIS_PAYMENTS.

Инициализация сессии

В самом начале работы с БД необходимо инициализировать сессию с помощью процедуры MAIN.INIT:

BEGIN
  MAIN.INIT(
    vch_VC_IP        => :vch_VC_IP,
    vch_VC_USER      => :vch_VC_USER,
    vch_VC_PASS      => :vch_VC_PASS,
    vch_VC_APP_CODE  => :vch_VC_APP_CODE,
    vch_VC_CLN_APPID => :vch_VC_CLN_APPID);
END;

Проверка наличия лицевого счета

DECLARE
  num_N_ACCOUNT_ID                    SI_V_SUBJ_ACCOUNTS.N_ACCOUNT_ID%TYPE;
  vch_Info                            VARCHAR(2000);
BEGIN
  num_N_ACCOUNT_ID := EX_PAYMENTS_PKG_S.GET_ACCOUNT_ID_FOR_CHARGE(
    vch_VC_ACCOUNT         => :vch_VC_ACCOUNT,
    vch_VC_USER_CODE       => :vch_VC_USER_CODE,
    vch_VC_TEL_NUMBER      => :vch_VC_TEL_NUMBER,
    vch_VC_CONTRACT_DOC_NO => :vch_VC_CONTRACT_DOC_NO,
    vch_VC_BILL_DOC_NO     => :vch_VC_BILL_DOC_NO,
    b_AllowCompanyPaying   => :b_AllowCompanyPaying,
    vch_VC_USER_GROUP      => :vch_VC_USER_GROUP,
    vch_Info               => :vch_Info);
END;

_Идентификационные данные абонента_:
* {{vch_VC_ACCOUNT}} --- Номер лицевого счета (VARCHAR2)
* {{vch_VC_USER_CODE}} --- Код абонента (VARCHAR2)
* {{vch_VC_TEL_NUMBER}} --- Номер телефона (VARCHAR2)
* {{vch_VC_CONTRACT_DOC_NO}} --- Номер договора (VARCHAR2)
* {{vch_VC_BILL_DOC_NO}} --- Номер счета (VARCHAR2)

* {{b_AllowCompanyPaying}} --- Флаг разрешения приема платежей от юрлиц ({{MAIN.b_TRUE}} или {{MAIN.b_FALSE}})
* {{vch_VC_USER_GROUP}} --- Код группы абонентов (VARCHAR2). Может быть не задан, если ограничение не требуется
* {{vch_Info}} --- Информация по абоненту (выходной аргумент)

В вызове возможно указания одного из возможных аргументов, идентифицирующих абонента (например, {{vch_VC_CONTRACT_DOC_NO}}), при этом все остальные идентифицирующие аргументы должны быть либо удалены из вызова, либо равны {{NULL}}. В результате вызова функция {{EX_PAYMENTS_PKG_S.GET_ACCOUNT_ID_FOR_CHARGE}} возвращает идентификатор лицевого счета ({{num_N_ACCOUNT_ID}}) и информацию по абоненту ({{vch_Info}} --- первые буквы фамилии, имени и отчества для физлиц. Например, _Ф. П. П._) Если в результате вызова не удалось подобрать ЛС абонента, функция возвращает *{{NULL}}*.

h3. Проведение платежа

BEGIN
  -- Очистка логов
  TT_MESSAGE_LOGS_PKG.TT_MESSAGE_LOGS_CLEAR;
  
  -- Проведение платежа
  EX_PAYMENTS_PKG.EX_PAYMENTS_CHARGE(
    vch_VC_TO_BANK          => :vch_VC_TO_BANK,
    vch_VC_TO_ACCOUNT       => :vch_VC_TO_ACCOUNT,
    num_N_SUM               => :num_N_SUM,
    num_Fee                 => :num_Fee,
    vch_PayType             => :vch_PayType,
    vch_Currency            => :vch_Currency,
    vch_VC_TRANSACTION_ID   => :vch_VC_TRANSACTION_ID,
    vch_VC_TRANSACTION_NO   => :vch_VC_TRANSACTION_NO,
    num_N_FORWHO_ACCOUNT_ID => :num_N_FORWHO_ACCOUNT_ID,
    dt_D_TAKING             => :dt_D_TAKING,
    num_N_DOC_ID            => :num_N_DOC_ID,
    dt_D_LOAD               => :dt_D_LOAD);
END;

{{vch_VC_TO_BANK}} --- код банка платежной системы (VARCHAR2)
{{vch_VC_TO_ACCOUNT}} --- номер счета юрлица оператора в банке ПС (VARCHAR2)
{{num_N_SUM}} --- сумма платежа к зачислению (NUMBER)
{{num_Fee}} --- размер комиссии ПС в процентах (NUMBER)
{{vch_PayType}} --- тип платежа (VARCHAR2)
{{vch_Currency}} --- код валюты (VARCHAR2, значение *{{RUB}}*)
{{vch_VC_TRANSACTION_ID}} --- идентификатор транзакции (VARCHAR2)
{{vch_VC_TRANSACTION_NO}} --- номер транзакции (VARCHAR2). Может быть не задан
{{num_N_FORWHO_ACCOUNT_ID}} --- идентификатор ЛС абонента (NUMBER). См. _проверку наличия лицевого счета_
{{dt_D_TAKING}} --- дата получения платежа от абонента (DATE, значение по умолчанию {{SYSDATE}} --- текущее время)
{{num_N_DOC_ID}} --- идентификатор платежа в биллинге (NUMBER, выходной аргумент)
{{dt_D_LOAD}} --- дата загрузки платежа в биллинг (DATE, выходной аргумент)

Если в результате вызова процедуры {{EX_PAYMENTS_PKG.EX_PAYMENTS_CHARGE}} идентификатор платежа ({{num_N_DOC_ID}}) оказался {{NULL}} (платеж не прошел), в представлении {{TT_V_MESSAGE_LOGS}} содержится информация с указанием причины:

SELECT D_MESSAGE,
VC_MESSAGE
FROM TT_V_MESSAGE_LOGS
ORDER BY D_MESSAGE