Для подключения к БД для приема платежей из внешних систем необходимо использовать специального пользователя 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; |
vch_VC_IP
— IP-адрес платежного сервера, для логирования (VARCHAR2)vch_VC_USER
— имя пользователя (VARCHAR2)vch_VC_PASS
— пароль (VARCHAR2)vch_VC_APP_CODE
— код приложения (VARCHAR2 — NETSERV_HPD
)vch_VC_CLN_APPID
— название платежного приложения, для логирования (VARCHAR2)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
.
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 |