Задать вопрос
Sadchenko
@Sadchenko

Как в Drupal 7 принять и обработать XML от ПриватБанка?

Всем привет!
Можете подсказать, на сколько сложный в создании модуль для Drupal 7 я описываю?

Есть нода "Счет-фактура", у нее есть поля:

- field_payment_id
- field_payment_price
- field_payment_status

На основе этих данных формируется оплата в Приват24 формой
<form method="POST" action="https://api.privatbank.ua/p24api/ishop">
      <input type="hidden" name="amt" value="<?php echo $field_payment_price ?>" />
      <input type="hidden" name="ccy" value="UAH" />
      <input type="hidden" name="merchant" value="12345" />
      <input type="hidden" name="order" value="<?php echo $field_payment_id ?>" />
      <input type="hidden" name="details" value="Детали платежя" />
      <input type="hidden" name="ext_details" value="Описание" />
      <input type="hidden" name="pay_way" value="privat24" />
      <input type="hidden" name="return_url" value="http://..." />
      <input type="hidden" name="server_url" value="http://..." />
      <button formtarget="_blank" class="privat" type="submit"></button>
  </form>


После совершения клиентом оплаты модуль как я понял должен посылать вот такой XML запрос

<?xml version="1.0" encoding="UTF-8"?>
    <request version="1.0">
        <merchant>
            <id>12345</id>
            <signature>d66d192cb123456788e08cfe1ca171535</signature>
        </merchant>
        <data>
            <oper>cmt</oper>
            <wait>0</wait>
            <test>0</test>
            <payment>
                <prop name="id" value="1234567" />
                <prop name="ref" value="P24A02509023364489" />
            </payment>
        </data>
    </request>

Сигнатура запроса рассчитывается следующим образом (PHP):$sign=sha1(md5($data.$password)); $data - содержимое тега данного запроса; $password - личный пароль мерчанта, полученный им при регистрации.

И от Privat24 должен быть ответ:
<?xml version="1.0" encoding="UTF-8"?>
  <response version="1.0">
    <merchant>
      <id>12345</id>
      <signature>37aad972d7461234567893802230be38</signature>
    </merchant>
    <data>
      <oper>cmt</oper>
      <payment id="1234567" status="ok" message="Исполнен" ref="P24A02509023364480" />
    </data>
  </response>


Возможные значения статуса:
not found - не найден платеж;
ok - успешный;
err - забракован;
snd - в обработке

После того как была получена оплата (status="ok")
Нужно в ноде, у которой значение поля $field_payment_id, соответствует приходящему значению менять соответствующий статус в поле ноды $payment_status

Интерфейс в админке никакой не нужен, тупо PHP костыль! id мерчанта и другие данные забиваются там же.

На сколько может быть сложный такой модуль? Поделитесь дельным советом, как такое проще всего реализовать? где соответствующую документацию читать?
  • Вопрос задан
  • 353 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
Sadchenko
@Sadchenko Автор вопроса
Спасибо. Да я уже не раз его лопатил и ковырял. Но пока без результатов. Попробую еще. Спасибо.

Вопрос Решен!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Думаю нужно найти любую оплату и взять ее за основу.

вот вроде есть готовое для друпала
https://www.drupal.org/node/729116
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы