2namespace Bitrix\Sale\Cashbox;
16 public const CACHE_ID =
'BITRIX_CASHBOX_ROBOKASSA_ID';
18 private const URL =
'https://ws.roboxchange.com/RoboFiscal/Receipt/';
20 private const CODE_VAT_0 =
'vat0';
21 private const CODE_VAT_10 =
'vat10';
22 private const CODE_VAT_20 =
'vat20';
23 private const CODE_VAT_5 =
'vat5';
24 private const CODE_VAT_7 =
'vat7';
26 private const CHECK_PAYMENT_TYPE = 2;
28 private const MAX_NAME_LENGTH = 128;
37 return self::URL .
'Attach';
42 return self::URL .
'Status';
52 if (!$checkParamsResult->isSuccess())
70 'id' => $checkData[
'unique_id'],
77 'email' => $checkData[
'client_email'],
78 'phone' => $checkData[
'client_phone'],
85 foreach ($checkData[
'payments'] as $paymentItem)
87 $fields[
'payments'][] = [
88 'type' => self::CHECK_PAYMENT_TYPE,
94 $paymentMethod = $checkTypeMap[$check::getType()];
95 $paymentObjectMap = $this->getPaymentObjectMap();
96 foreach ($checkData[
'items'] as $item)
102 'name' => mb_substr($item[
'name'], 0, self::MAX_NAME_LENGTH),
103 'quantity' => (string)$item[
'quantity'],
106 'payment_method' => $paymentMethod,
107 'payment_object' => $paymentObjectMap[$item[
'payment_object']],
110 if (!empty($item[
'marking_code']))
112 $receiptItem[
'nomenclature_code'] = $item[
'marking_code'];
115 $fields[
'items'][] = $receiptItem;
117 $fields[
'vats'][] = [
130 $id =
$data[
'CheckId'] ??
null;
149 if (!empty(
$data[
'FiscalDate']))
169 $resultCode = (int)
$data[
'ResultCode'];
173 $processPrintResult->setData([
'UUID' => (
$data[
'OpKey'] ??
'')]);
177 $processPrintResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_PRINT_ERROR_FORMAT')));
181 $processPrintResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_PRINT_ERROR_NOT_ENOUGH_MONEY')));
185 $processPrintResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_PRINT_ERROR_INTERNAL')));
189 return $processPrintResult;
205 $resultCode = (int)
$data[
'Code'];
209 $processCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_PRINT_ERROR_WAIT')));
214 if (!empty(
$data[
'Statuses']))
222 $processCheckResult->setData($statuses);
227 $processCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_STATUS_ERROR_REGISTER')));
231 $processCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_STATUS_ERROR_PROCESSING')));
235 return $processCheckResult;
245 'ORDER_ID' =>
$payment->getOrder()->getId(),
251 $statuses =
$result->getData();
254 $resultCode = (int)
$status[
'Code'];
255 if ($resultCode === 0)
263 $onAfterProcessCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_PRINT_ERROR_WAIT')));
268 $applyCheckResult = static::applyCheckResult(
$status);
269 if (!$applyCheckResult->isSuccess())
271 $onAfterProcessCheckResult->addErrors($applyCheckResult->getErrors());
276 $onAfterProcessCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_STATUS_ERROR_REGISTER')));
280 $onAfterProcessCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_STATUS_ERROR_PROCESSING')));
287 $onAfterProcessCheckResult->addError(
new Main\
Error(
Main\
Localization\Loc::getMessage(
'SALE_CASHBOX_ROBOKASSA_CHECK_NOT_FOUND')));
290 return $onAfterProcessCheckResult;
309 $startupHash = self::cutSign(
312 self::encode($fields)
317 $sign = self::cutSign(
332 $errors = $httpClient->getError();
374 private static function cutSign(
string $sign): string
376 return \preg_replace(
'/^(.*?)(=*)$/',
'$1',
$sign);
393 private static function decode(
$data)
399 catch (Main\ArgumentException $exception)
440 if (
Main\Loader::includeModule(
'catalog'))
447 0 => self::CODE_VAT_0,
448 10 => self::CODE_VAT_10,
449 20 => self::CODE_VAT_20,
450 5 => self::CODE_VAT_5,
451 7 => self::CODE_VAT_7,
457 if (isset($defaultVatList[(
int)
$vat[
'RATE']]))
459 $value = $defaultVatList[(int)
$vat[
'RATE']];
464 'LABEL' =>
$vat[
'NAME'].
' ['.(
int)
$vat[
'RATE'].
'%]',
496 return 'ROBOXCHANGE_SHOPLOGIN';
502 private function getPaymentObjectMap():
array
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
static loadMessages($file)
static getMessage($code, $replace=null, $language=null)
static getList(array $parameters=array())
static encode($data, $options=null)
const PARAM_CALCULATION_ATTR
const PARAM_FISCAL_DOC_ATTR
const PARAM_FISCAL_DOC_NUMBER
getValueFromSettings($name, $code)
getPaySystemSetting(Sale\Payment $payment, string $code)
checkParams(Check $check)
send(string $url, Sale\Payment $payment, array $fields, string $method=self::SEND_METHOD_HTTP_POST)
static getPaySystemCodeForKkm()
onAfterProcessCheck(Sale\Result $result, Sale\Payment $payment)
static getSettings($modelId=0)
getDataForCheck(Sale\Payment $payment)
buildCheckQuery(Check $check)
static extractCheckData(array $data)
processCheckResult(Sale\Result $result)
static formatSign(string $sign)
processPrintResult(Sale\Result $result)
const PAYMENT_OBJECT_EXCISE
const PAYMENT_OBJECT_LOTTERY
const PAYMENT_OBJECT_SOCIAL_INSURANCE
const PAYMENT_OBJECT_COMPOSITE
const PAYMENT_OBJECT_LOTTERY_PRIZE
const PAYMENT_OBJECT_MEDICAL_INSURANCE_IP
const PAYMENT_OBJECT_COMMODITY_MARKING_EXCISE
const PAYMENT_OBJECT_NON_OPERATING_GAIN
const PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING_EXCISE
const PAYMENT_OBJECT_RESORT_FEE
const PAYMENT_OBJECT_PENSION_INSURANCE_IP
const PAYMENT_OBJECT_PROPERTY_RIGHT
const PAYMENT_OBJECT_GAMBLING_PRIZE
const PAYMENT_OBJECT_COMMODITY_MARKING
const PAYMENT_OBJECT_COMMODITY
const PAYMENT_OBJECT_AGENT_COMMISSION
const PAYMENT_OBJECT_ANOTHER
const PAYMENT_OBJECT_DEPOSIT
const PAYMENT_OBJECT_MEDICAL_INSURANCE
const PAYMENT_OBJECT_SERVICE
const PAYMENT_OBJECT_INTELLECTUAL_ACTIVITY
const PAYMENT_OBJECT_PAYMENT
const PAYMENT_OBJECT_EXPENSE
const PAYMENT_OBJECT_GAMBLING_BET
const PAYMENT_OBJECT_CASINO_PAYMENT
const PAYMENT_OBJECT_PENSION_INSURANCE
const PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING
const PAYMENT_OBJECT_SALES_TAX
static getPaymentByCheck(Check $check)
static getList(array $parameters=array())
static getObjectById($id)
static addDebugInfo(?string $message, $cashboxId=null)
static roundPrecision($value)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if(empty($signedUserToken)) $key