You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
5.5 KiB
140 lines
5.5 KiB
<?php |
|
// |
|
// Скрипт для проведения платежей из Frontol Торговля 4.9 в АСР Гидра через API HID |
|
// |
|
|
|
// Логирование переданного для дальнейших разборок по кассам |
|
$f = fopen('/var/domains/kassa/opl.log',"a+"); |
|
$varp = print_r($_POST,true); |
|
fwrite($f,date('d.m.Y H:i:s').' '.$varp."\n"); |
|
fclose($f); |
|
|
|
// Коннект к Oracle |
|
$conn = oci_connect('USER', 'PASSWD', 'localhost/DB', 'UTF8'); |
|
|
|
if(!$conn){ |
|
// |
|
echo 'connection fail'; |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
die(); |
|
} else { |
|
if ($_POST['a'] && $_POST['b'] && $_POST['c'] && $_POST['d']){ |
|
|
|
// нормализация переданных значений |
|
$a = 1*floatval(str_replace(array(',','/','*','-','+'),'.',$_POST['a'])); // сумма |
|
$b = 1*$_POST['b']; // код лицевого счета |
|
$c = $_POST['c']; // касса |
|
$d = 1*floatval(str_replace(array(',','/','*','-','+'),'.',$_POST['d'])); // тип документа: 1 - платеж, 2 - сторно настраивается во Frontol |
|
|
|
// преобразование номера кассы в символьное значение для запроса |
|
$firms = array('k9110001' => 'KASSA_1', 'k9110002' => 'KASSA_2', 'k9110003' => 'KASSA_3', |
|
'k9110004' => 'KASSA_4', 'k9110005' => 'KASSA_5', 'k9110006' => 'KASSA_6', |
|
'k9110007' => 'KASSA_7'); |
|
// Инициализация сессии в базе |
|
if(array_key_exists($c,$firms)) |
|
{ |
|
$q = " |
|
BEGIN |
|
MAIN.INIT( |
|
vch_VC_IP => '127.0.0.1', |
|
vch_VC_USER => 'net_interface', |
|
vch_VC_PASS => 'PASSWD', |
|
vch_VC_APP_CODE => 'NETSERV_HID', |
|
vch_VC_CLN_APPID => 'test'); |
|
END; |
|
"; |
|
$stid = oci_parse($conn, $q); |
|
oci_execute($stid); |
|
if($e = oci_error($stid)){ |
|
// ошибка при инициализации |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
} |
|
|
|
if($d == 1){ |
|
// Если передан тип документа 1, то это документ оплаты. Выполняем оплату |
|
$q = " |
|
DECLARE |
|
res1 NUMBER; |
|
res2 DATE; |
|
BEGIN |
|
EX_PAYMENTS_PKG.EX_PAYMENTS_CHARGE( |
|
vch_VC_TO_BANK => 'KASSA', |
|
vch_VC_TO_ACCOUNT => '".$firms[$c]."', |
|
num_N_SUM => ".$a.", |
|
num_Fee => 0, |
|
vch_PayType => 'RMM_KIND_Kassa', |
|
vch_Currency => 'RUB', |
|
vch_VC_TRANSACTION_ID => '11112222', |
|
num_N_FORWHO_ACCOUNT_ID => ".$b.", |
|
dt_D_TAKING => SYSDATE, |
|
num_N_DOC_ID => res1, |
|
dt_D_LOAD => res2 |
|
); |
|
END;"; |
|
} |
|
else { |
|
// в противоположном случае считаем, что передан документ возврата, так как иное в кассовой программе не обрабатывается |
|
// сначала выдергиваем номер последнего документа оплаты по лицевому счету |
|
$q = " |
|
select N_DOC_ID from |
|
SD_V_PAYMENTS_T |
|
where |
|
n_forwho_account_id = ".$b." |
|
and d_time in ( |
|
SELECT max(PT.D_TIME) DT |
|
FROM SD_V_PAYMENTS_T PT |
|
WHERE |
|
PT.N_DOC_STATE_ID = SYS_CONTEXT('CONST', 'DOC_STATE_Actual') |
|
AND pt.n_forwho_account_id = ".$b." |
|
) |
|
"; |
|
$stid = oci_parse($conn, $q); |
|
oci_execute($stid); |
|
if($e = oci_error($stid)){ |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
die(); |
|
} |
|
else { |
|
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS); |
|
} |
|
// проводим сторнирование полученного документа |
|
$q = " |
|
DECLARE |
|
num_N_DOC_ID_NEW NUMBER := NULL; |
|
num_N_DOC_ID NUMBER := ".$row['N_DOC_ID']."; |
|
BEGIN |
|
SD_DOCUMENTS_PKG.SD_DOCUMENTS_COPY( |
|
num_N_DOC_ID_OLD => num_N_DOC_ID, |
|
num_N_DOC_ID_NEW => num_N_DOC_ID_NEW, |
|
num_N_STORNO_DOC_ID => num_N_DOC_ID); |
|
SD_DOCUMENTS_PKG.SD_DOCUMENTS_CHANGE_STATE( |
|
num_N_DOC_ID => num_N_DOC_ID_NEW, |
|
num_N_NEW_DOC_STATE_ID => 4003); |
|
END; |
|
"; |
|
|
|
} |
|
|
|
$stid = oci_parse($conn, $q); |
|
oci_execute($stid); |
|
|
|
if($e = oci_error($stid)){ |
|
// любая ошибка - сигнал в кассовую программу о немедленном прекращении оплаты |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
} else { |
|
// все нормально проводим в кассовом аппарате |
|
echo json_encode(array('result' => 'OK'),JSON_UNESCAPED_UNICODE ); |
|
} |
|
oci_close($conn); |
|
} |
|
else |
|
{ |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
|
|
} |
|
} else { |
|
echo json_encode(array('result' => 'ERROR'),JSON_UNESCAPED_UNICODE ); |
|
} |
|
} |
|
|
|
?>
|