<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://docs.instantcms.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://docs.instantcms.ru/feed.php">
        <title>Документация InstantCMS - manual:components:billing:api</title>
        <description>для администраторов и разработчиков</description>
        <link>https://docs.instantcms.ru/</link>
        <image rdf:resource="https://docs.instantcms.ru/_media/wiki/dokuwiki.svg" />
       <dc:date>2026-11-03T05:43:43+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://docs.instantcms.ru/manual/components/billing/api/actions?rev=1450822863"/>
                <rdf:li rdf:resource="https://docs.instantcms.ru/manual/components/billing/api/balance?rev=1457111068"/>
                <rdf:li rdf:resource="https://docs.instantcms.ru/manual/components/billing/api/payments?rev=1758574158"/>
                <rdf:li rdf:resource="https://docs.instantcms.ru/manual/components/billing/api/plans?rev=1406880583"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://docs.instantcms.ru/_media/wiki/dokuwiki.svg">
        <title>Документация InstantCMS</title>
        <link>https://docs.instantcms.ru/</link>
        <url>https://docs.instantcms.ru/_media/wiki/dokuwiki.svg</url>
    </image>
    <item rdf:about="https://docs.instantcms.ru/manual/components/billing/api/actions?rev=1450822863">
        <dc:format>text/html</dc:format>
        <dc:date>2015-12-22T22:21:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Биллинг API: Оплата действий</title>
        <link>https://docs.instantcms.ru/manual/components/billing/api/actions?rev=1450822863</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;биллинг-apiоплата-действий&quot;&gt;Биллинг API: Оплата действий&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Биллинг позволяет максимально автоматизировать прием платежи за платные действия, предусмотренные вашим компонентом. Вам нужно добавить всего 2 строки в код вашего контроллера и несколько строк в код установщика. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0438\u043b\u043b\u0438\u043d\u0433 API: \u041e\u043f\u043b\u0430\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0438\u043b\u043b\u0438\u043d\u0433-api\u043e\u043f\u043b\u0430\u0442\u0430-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-461&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;регистрация-действий&quot;&gt;Регистрация действий&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Идеология работы биллинга заключается в том, что каждый компонент имеет набор действий, некоторые из которых могут быть платными. Суть работы биллинга состоит в том, чтобы проверить баланс пользователя до выполнения действия и списать средства после выполнения.
&lt;/p&gt;

&lt;p&gt;
Предположим, Вы написали компонент &lt;strong&gt;jobs&lt;/strong&gt; (биржа труда) и в нем есть действие &lt;strong&gt;add_vacancy&lt;/strong&gt; (добавление вакансии). Действие состоит из двух этапов: 1. показать пользователю форму, 2. сохранить введенные в форме данные. На первом этапе мы будем просить биллинг проверить баланс, а на втором - списать средства. Таким образом, действие &lt;strong&gt;add_vacancy&lt;/strong&gt; у нас будет платным.
&lt;/p&gt;

&lt;p&gt;
Цены на платные действия, в общем случае, настраиваются в админке самого биллинга (раздел &lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing/prices/actions&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing:prices:actions&quot; data-wiki-id=&quot;manual:components:billing:prices:actions&quot;&gt;Цены =&amp;gt; Действия&lt;/a&gt;). Для этого биллинг должен знать о каждом действии, за которое может быть установлена плата. Чтобы сообщить биллингу о платных действиях в Вашем компоненте, каждое из них нужно зарегистрировать. Лучше всего делать это в &lt;a href=&quot;https://docs.instantcms.ru/dev/packages&quot; class=&quot;wikilink1&quot; title=&quot;dev:packages&quot; data-wiki-id=&quot;dev:packages&quot;&gt;инсталляторе компонента&lt;/a&gt; (внутри функции &lt;code&gt;install_package()&lt;/code&gt; в install.php).
&lt;/p&gt;

&lt;p&gt;
Рассмотрим на примере компонента &lt;strong&gt;jobs&lt;/strong&gt; и действия &lt;strong&gt;add_vacancy&lt;/strong&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// Файл install.php в пакете с компонентом&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; install_package&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; 
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Если биллинг установлен&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;isControllerExists&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'billing'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
         &lt;span class=&quot;co1&quot;&gt;// Подключаем модель биллинга&lt;/span&gt;
         &lt;span class=&quot;re0&quot;&gt;$billing_model&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getModel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'billing'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
         &lt;span class=&quot;co1&quot;&gt;// Описываем наше действие (компонент, название и заголовок)&lt;/span&gt;
         &lt;span class=&quot;re0&quot;&gt;$action&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
             &lt;span class=&quot;st_h&quot;&gt;'controller'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'jobs'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;st_h&quot;&gt;'name'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'add_vacancy'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;st_h&quot;&gt;'title'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'Добавление вакансии'&lt;/span&gt;
         &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
         &lt;span class=&quot;co1&quot;&gt;// Добавляем действие в биллинг&lt;/span&gt;
         &lt;span class=&quot;re0&quot;&gt;$billing_model&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addAction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$action&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ... делаем все остальное, что нужно при установке нашего компонента ...&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Вы также можете добавить действие вручную, через базу данных. Для этого вставьте новую запись в таблицу &lt;code&gt;billing_actions&lt;/code&gt;, заполнив поля &lt;code&gt;controller&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt; аналогичным образом.
&lt;/p&gt;

&lt;p&gt;
Плюс, необходимо предусмотреть ситуацию когда биллинг устанавливается &lt;em&gt;после&lt;/em&gt; вашего компонента. В этом случае действие, очевидно, не будет создано при установке вашего компонента, т.к. биллинга на тот момент еще не было. Для решения проблемы имеет смысл дать пользователю возможность вручную создать действия в любой момент (например, кнопкой в админке).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;462-4436&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;проверка-баланса-перед-действием&quot;&gt;Проверка баланса перед действием&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Перед совершением действия, цена на которое может быть указана в настройках биллинга, необходимо проверить что на балансе пользователя достаточно средств. Например, если речь идет о платном добавлении контента, то баланс нужно проверить непосредственно перед выводом формы.
&lt;/p&gt;

&lt;p&gt;
Рассмотрим на примере компонента &lt;strong&gt;jobs&lt;/strong&gt; и действия &lt;strong&gt;add_vacancy&lt;/strong&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;checkBalanceForAction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'jobs'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'add_vacancy'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Если средств не хватит, пользователь будет сразу перенаправлен на страницу оплаты. После оплаты он будет возвращен к форме, которую собирался заполнить.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430-\u0431\u0430\u043b\u0430\u043d\u0441\u0430-\u043f\u0435\u0440\u0435\u0434-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4437-5483&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;списание-платы-за-действие&quot;&gt;Списание платы за действие&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
После совершения платного действия, в том месте кода где уже точно известно что действие совершено успешно, нужно добавить операцию списания.
&lt;/p&gt;

&lt;p&gt;
Рассмотрим на примере компонента &lt;strong&gt;jobs&lt;/strong&gt; и действия &lt;strong&gt;add_vacancy&lt;/strong&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// ... добавляем вакансию в базу данных ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$success&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Если запись успешно добавлена, производим списание&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;processAction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'jobs'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'add_vacancy'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Третий параметр (&lt;code&gt;$user_id&lt;/code&gt;) в методе &lt;code&gt;processAction()&lt;/code&gt; содержит ID пользователя, совершившего действие. Этот параметр не обязателен. Если он не указан, то используется ID текущего авторизованного пользователя.
&lt;/p&gt;

&lt;p&gt;
Если цена за действие не была установлена в настройках биллинга, либо равна нулю, либо целевой пользователь является администратором, то списание не произойдет и метод &lt;code&gt;processAction()&lt;/code&gt; просто вернет false. 
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing/api&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing:api&quot; data-wiki-id=&quot;manual:components:billing:api&quot;&gt;Вернуться к API&lt;/a&gt; | &lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing&quot; data-wiki-id=&quot;manual:components:billing&quot;&gt;Вернуться к оглавлению&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u0437\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435-\u043f\u043b\u0430\u0442\u044b-\u0437\u0430-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5484-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://docs.instantcms.ru/manual/components/billing/api/balance?rev=1457111068">
        <dc:format>text/html</dc:format>
        <dc:date>2016-03-04T17:04:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Биллинг API: Баланс</title>
        <link>https://docs.instantcms.ru/manual/components/billing/api/balance?rev=1457111068</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;биллинг-apiбаланс&quot;&gt;Биллинг API: Баланс&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0438\u043b\u043b\u0438\u043d\u0433 API: \u0411\u0430\u043b\u0430\u043d\u0441&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0438\u043b\u043b\u0438\u043d\u0433-api\u0431\u0430\u043b\u0430\u043d\u0441&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-48&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;получение-баланса-пользователя&quot;&gt;Получение баланса пользователя&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Баланс каждого пользователя хранится в поле &lt;code&gt;balance&lt;/code&gt; стандартной таблицы &lt;code&gt;users&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Поэтому получить баланс текущего авторизованного пользователя можно с помощью объекта &lt;code&gt;$user&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsUser&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;balance&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;/pre&gt;

&lt;p&gt;
либо с помощью статичного метода &lt;code&gt;get()&lt;/code&gt; класса &lt;code&gt;cmsUser&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;cmsUser&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'balance'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Получить баланс другого пользователя можно двумя способами.
&lt;/p&gt;

&lt;p&gt;
1. Получив пользователя из модели контроллера &lt;code&gt;users&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getModel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'users'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getUser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'balance'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
2. Получив баланс из модели биллинга:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$balance&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getModel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'billing'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getUserBalance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u0431\u0430\u043b\u0430\u043d\u0441\u0430-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;49-1114&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;пополнение-и-списание-с-баланса&quot;&gt;Пополнение и списание с баланса&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Баланс можно изменять как одному пользователю за раз, так и целой группе:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;changeBalance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$subject_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$amount&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$description&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$action_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Параметры метода &lt;code&gt;changeBalance()&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Обязателен &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Возможные значения &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$mode&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Да &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;em&gt;user&lt;/em&gt; или &lt;em&gt;group&lt;/em&gt; &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Определяет чей баланс изменяется - пользователя или группы &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$subject_id&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Да &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; число (int) &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; ID пользователя или группы (получателя) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$amount&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Да &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; число (float) &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Сумма во внутренней валюте, зачисляемая на баланс. Может быть отрицательной &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$description&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Да &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; строка или массив &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Содержит описание операции, которое будет отображаться в истории операций каждого пользователя, затронутого данным изменением баланса. Вместо строки можно передать массив с элементами &lt;strong&gt;text&lt;/strong&gt; (описание операции) и &lt;strong&gt;url&lt;/strong&gt; (ссылка на страницу, связанную с операцией). &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$action_id&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; число (int) &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; ID действия в Биллинге (id нужной записи из таблицы cms_billing_actions) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1474-2743&amp;quot;} --&gt;
&lt;p&gt;
Для изменения баланса одному пользователю существуют сокращенные варианты этого метода.
&lt;/p&gt;

&lt;p&gt;
Пополнение баланса:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;incrementUserBalance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$amount&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$description&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$action_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Списание с баланса:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;decrementUserBalance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$amount&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$description&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$action_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
где &lt;code&gt;$user_id&lt;/code&gt; – ID целевого пользователя. Значение &lt;code&gt;$amount&lt;/code&gt; в обоих случаях указывается положительным.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441 \u0431\u0430\u043b\u0430\u043d\u0441\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435-\u0438-\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435-\u0441-\u0431\u0430\u043b\u0430\u043d\u0441\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1115-3352&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;начисление-реферального-вознаграждения&quot;&gt;Начисление реферального вознаграждения&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
При пополнении баланса методами, описанными выше, не происходит автоматическое начисление реферальных вознаграждений. 
&lt;/p&gt;

&lt;p&gt;
Для их начисления используется метод:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$billing&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;payRefBonus&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$amount&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$is_deposit&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$max_level&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Параметры метода &lt;code&gt;payRefBonus()&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Обязателен &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Возможные значения &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$amount&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Да &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; число (float) &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Исходная сумма дохода, из которой будут начисляться реферальные вознаграждения &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$is_deposit&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; true или false &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Флаг, показывающий является ли данная сумма зачисленной за реальные деньги. Если false, то реферальное вознаграждение будет начислено только если опция «Выплачивать вознаграждения за» в &lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing/options#рефералы&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing:options&quot; data-wiki-id=&quot;manual:components:billing:options&quot;&gt;настройках биллинга&lt;/a&gt; содержит значение «Любой доход реферала». &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$user_id&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нет &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; число (int) или false  &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; ID реферала. Если false, будет использован ID текущего авторизованного пользователя &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$max_level&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Нет &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; число (int) или false &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; Максимальный уровень выплаты. Позволяет ограничить выплату вознаграждений по удаленности пригласивших от реферала. Например, если указать 1, то выплату получит только пользователь непосредственно пригласивший данного реферала на сайт &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3871-5429&amp;quot;} --&gt;
&lt;p&gt;
&lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing/api&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing:api&quot; data-wiki-id=&quot;manual:components:billing:api&quot;&gt;Вернуться к API&lt;/a&gt; | &lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing&quot; data-wiki-id=&quot;manual:components:billing&quot;&gt;Вернуться к оглавлению&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0444\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435-\u0440\u0435\u0444\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e-\u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3353-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://docs.instantcms.ru/manual/components/billing/api/payments?rev=1758574158">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-22T20:49:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Биллинг: Подключение платежной системы</title>
        <link>https://docs.instantcms.ru/manual/components/billing/api/payments?rev=1758574158</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;биллингподключение-платежной-системы&quot;&gt;Биллинг: Подключение платежной системы&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
В биллинге используется модульная система для интеграции с платежными системами. Для того чтобы подключить новую систему необходимо написать модуль для нее.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0438\u043b\u043b\u0438\u043d\u0433: \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0438\u043b\u043b\u0438\u043d\u0433\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439-\u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-380&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;выбор-системного-имени&quot;&gt;Выбор системного имени&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Каждая платежная система в биллинге имеет системное имя, которое может состоять из одного латинского слова и цифр. Системное имя используется в именах файлов и классов.
&lt;/p&gt;

&lt;p&gt;
В качестве примера, мы будем считать что наша новая платежная система называется «New Payment System», а ее системное имя – &lt;code&gt;newpayment&lt;/code&gt;. Здесь и далее &lt;code&gt;newpament&lt;/code&gt; нужно будет заменять на системное имя вашей платежной системы.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u044b\u0431\u043e\u0440-\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e-\u0438\u043c\u0435\u043d\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;381-1127&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;файлы-и-папки&quot;&gt;Файлы и папки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Модули платежных систем хранятся в папке &lt;code&gt;system/controllers/billing/systems&lt;/code&gt;. Внутри этой папки необходимо создать папку для новой платежной системы. Название папки совпадает с системным именем.
&lt;/p&gt;

&lt;p&gt;
Например, &lt;code&gt;system/controllers/billing/systems/newpayment&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
В папке системы нужно создать два PHP-файла:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;options.form.php&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Файл, содержащий описание формы настроек платежной системы. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;newpayment.php&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Основной файл, внутри которого будет находиться класс модуля для данной платежной системы. Название файла совпадает с системным именем. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1648-2061&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b\u044b-\u0438-\u043f\u0430\u043f\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1128-2062&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;языковой-файл&quot;&gt;Языковой файл&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Платежная система может иметь языковой файл, в котором находятся необходимые тексты (например, названия опций). 
&lt;/p&gt;

&lt;p&gt;
Языковой файл системы должен иметь адрес: &lt;code&gt;languages/язык/controllers/billing/systems/newpayment.php&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Названия констант в языковом файле должны начинаться с префикса &lt;code&gt;LANG_BILLING_SYSTEM_NEWPAYMENT_&lt;/code&gt;. 
&lt;/p&gt;

&lt;p&gt;
Пример языкового файла:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'LANG_BILLING_SYSTEM_NEWPAYMENT_SHOP'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'Идентификатор магазина'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'LANG_BILLING_SYSTEM_NEWPAYMENT_KEY'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'Ключ цифровой подписи'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u042f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0444\u0430\u0439\u043b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439-\u0444\u0430\u0439\u043b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2063-2863&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;настройки-платежной-системы&quot;&gt;Настройки платежной системы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В файле &lt;code&gt;system/controllers/billing/systems/newpayment/options.form.php&lt;/code&gt; нужно создать стандартную форму с полями для опций. Эти поля будут выводиться в форме &lt;a href=&quot;https://docs.instantcms.ru/manual/components/billing/systems&quot; class=&quot;wikilink1&quot; title=&quot;manual:components:billing:systems&quot; data-wiki-id=&quot;manual:components:billing:systems&quot;&gt;настроек платежной системы&lt;/a&gt; в админке компонента.
&lt;/p&gt;

&lt;p&gt;
Класс формы должен называться в формате &lt;code&gt;form{системное-имя-с-большой-букввы}SystemOptions&lt;/code&gt;. 
&lt;/p&gt;

&lt;p&gt;
Для нашего примера это &lt;code&gt;formNewpaymentSystemOptions&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Имена полей формы должны начинаться с префикса &lt;code&gt;options:&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Пример файла формы настроек:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; formNewpaymentSystemOptions &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; cmsForm &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; init&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;'options'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                &lt;span class=&quot;st_h&quot;&gt;'type'&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'fieldset'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;st_h&quot;&gt;'childs'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                    &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; fieldString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'options:shop_id'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                        &lt;span class=&quot;st_h&quot;&gt;'title'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; LANG_BILLING_SYSTEM_NEWPAYMENT_SHOP&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                        &lt;span class=&quot;st_h&quot;&gt;'rules'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                            &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'required'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                        &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; fieldString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'options:key'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                        &lt;span class=&quot;st_h&quot;&gt;'title'&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; LANG_BILLING_SYSTEM_NEWPAYMENT_KEY&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                        &lt;span class=&quot;st_h&quot;&gt;'is_password'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                        &lt;span class=&quot;st_h&quot;&gt;'rules'&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                            &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'required'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                        &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
            &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439-\u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2864-4526&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;класс-платежной-системы&quot;&gt;Класс платежной системы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В файле &lt;code&gt;system/controllers/billing/systems/newpayment/newpayment.php&lt;/code&gt; должен быть определен класс платежной системы. 
&lt;/p&gt;

