167 lines
9.9 KiB
PHP
167 lines
9.9 KiB
PHP
|
|
<?php
|
|||
|
|
include_once 'modules/Users/Users.php';
|
|||
|
|
require_once('include/Webservices/Utils.php');
|
|||
|
|
require_once 'include/Webservices/Create.php';
|
|||
|
|
require_once 'include/Webservices/Revise.php';
|
|||
|
|
require_once 'include/Webservices/AddRelated.php';
|
|||
|
|
require_once 'includes/Loader.php';
|
|||
|
|
require_once 'include/utils/WhatsApp.php';
|
|||
|
|
vimport ('includes.runtime.Globals');
|
|||
|
|
vimport ('includes.runtime.BaseModel');
|
|||
|
|
vimport ('includes.runtime.LanguageHandler');
|
|||
|
|
|
|||
|
|
$str = file_get_contents('php://input'); //Вынимаем пришедшие данные вот таким оригинальным образом
|
|||
|
|
// $str = '{"operationId":"a76cae4c-a9d7-0009-99ac-01dae5bce157","typeOfOperation":"Credit","accountNumber":"40703810900000742816","accountAmount":"5575.39","accountCurrencyDigitalCode":"643","status":"Active","operationStatus":"transaction","bic":"044525974","category":"incomePeople","documentNumber":"984","operationAmount":"5575.39","operationCurrencyDigitalCode":"643","rubleAmount":"5575.39","counterParty":{"account":"40702810010000891412","bankBic":"044525974","corrAccount":"30101810145250000974","inn":"7726381870","kpp":"771401001","name":"ООО \"ГИКБРЕИНС\""},"description":"Взыскание на основании ИЛ ФС №046844960 от 2024-08-20, выданного на основании суд. решения №2-1263/2024 органа Правобережный районный суд г. Магнитогорска от 2024-07-11","authorizationDate":"2024-09-09T07:38:08Z","trxnPostDate":"2024-09-09T07:39:31Z","payVo":"collection-order","cardNumber":"518901******3270","ucid":"1309555210","mcc":"0001","merch":{"id":"SMENOLIM","city":"MOSCOW","country":"RUS"},"acquirerId":"999999","rrn":"007382945495","payPurpose":"Взыскание на основании ИЛ ФС №046844960 от 2024-08-20, выданного на основании суд. решения №2-1263/2024 органа Правобережный районный суд г. Магнитогорска от 2024-07-11","chargeDate":"2024-09-08T21:00:00Z","drawDate":"2024-09-09T07:38:34Z","receiver":{"account":"40703810900000742816","name":"Межрегиональная общественная организация потребителей \"Клуб защиты покупателей \"Клиентправ\"","inn":"9728036753","kpp":"772801001","bic":"044525974","corrAccount":"30101810145250000974","bankName":"АО \"ТБанк\""},"payer":{"account":"40702810010000891412","name":"ООО \"ГИКБРЕИНС\"","inn":"7726381870","kpp":"771401001","bic":"044525974","corrAccount":"30101810145250000974","bankName":"АО \"ТБанк\""},"docDate":"2024-09-08T21:00:00Z","VO":"06"}';
|
|||
|
|
|
|||
|
|
$logstring = date('Y-m-d H:i:s').' '.print_r($str, true).PHP_EOL; // Пишем в лог то, что будем обрабатывать
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
echo "OK"; // Вернем наружу банку сообщение, что у нас все хорошо и повторно отправлять данные не надо
|
|||
|
|
|
|||
|
|
$data = json_decode($str, true); // Формируем массив
|
|||
|
|
$amount = $data['accountAmount'];
|
|||
|
|
$description = $data['description'];
|
|||
|
|
$inn = $data['payer']['inn'];
|
|||
|
|
|
|||
|
|
global $adb;
|
|||
|
|
|
|||
|
|
// Сначала поищем плательщика-контрагента по ИНН
|
|||
|
|
$query = "select a.accountid
|
|||
|
|
from vtiger_account a
|
|||
|
|
left join vtiger_crmentity e on e.crmid = a.accountid
|
|||
|
|
where e.deleted = '0' and a.inn = '".$inn."'";
|
|||
|
|
$qresult = $adb->pquery($query);
|
|||
|
|
|
|||
|
|
if($adb->num_rows($qresult) == 0) {
|
|||
|
|
// Не нашелся Контрагент - поищем Контакт. Причем с извращением - в базе ИННы почему-то хранятся с пробелами
|
|||
|
|
$query = "select c.contactid
|
|||
|
|
from vtiger_contactscf c
|
|||
|
|
left join vtiger_crmentity e on e.crmid = c.contactid
|
|||
|
|
where e.deleted = '0' and replace(c.cf_1257, ' ', '') = '".$inn."'";
|
|||
|
|
$qresult = $adb->pquery($query);
|
|||
|
|
|
|||
|
|
if($adb->num_rows($qresult) == 0) {
|
|||
|
|
// И Контакт по ИНН не найден - Платеж будет без привязки
|
|||
|
|
$logstring = date('Y-m-d H:i:s').' с ИНН '.$inn.' не найден ни Контакт, ни Контрагент - Платеж будет без привязки'.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
} else {
|
|||
|
|
$contactid = $adb->query_result($qresult, 0, 'contactid');
|
|||
|
|
$payer = '12x'.$contactid;
|
|||
|
|
$payerid = $contactid;
|
|||
|
|
$logstring = date('Y-m-d H:i:s').' Найден Контакт с id = '.$contactid.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$accountid = $adb->query_result($qresult, 0, 'accountid');
|
|||
|
|
$payer = '11x'.$accountid;
|
|||
|
|
$payerid = $accountid;
|
|||
|
|
$logstring = date('Y-m-d H:i:s').' Найден Контрагент с id = '.$accountid.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$user = Users::getActiveAdminUser(); // Получаем пользователя, под которым будем создавать платеж
|
|||
|
|
$params = array (
|
|||
|
|
'pay_date' => date('Y-m-d'),
|
|||
|
|
'pay_type' => 'Receipt',
|
|||
|
|
'pay_details' => $description,
|
|||
|
|
'type_payment' => 'Cashless Transfer',
|
|||
|
|
'amount' => $amount,
|
|||
|
|
'spstatus' => 'Executed',
|
|||
|
|
'spcompany' => 'МОО "Клиентправ"',
|
|||
|
|
'assigned_user_id' => '19x1'
|
|||
|
|
);
|
|||
|
|
if (isset($payer)) {
|
|||
|
|
$params['payer'] = $payer;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Подготовлен массив для создания Платежа: '.json_encode($params).PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$payment = vtws_create('SPPayments', $params, $user);
|
|||
|
|
$output = 'Платеж создан: '.$payment['id'];
|
|||
|
|
} catch (WebServiceException $ex) {
|
|||
|
|
$output = $ex->getMessage();
|
|||
|
|
}
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' '.$output.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
// Шаг второй - связка Платежа с Проектом
|
|||
|
|
if (isset($payer)) {
|
|||
|
|
// А теперь поищем Проекты, где фигурирует плательщик в качестве злодея и выберем из них тот, по которому пришли деньги
|
|||
|
|
$query = "select cf.projectid, cf.cf_1752, cf.cf_1507
|
|||
|
|
from vtiger_projectcf cf
|
|||
|
|
left join vtiger_crmentity e on e.crmid = cf.projectid
|
|||
|
|
where e.deleted = '0' and cf.cf_2274 = ".$payerid." and (cf.cf_1752 <> '' or cf.cf_1507 <> '')";
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Запрос поиска Проектов: '.PHP_EOL.$query.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
$qresult = $adb->pquery($query);
|
|||
|
|
|
|||
|
|
$pcount = $adb->num_rows($qresult);
|
|||
|
|
if($pcount > 0) {
|
|||
|
|
// Проекты найдены - побежим по ним в цикле
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Нашли Проекты у злодея. Всего: '.$pcount.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Поищем среди них что-то из назначения платежа: '.$description.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
for ($i=0; $i<$pcount; $i++) {
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Берем '.($i+1).'-й Проект'.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
$list = $adb->query_result($qresult, $i, 'cf_1752');
|
|||
|
|
$num = $adb->query_result($qresult, $i, 'cf_1507');
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Выкурили оттуда №ИЛ : '.$list.' и номер дела : '.$num.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
preg_match('/\d+$/', $list, $matches); // Вынимаем последние цифры из поля с исполнительным листом
|
|||
|
|
if (!empty($matches)) {
|
|||
|
|
$list = $matches[0];
|
|||
|
|
} else {
|
|||
|
|
$list = null;
|
|||
|
|
}
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Вытащили чисто цифры из ИЛ : '.$list.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
if ((mb_strpos($description, $list) !== false and !empty($list)) or
|
|||
|
|
(mb_strpos($description, $num) !== false and !empty($num))) {
|
|||
|
|
// В назначении нашлось значение одного из двух полей
|
|||
|
|
$projectid = $adb->query_result($qresult, 0, 'projectid');
|
|||
|
|
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Найден Проект, по котому пришла оплата : '.$projectid.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
// Отметим галку о том, что Проект оплачен
|
|||
|
|
try {
|
|||
|
|
$params = array (
|
|||
|
|
'id' => '33x'.$projectid,
|
|||
|
|
'cf_2470' => '1'
|
|||
|
|
);
|
|||
|
|
vtws_revise($params, $user);
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Поставлена метка об оплате в Проекте : '.$projectid.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
} catch (WebserviceException $ex) {
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Ошибка установки метки об оплате в Проекте : '.$ex->getMessage().PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Привяжем Платеж к Проекту
|
|||
|
|
vtws_add_related('33x'.$projectid, $payment['id']);
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' Платеж привязан к Проекту '.$projectid.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
|
|||
|
|
// И уходим
|
|||
|
|
break;
|
|||
|
|
} else {
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' В назначении Платежа нет ни '.$list.', ни '.$num.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$logstring = date("Y-m-d H:i:s").' У злодея не нашлось Проектов? - странно...'.PHP_EOL;
|
|||
|
|
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
?>
|