Процесс регистрации в системе Z-Payment рассматривать не будем, если возникнут вопросы, то опишу в отдельной статье. В ходе работы мы будем придерживаться алгоритма, составленного ранее.
Итак, первое, что нам нужно сделать, это создать новый магазин для нашего сайта. Для этого авторизуемся в платежной системе, переходим по ссылке «Мои магазины» и нажимаем на кнопку «Создать магазин«, после мы попадаем на такую форму:
Поля «Название сайта«, «URL сайта» и «Краткое описание» являются обязательными до заполнения, причем первые два из них изменить в последующем можно будет только через службу технической поддержки, поэтому проверяйте правильность заполнения. Заполнив все поля переходим «Далее«.
На втором этапе нам необходимо заполнить всю техническую информацию, это указать адреса уведомлений Result URL и перенаправления Success URL и Fail URL, также необходимо указать метод передачи данных на эти адреса POST/GET, указать секретный ключ и пароль, которые будут использовать при проверке подлинности передаваемых данных. После того как все заполнили и проверили нажимаем кнопку «Далее«.
На третьем этапе платежная система предлагает нам заново проверить все заполненные данные и в случае ошибки, вернутся назад на нужный шаг. Если все хорошо и ошибок нету, нажимаем «Добавить магазин«.
На четвертом этапе добавления нам необходимо провести активацию нашего магазина. Для этого размещаем указанный код у себя на сайте и подтверждаем активацию. После нас перекидывает на настройку способов оплаты и комиссий.
Сразу после создания, магазин имеет ранг 1, поэтому большинство платежных сервисов нам недоступны для приема оплаты. Чтобы повысить ранг, нам необходимо на нашем сайте создать раздел контакты и указать туда наши контакты, в том числе и физический адрес, после этого менеджеры системы выдадут магазину ранг 3, что откроет доступ ко всем способам оплаты.
Магазин создан, то есть первый пункт нашего плана выполнен, переходим ко второму, а именно созданию формы оплаты заказа. В форме нам необходимо указать идентификатор нашего магазина в системе Z-Payment, идентификатор заказа на нашем сайте, сумма заказа, описание и клиентский электронный адрес на который будут приходить письмо об оплате. Пример формы ниже (файл form.php),
<?php $setting = [ 'zp_shop_id' => '00000', // идентификатор магазина в Z-Payment 'order_id' => '0000', // идентификатор заказа во внутренней системе 'order_price' => '500', // сумма заказа 'order_descr' => 'Тестовый платеж', // описание заказа 'client_mail' => 'mymail@mysite.com', // e-mail клиента (необязятельно) ]; ?> <form action="https://z-payment.com/merchant.php" method="post"> <input name="LMI_PAYEE_PURSE" type="hidden" value="<?=$setting['zp_shop_id'];?>"> <input name="LMI_PAYMENT_AMOUNT" type="hidden" value="<?=$setting['order_price'];?>"> <input name="LMI_PAYMENT_NO" type="hidden" value="<?=$setting['order_id'];?>"> <input name="LMI_PAYMENT_DESC" type="hidden" value="<?=$setting['order_descr'];?>"> <input name="CLIENT_MAIL" type="hidden" value="<?=$setting['client_mail'];?>"> <input type="submit" value="Оплатить" /> </form>
После нажатия на кнопку «Оплатить» пользователь попадает уже на страницу платежной системы, где ему предлагается выбрать удобный способ оплаты с последующими инструкциями.
Теперь нам нужно подготовить страницы, которые будут проверять статус платежа и выводить соответствующее сообщение. После оплаты счета, Z-Payment пришлет нам уведомление по ссылке, которую мы указали в пункте Result URL, эта ссылка будет проверять подлинность полученных данных и в положительном случае менять статус заказа на оплаченный. Ключевым моментом в этой задаче является проверка подлинности передаваемых данных, для это нужно сгенерировать контрольную подпись и сравнить её с полученным хешем. Контрольная подпись в Z-Payment формируется следующим образом:
При формировании контрольной подписи сервис Z-Payment Merchant "склеивает" значения полей, передаваемых "Формой оповещения о платеже", в одну строку в следующем порядке: - ID магазина (LMI_PAYEE_PURSE); - Сумма платежа (LMI_PAYMENT_AMOUNT); - Внутренний номер покупки продавца (LMI_PAYMENT_NO); - Флаг тестового режима (LMI_MODE); - Внутренний номер счета в системе Z-Payment (LMI_SYS_INVS_NO); - Внутренний номер платежа в системе Z-Payment (LMI_SYS_TRANS_NO); - Дата и время выполнения платежа (LMI_SYS_TRANS_DATE); - Merchant Key (LMI_SECRET_KEY); - Идентификатор магазина в системе Z-Payment Merchant на счет которого была проведена оплата (LMI_PAYER_PURSE); - Кошелек покупателя в системе Z-Payment или его e-mail (LMI_PAYER_WM). Формируется последовательность из 32-х шестнадцатеричных цифр в соответствии с широко распространенным алгоритмом Message Digest 5 (MD5) разработанным Ron Rivest из MIT Laboratory for Computer Science и RSA Data Security, Inc. Алгоритм был опубликован в интернете в апреле 1992 года (RFC 1321).
После проверки контрольной подписи, выполняем все необходимые операции с полученными данными. Примерный код файла result.php представлен ниже:
<?php // подключение конфигов, дополнительных модулей и функций define('LMI_SECRET_KEY','---------------'); // здесь указывается ваш Merchant Key $data = $_POST; // или $_GET, смотря какой тип передачи мы указали в настройках магазина if(!$order->checkShop($data['LMI_PAYEE_PURSE'])) { // проверяем идентификатор магазина die("Ошибка: идентификатор магазина отличается от настроек сайта"); } if(!$order->checkPrice($data['LMI_PAYMENT_AMOUNT'])) { // проверяем сумму оплаты, совпадает ли с заказом die("Ошибка: сумма оплаты меньше чем выставлена в заказе"); } // генерирует контрольную сумму $_hash = md5( $data['LMI_PAYEE_PURSE'] . $data['LMI_PAYMENT_AMOUNT'] . $data['LMI_PAYMENT_NO'] . $data['LMI_MODE'] . $data['LMI_SYS_INVS_NO'] . $data['LMI_SYS_TRANS_NO'] . $data['LMI_SYS_TRANS_DATE'] . LMI_SECRET_KEY . $data['LMI_PAYER_PURSE'] . $data['LMI_PAYER_WM'] ); if($data['LMI_HASH'] == strtoupper($_hash)) { // сравниваем хеши $order->confirmOrder($data['LMI_PAYMENT_NO']); // меняем статус заказа на "оплаченный" } else { die("Ошибка: контрольная сумма неправильная"); } ?>
Также нам остается создать два вспомогательных файла, это success.php и fail.php, на которые пользователя будет перенаправлять платежная система, в случае успешных действия и ошибки соответственно. Никаких сложных обработок в них делать не будем, просто вывод сообщений.
Файл success.php:
<?php // подключение конфигов, дополнительных модулей и функций $order_id = $_POST['LMI_PAYMENT_NO'] // или $_GET, смотря какой тип передачи мы указали в настройках магазина $order_check = $order->checkOrder($order_id); // проверка, оплаченный ли текущий заказ if($order_check) { // в случае, если счет оплачен, выдаем информацию об успешной оплате счета ?> <p> Ваш счет успешно оплачен. На ваш e-mail отправлена вся необходимая информация. </p> <?php } else { // если счет еще не оплачен, выдаем соответствующее сообщение ?> <p> Ваш счет принят в обработку системой. </p> <?php } ?>
Файл fail.php:
<p> К сожалению, что-то пошло не так и вы не смогли закончить платеж. Повторите платеж заново. </p>
Стоит отменить, что в файлах используется объект класса $order, этот класс вы пишите сами, здесь он указан в качестве примера. На этом с подключением системы Z-Payment мы закончили, осталось только совершить тестовый платеж и перевести магазин в рабочий режим.
Скачать исходники: GitHub