&lt;p&gt;
Класс должен называться в формате &lt;code&gt;system{системное-имя-с-большой-букввы}&lt;/code&gt; и наследоваться от класса &lt;code&gt;billingPaymentSystem&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; systemNewpayment &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; billingPaymentSystem &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Внутри класса могут быть определены несколько методов. Ниже подробно рассмотрим каждый из них.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043b\u0430\u0441\u0441 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043b\u0430\u0441\u0441-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439-\u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4527-5230&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;описание-параметров-методов&quot;&gt;Описание параметров методов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Многие методы используют одни и те же входящие параметры, поэтому опишем их сразу:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit9&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Значение &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$order&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Массив с информацией о заказе на пополнение баланса. Содержит поля: &lt;strong&gt;id&lt;/strong&gt; - номер заказа, &lt;strong&gt;summ&lt;/strong&gt; - сумма заказа в реальной валюте, &lt;strong&gt;amount&lt;/strong&gt; - сумма заказа во внутренней валюте, &lt;strong&gt;description&lt;/strong&gt; - описание заказа &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$request&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Объект типа &lt;a href=&quot;https://docs.instantcms.ru/dev/controllers/request&quot; class=&quot;wikilink1&quot; title=&quot;dev:controllers:request&quot; data-wiki-id=&quot;dev:controllers:request&quot;&gt;cmsRequest&lt;/a&gt;, содержащий информацию о текущем запросе (GET/POST). Получить переменную из запроса можно с помощью метода: &lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'имя переменной'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;$model&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Модель компонента биллинг. Используется для вызова методов, изменяющих статус заказа &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;5447-6361&amp;quot;} --&gt;
&lt;p&gt;
Во всех методах через свойство &lt;code&gt;$this→options&lt;/code&gt; доступны опции платёжной системы.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432-\u043c\u0435\u0442\u043e\u0434\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5231-6502&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;сумма-с-учётом-курса-платёжной-системы&quot;&gt;Сумма с учётом курса платёжной системы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPaymentOrderSumm&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$summ&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Этот метод возвращает сумму к оплате, учитывая курс платёжной системы, указанный в опциях.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0443\u043c\u043c\u0430 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043a\u0443\u0440\u0441\u0430 \u043f\u043b\u0430\u0442\u0451\u0436\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0443\u043c\u043c\u0430-\u0441-\u0443\u0447\u0451\u0442\u043e\u043c-\u043a\u0443\u0440\u0441\u0430-\u043f\u043b\u0430\u0442\u0451\u0436\u043d\u043e\u0439-\u0441\u0438\u0441\u0442\u0435\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;6503-6813&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;получение-списка-полей-для-платежной-формы&quot;&gt;Получение списка полей для платежной формы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPaymentFormFields&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Обычно, проведение платежа в любой системе начинается с отправки платежной формы на специальный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;, предоставленный системой. Этот &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; указывается в настройках системы в админке биллинга. Форма же генерируется динамически. 
&lt;/p&gt;

&lt;p&gt;
Когда пользователь пополняет баланс, он сначала выбирает количество валюты для покупки и нажимает «Продолжить». После этого он попадает на страницу «Проверьте правильность заказа». На самом деле эта страница нужна потому, что именно на ней выводится платежная форма. И нажатие кнопки «Перейти к оплате» отправляет платежную форму на нужный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;.
&lt;/p&gt;

&lt;p&gt;
Метод &lt;code&gt;getPaymentFormFields()&lt;/code&gt; возвращает набор полей, которые будут добавлены в платежную форму. Этот набор уникален для каждой системы. Набор возвращается в виде массива, в котором ключи это названия полей, а элементы – значения.
&lt;/p&gt;

&lt;p&gt;
Например, если наша платежная система требует наличия в форме полей &lt;code&gt;shop_id&lt;/code&gt; и &lt;code&gt;summ&lt;/code&gt;, то метод может выглядеть так:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPaymentFormFields&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// id магазина из настроек&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;'shop_id'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'shop_id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// вычисляем сумму к оплате, по курсу &lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;'summ'&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getPaymentOrderSumm&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'summ'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Кроме того, в платежную форму можно добавить интерактивные поля, значения которых должен будет заполнить пользователь. В этом случае, в качестве значения поля в возвращаемом массиве используется экземпляр класса поля. Например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;'summ'&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$summ&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;'order_id'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;st_h&quot;&gt;'comment'&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'description'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;st_h&quot;&gt;'phone'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; fieldString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'phone'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;'title'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'Номер телефона для выставления счета'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;'hint'&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'В формате &amp;lt;b&amp;gt;+79221234567&amp;lt;/b&amp;gt;'&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u0441\u043f\u0438\u0441\u043a\u0430-\u043f\u043e\u043b\u0435\u0439-\u0434\u043b\u044f-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439-\u0444\u043e\u0440\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;6814-9697&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;дополнительная-обработка-данных-после-платежной-формы&quot;&gt;Дополнительная обработка данных после платежной формы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; preparePayment&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsRequest &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; modelBilling &lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Некоторые платежные системы используют более сложные механизмы для запуска платежа, чем простая отправка формы. Поэтому предусмотрена возможность отдать модулю платежной системы полный контроль над отправкой запроса о платеже.
&lt;/p&gt;

&lt;p&gt;
Схема реализуется в три этапа:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В качестве платежного &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; в настройках системы указывается: &lt;code&gt;billing/prepare/{системное-имя}&lt;/code&gt;, например &lt;code&gt;billing/prepare/newpayment&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Платежная форма по-прежнему формируется, но отправляется уже не в систему, а на внутренний &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;, указанный выше;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; По данному &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; срабатывает метод &lt;code&gt;preparePayment()&lt;/code&gt; в нашем классе, и этот метод самостоятельно производит общение с реальной платежной системой (например, с помощью CURL) и редиректит куда требуется.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Такая схема используется в случаях, когда:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Запрос о платеже нужно послать на несколько адресов одновременно (чего нельзя добиться с помощью простой формы);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Для проведения платежа необходима дополнительная информация от пользователя (например, Qiwi требует ввода номера телефона. Поэтому в платежной форме этот номер запрашивается и затем отправляется на внутренний &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;, где уже происходит обработка и отправка всех данных в Qiwi).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Примеры реализации описанного подхода вы можете посмотреть в коде модулей для систем Test и Yookassa из стандартной поставки Биллинга.
&lt;/p&gt;

