ez-pro/core/bitrix/components/aspro/invoicebox.payment/class.php
2025-11-13 19:04:05 +03:00

144 lines
5.1 KiB
PHP

<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
use \Bitrix\Main;
use \Bitrix\Main\Localization\Loc as Loc;
class AsproInvoiceBox extends CBitrixComponent
{
private $devUrl = 'https://go-dev.invoicebox.ru/module_inbox_auto.u';
private $prodUrl = 'https://go.invoicebox.ru/module_inbox_auto.u';
public function onIncludeComponentLang()
{
$this->includeComponentLang(basename(__FILE__));
Loc::loadMessages(__FILE__);
}
/**
* @param $params
* @return mixed
*/
public function onPrepareComponentParams($params)
{
$params['LANGUAGE_IDENT'] = trim($params['LANGUAGE_IDENT']);
if (empty($params['LANGUAGE_IDENT']) || ($params['LANGUAGE_IDENT'] != 'EN'))
$params['LANGUAGE_IDENT'] = 'RUS';
$params['PARTICIPANT_ID'] = trim($params['PARTICIPANT_ID']);
$params['PARTICIPANT_IDENT'] = trim($params['PARTICIPANT_IDENT']);
$params['PARTICIPANT_SIGN'] = trim($params['PARTICIPANT_SIGN']);
if (!empty($params['REDIRECT_URLS']) && !is_array($params['REDIRECT_URLS']))
$params['REDIRECT_URLS'] = [$params['REDIRECT_URLS']];
$params['ORDER_ID'] = trim($params['ORDER_ID']);
if (empty($params['ORDER_ID']))
$params['ORDER_ID'] = time();
if (empty($params['ORDER_CURRENCY_IDENT']))
$params['ORDER_CURRENCY_IDENT'] = 'RUB';
if (empty($params['ORDER_AMOUNT']))
$params['ORDER_AMOUNT'] = 0;
$params['ORDER_DESCRIPTION'] = Loc::getMessage('ORDER_PAYMENT');
$params['ORDER_DESCRIPTION'] .= " #{$params['ORDER_ID']}";
$params['BODY_TYPE'] = 'PRIVATE';
$params['URL_RETURNSUCCESS'] = trim($params['URL_RETURNSUCCESS']);
$params['TESTMODE'] = ($params['TESTMODE'] === 'Y' ? 1 : 0);
return $params;
}
/**
* @throws Main\SystemException
*/
protected function checkParams()
{
$arCheckParams = $this->getRequiredParams();
foreach ($this->arParams as $key => $value) {
if (isset($arCheckParams[$key])) {
if (empty($this->arParams[$key])) {
throw new Main\SystemException(Loc::getMessage('NOT_PASS_FIELD', ['#FIELD#' => Loc::getMessage($key)]));
}
}
}
}
protected function getRequiredParams()
{
return array_flip(['PARTICIPANT_ID', 'PARTICIPANT_IDENT', 'PARTICIPANT_SIGN', 'ORDER_ID', 'ORDER_DESCRIPTION', 'ORDER_CURRENCY_IDENT']);
}
protected function getOptionalParams()
{
return array_flip(['LANGUAGE_IDENT', 'BODY_TYPE', 'PERSON_NAME', 'PERSON_PHONE', 'PERSON_EMAIL']);
}
protected function getResult()
{
$this->arResult['ORDER_AMOUNT'] = number_format(str_replace(" ", "", $this->arParams['ORDER_AMOUNT']), 2, '.', '');
$this->arResult['ORDER_AMOUNT_FORMATTED'] = $this->arParams['ORDER_AMOUNT'];
$this->arResult['PAYMENT_URL'] = $this->arParams['TESTMODE'] ? $this->devUrl : $this->prodUrl;
}
public function setBasketItems()
{
global $arGoods;
if ($arGoods) {
$arGoods = $GLOBALS["APPLICATION"]->ConvertCharsetArray($arGoods, SITE_CHARSET, 'UTF-8');
$itemNo = 0;
foreach ($arGoods as $basketItem) {
$itemNo++;
$this->arResult['FORM_FILEDS']['itransfer_item' . $itemNo . '_name'] = $basketItem['NAME'];
$this->arResult['FORM_FILEDS']['itransfer_item' . $itemNo . '_quantity'] = $basketItem['QUANTITY'];
$this->arResult['FORM_FILEDS']['itransfer_item' . $itemNo . '_price'] = $basketItem['PRICE'];
$this->arResult['FORM_FILEDS']['itransfer_item' . $itemNo . '_type'] = 'commodity';
};
}
}
protected function setFormField()
{
$arFormFields = array_merge($this->getRequiredParams(), $this->getOptionalParams());
$this->arParams = $GLOBALS["APPLICATION"]->ConvertCharsetArray($this->arParams , SITE_CHARSET, 'UTF-8');
foreach ($arFormFields as $field => $value) {
if ($field === 'PARTICIPANT_SIGN')
continue;
$this->arResult['FORM_FILEDS']['itransfer_'.strtolower($field)] = $this->arParams[$field];
}
$this->arResult['FORM_FILEDS']['itransfer_order_amount'] = $this->arResult['ORDER_AMOUNT'];
$this->arResult['FORM_FILEDS']['itransfer_testmode'] = $this->arParams['TESTMODE'];
$this->arResult['FORM_FILEDS']['itransfer_participant_sign'] = md5(
$this->arParams['PARTICIPANT_ID'].
$this->arParams['ORDER_ID'].
$this->arResult['ORDER_AMOUNT'].
$this->arParams['ORDER_CURRENCY_IDENT'].
$this->arParams['PARTICIPANT_SIGN']
);
$this->setBasketItems();
}
public function executeComponent()
{
try {
$this->setFrameMode(true);
$this->checkParams();
$this->getResult();
$this->setFormField();
$this->includeComponentTemplate();
} catch (Exception $e) {
ShowError($e->getMessage());
}
}
}