&lt;p&gt;
Если нужен редирект, то метод должен вернуть строку с &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; для редиректа. НЕ выполняйте редирект в теле метода.
&lt;/p&gt;

&lt;p&gt;
Если в методе в вашей логике обработки возникла ошибка, то в этом методе необходимо вернуть её конструкцией:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;   &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_ORDER_ID&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Где LANG_BILLING_ERR_ORDER_ID это языковая константа, вместо её вы можете использовать любой произвольный текст.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u0434\u0430\u043d\u043d\u044b\u0445-\u043f\u043e\u0441\u043b\u0435-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439-\u0444\u043e\u0440\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;9698-12834&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;переопределение-платежного-url&quot;&gt;Переопределение платежного URL&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPaymentURL&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Некоторые платежные системы используют динамический &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; для отправки платежа. Тогда его не получится просто указать в настройках, т.к. при каждом платеже он будет разным.
&lt;/p&gt;

&lt;p&gt;
Специально на этот случай в классе может быть описан метод &lt;code&gt;getPaymentURL()&lt;/code&gt;, который возвращает &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; для отправки платежной формы. Если этого метода нет - используется &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; из настроек платежной системы.
&lt;/p&gt;

&lt;p&gt;
Пример метода из модуля для системы OnPay:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPaymentURL&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;https://secure.onpay.ru/pay/&lt;span class=&quot;es4&quot;&gt;{$this-&amp;gt;options['merchant_login']}&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;	
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Обратите внимание!&lt;/strong&gt; В админке в &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; можно указывать значения опций в фигурных скобках, например, учитывая пример выше, &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; в настройках может быть указан как:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  https://secure.onpay.ru/pay/{merchant_login}&lt;/pre&gt;

&lt;p&gt;
И для таких простых случаев не требуется переназначать этот метод. &lt;code&gt;{merchant_login}&lt;/code&gt; превратится в значение &lt;code&gt;$this→options[&amp;#039;merchant_login&amp;#039;]&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e URL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435-\u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e-url&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;12835-14383&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;получение-оповещения-о-платеже&quot;&gt;Получение оповещения о платеже&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; processPayment&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsRequest &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; modelBilling &lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Большинство платежных систем умеют сообщать об оплате заказа путем вызова определенного &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; на сайте магазина. Чаще всего в настройках мерчантов он называется как Result &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; или Status &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. Вызов этого &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; происходит в фоновом режиме, незаметно для пользователя и без использования его браузера.
&lt;/p&gt;

&lt;p&gt;
В биллинге данный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; уникален для каждой платежной системы. Он имеет вид: &lt;a href=&quot;http://example.com/billing/process/newpayment&quot; class=&quot;urlextern&quot; title=&quot;http://example.com/billing/process/newpayment&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com/billing/process/newpayment&lt;/a&gt;, где &lt;em&gt;example.com&lt;/em&gt; – адрес сайта, &lt;em&gt;newpayment&lt;/em&gt; – системное имя платежной системы.
&lt;/p&gt;

&lt;p&gt;
При вызове данного &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; в классе модуля системы запускается метод &lt;code&gt;processPayment()&lt;/code&gt;. 
&lt;/p&gt;

&lt;p&gt;
Внутри метода обычно реализуется следующий алгоритм:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Получаем данные, переданные платежной системой (номер заказа, сумма, статус оплаты и т.п.);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; По номеру заказа получаем информацию о заказе из базы;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Сверяем правильность данных (что сумма заказа не изменена, цифровая подпись совпадает и т.п.);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Если все верно – отмечаем заказ как оплаченный (на внутренний баланс пользователя при этом зачисляется купленная им внутренняя валюта);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Возвращаем ответ в формате, требуемом платежной системой.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Данные, передаваемые на Result &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; каждой платежной системой уникальны. Их описание нужно смотреть в документации  по &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; платежной системы. Получение данных из запроса (GET/POST) происходит с помощью объекта &lt;code&gt;$request&lt;/code&gt;, например: 
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$order_id&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'order_id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Получение заказа по известному ID осуществляется с помощью модели:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$order&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getOperation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$order_id&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Смена статуса заказа на «оплаченный» происходит также с помощью модели:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;acceptPayment&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_TRANS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Пример реализации метода для системы Robokassa:&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; processPayment&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsRequest &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; modelBilling &lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Получаем данные, переданные платежной системой&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// на наш Result URL&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$op_id&lt;/span&gt;         &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'InvId'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;           &lt;span class=&quot;co1&quot;&gt;// id заказа&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$out_summ&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'OutSum'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;         &lt;span class=&quot;co1&quot;&gt;// сумма &lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$out_signature&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'SignatureValue'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// подпись&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Проверяем что получен id заказа&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$op_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_ORDER_ID&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Получаем заказ из базы по id&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getOperation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$op_id&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Проверяем что такой заказ найден&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_ORDER_ID&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Проверяем что этот заказ еще не оплачен&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; modelBilling&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;STATUS_CREATED&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_STATUS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Вычисляем сумму к оплате, по курсу платежной&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// системы к реальной валюте нашего сайта&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$summ&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getPaymentOrderSumm&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'summ'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Если требуемая сумма не совпала с суммой, &lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// оплаченной пользователем, значит произошла подмена или ошибка&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$summ&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$out_summ&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_SUMM &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'OutSum: '&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$out_summ&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Вычисляем контрольную подпись по алгоритму,&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// описанному в документации платежной системы Robokassa&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$password2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'test_mode'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; ?
            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'password2_test'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'password2'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$sig&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$out_summ&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$op_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$password2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$sig&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/strtoupper&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/hash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;hash&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;hash_type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;':'&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$sig&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Проверяем что подписи совпадают&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sig&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$out_signature&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_SIG&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Принимаем платеж как успешно завершенный&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Баланс пользователя при этом пополняется&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;acceptPayment&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$operation&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LANG_BILLING_ERR_TRANS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;'OK'&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$op_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Метод processPayment может вернуть:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Строку. Это строка будет выведена в теле HTTP ответа;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Массив. В формате &lt;code&gt;[&amp;#039;headers&amp;#039; ⇒ [], &amp;#039;body&amp;#039; ⇒ &amp;#039;Text&amp;#039;]&lt;/code&gt;, где ключ headers - это массив HTTP заголовков, которые надо послать в ответе, ключ body - тело HTTP ответа.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; false. В этом случае HTTP ответ будет с кодом 500 и телом ответа «An error occurred in payment confirmation processing».&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f-\u043e-\u043f\u043b\u0430\u0442\u0435\u0436\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;14384-20484&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;получение-оповещения-об-успехе-платежа&quot;&gt;Получение оповещения об успехе платежа&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
После успешного проведения платежа обычно платежные системы переадресуют пользователя на специальный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; магазина, по которому расположена страница с текстом типа «Оплата успешно принята». Обычно такой &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; называется в мерчантах как Success &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. 
&lt;/p&gt;

&lt;p&gt;
В биллинге данный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; уникален для каждой платежной системы. Он имеет вид: &lt;a href=&quot;http://example.com/billing/success/newpayment&quot; class=&quot;urlextern&quot; title=&quot;http://example.com/billing/success/newpayment&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com/billing/success/newpayment&lt;/a&gt;, где example.com – адрес сайта, newpayment – системное имя платежной системы.
&lt;/p&gt;

&lt;p&gt;
Чаще всего, помимо простой переадресации, платежные системы также высылают на этот адрес ID оплаченного заказа. 
&lt;/p&gt;

&lt;p&gt;
В реальной жизни иногда возможны ситуации, когда переадресация на Success &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; происходит раньше, чем вызов Result &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. То есть когда платежная система уже знает что платеж прошел и отправляет пользователя обратно на сайт, но при этом самому сайту сообщение о платеже еще не пришло.
&lt;/p&gt;

&lt;p&gt;
Поэтому, для избежания неприятностей, на Success &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; мы должны удостовериться что заказ оплачен и баланс пользователя пополнен. И если это не так, то заставить пользователя ждать пока сайт не получит уведомление о проведенном платеже. 
&lt;/p&gt;

&lt;p&gt;
Поскольку номер заказа приходит на Success &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; вместе с пользователем, в модуле платежной системы должен быть определен метод:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSuccessOrderId&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsRequest &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Этот метод должен получать из объекта &lt;code&gt;$request&lt;/code&gt; значение ID заказа, передаваемое платежной системой на Success &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;, и возвращать его. Используя полученный ID биллинг найдет заказ и проверит его статус. Если заказ окажется по-прежнему не оплаченным, биллинг будет проверять его статус каждые несколько секунд, до тех пор пока уведомление об оплате не поступит. Пользователь при этом будет видеть просьбу подождать.
&lt;/p&gt;

&lt;p&gt;
Пример метода:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSuccessOrderId&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cmsRequest &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;        
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'InvId'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;        
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u0443\u0441\u043f\u0435\u0445\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f-\u043e\u0431-\u0443\u0441\u043f\u0435\u0445\u0435-\u043f\u043b\u0430\u0442\u0435\u0436\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;20485-23635&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;получение-оповещения-о-неудаче-платежа&quot;&gt;Получение оповещения о неудаче платежа&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
После неудачи в проведении платежа обычно платежные системы переадресуют пользователя на специальный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; магазина, по которому расположена страница с текстом типа «Ошибка оплаты». Обычно такой &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; называется в мерчантах как Fail &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. 
&lt;/p&gt;

&lt;p&gt;
В биллинге данный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; един для всех платежных систем. Он имеет вид: &lt;a href=&quot;http://example.com/billing/fail&quot; class=&quot;urlextern&quot; title=&quot;http://example.com/billing/fail&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com/billing/fail&lt;/a&gt;, где example.com – адрес сайта. 
&lt;/p&gt;

&lt;p&gt;
Никаких дополнительных действий в модулей платежной системы для обработки неудачных платежей не требуется.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f-\u043e-\u043d\u0435\u0443\u0434\u0430\u0447\u0435-\u043f\u043b\u0430\u0442\u0435\u0436\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:19,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;23636-24540&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;вспомогательные-методы&quot;&gt;Вспомогательные методы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/log&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;log&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Часто требуется как для отладки платёжной системы, так и для разбора возможных сбоев, вести логи. Для этого существует метод &lt;code&gt;$this→log(&amp;#039;Error Text&amp;#039;)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Метод записывает в лог платёжной системы указанную ошибку, добавляя запись в конец файла вместе с текущей датой и временем. В переменную $text можно передавать строку или массив. В случае если передан массив, он будет преобразован в JSON.
&lt;/p&gt;

&lt;p&gt;
Логи записываются в директории /cache/billing/имя_платёжной_системы_pay_api.log
&lt;/p&gt;

&lt;p&gt;
Краткий лог из последних 100 записей можно посмотреть в админке в списке платёжных систем.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; error&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;string &lt;span class=&quot;re0&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Метод записывает ошибку в память и возвращает NULL.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435-\u043c\u0435\u0442\u043e\u0434\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:19,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;24541-25765&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit18&quot; id=&quot;примеры-подключений&quot;&gt;Примеры подключений&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
С примерами реализаций модулей для несколько платежных систем вы можете ознакомиться в папке &lt;code&gt;system/controllers/billing/systems&lt;/code&gt; из комплекта поставки биллинга.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;25766-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://docs.instantcms.ru/manual/components/billing/api/plans?rev=1406880583">
        <dc:format>text/html</dc:format>
        <dc:date>2014-08-01T08:09:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Биллинг API: Тарифные планы</title>
        <link>https://docs.instantcms.ru/manual/components/billing/api/plans?rev=1406880583</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;биллинг-apiтарифные-планы&quot;&gt;Биллинг API: Тарифные планы&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0438\u043b\u043b\u0438\u043d\u0433 API: \u0422\u0430\u0440\u0438\u0444\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0438\u043b\u043b\u0438\u043d\u0433-api\u0442\u0430\u0440\u0438\u0444\u043d\u044b\u0435-\u043f\u043b\u0430\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-63&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;получение-id-тарифного-плана-пользователя&quot;&gt;Получение ID тарифного плана пользователя&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
ID тарифного плана каждого пользователя хранится в поле &lt;code&gt;plan_id&lt;/code&gt; стандартной таблицы &lt;code&gt;users&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Поэтому получить баланс текущего авторизованного пользователя можно с помощью объекта &lt;code&gt;$user&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsUser&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;plan_id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;/pre&gt;

&lt;p&gt;
либо с помощью статичного метода &lt;code&gt;get()&lt;/code&gt; класса &lt;code&gt;cmsUser&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;cmsUser&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'plan_id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Получить ID тарифа другого пользователя можно с помощью модели контроллера &lt;code&gt;users&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getModel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'users'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getUser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'plan_id'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
В случае, если в данный момент пользователь не подписан ни на один тариф, значение &lt;code&gt;plan_id&lt;/code&gt; для него будет равно false.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID \u0442\u0430\u0440\u0438\u0444\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-id-\u0442\u0430\u0440\u0438\u0444\u043d\u043e\u0433\u043e-\u043f\u043b\u0430\u043d\u0430-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;64-1162&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;получение-подробной-информации-о-подписке-пользователя&quot;&gt;Получение подробной информации о подписке пользователя&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для получения подробной информации о текущей подписке используется модель биллинга:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$plan&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; cmsCore&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getModel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;'billing'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getUserCurrentPlan&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$user_id&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Метод &lt;code&gt;getUserCurrentPlan()&lt;/code&gt; возвращает массив со следующими полями:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Поле &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Значение &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;id&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; ID тарифного плана &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;title&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Название тарифного плана &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;date_until&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Дата окончания подписки &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;old_groups&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Массив, содержащий ID групп в которых пользователь состоял до подписки на текущий тариф &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1637-2024&amp;quot;} --&gt;
&lt;p&gt;
В случае, если в данный момент пользователь не подписан ни на один тариф, метод &lt;code&gt;getUserCurrentPlan()&lt;/code&gt; вернет false.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438-\u043e-\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1163-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
