Интеграция через библиотеку
Мы готовы платить от 100 до 200 EUR за созданный вами верный и рабочий код. Если вы захотите
сотрудничать в дальнейшем и получать заказы на поддержку версии определенной системы, код и ваши контакты
будут размещены публично.
Пишите нам на podderzhka@paysera.com
Для интеграции системы макро- платежей рекомендуем использовать подготовленную нами программную библиотеку с открытым исходным кодом. Библиотека выполняет все необходимые проверки сохранности передаваемых и получаемых данных.
Внимание: libwebtopay можно использовать как с услугами макро-, так и микро- платежей.
Можете испробовать libwebtopay, запустив подготовленный демонстрационный сценарий. Демонстрацию можете запустить, набрав в адресной строке Интернет-браузера:
https://www.yourwebsiteurl.com/libwebtopay/demo/
Внимание: в адресе указанный путь к demoкаталогу может отличаться в зависимости от того, куда вы поместили содержимое архива.
Внимание: для того, чтобы демо успешно функционировало укажите номер вашего проекта в системе Paysera, в поле projectid. Демо не будет работать, если будете пробовать запускать её с Вашего компьютера (localhost).
В общем, Вам достаточно вызвать два метода, из которых, один - подготавливает данные к отправке, а другой - проверяет полученный ответ о произведённой оплате.
Ниже приведен работающий пример. Места, в которые необходимо записать Ваши данные доступа к Paysera, отмечены комментариями.
1. Создайте папку.
Создайте папку, назовите ее libwebtopay. В ней будут храниться все файлы, связанные с интеграцией платежей.
2. Скачайте библиотеку libwebtopay.
В созданную папку libwebtopay скачайте файл WebToPay.php.
3. Создайте файл, направляющий пользователя на сайт Paysera.
В папке libwebtopay создайте файл redirect.php. Содержимое файла может быть следующим:
<?php require_once('WebToPay.php'); function getSelfUrl(): string { $url = substr(strtolower($_SERVER['SERVER_PROTOCOL']), 0, strpos($_SERVER['SERVER_PROTOCOL'], '/')); if (isset($_SERVER['HTTPS']) === true) { $url .= ($_SERVER['HTTPS'] === 'on') ? 's' : ''; } $url .= '://' . $_SERVER['HTTP_HOST']; if (isset($_SERVER['SERVER_PORT']) === true && $_SERVER['SERVER_PORT'] !== '80') { $url .= ':' . $_SERVER['SERVER_PORT']; } $url .= dirname($_SERVER['SCRIPT_NAME']); return $url; } try { WebToPay::redirectToPayment([ 'projectid' => {YOUR_PROJECT_ID}, 'sign_password' => {YOUR_PROJECT_PASSWORD}, 'orderid' => 0, 'amount' => 1000, 'currency' => 'EUR', 'country' => 'LT', 'accepturl' => getSelfUrl() . '/accept.php', 'cancelurl' => getSelfUrl() . '/cancel.php', 'callbackurl' => getSelfUrl() . '/callback.php', 'test' => 0, ]); } catch (Exception $exception) { echo get_class($exception) . ':' . $exception->getMessage(); }
4. Создайте файл accept.php.
В папке libwebtopay создайте файл accept.php. Содержимое файла должно быть следующим:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title></title> </head> <body> Thank you for buying. </body> </html>
5. Создайте файл cancel.php.
В папке libwebtopay создайте файл cancel.php. Содержимое файла должно быть следующим:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title></title> </head> <body> Payment canceled. </body> </html>
6. Обработка выполненных платежей.
В папке libwebtopay создайте файл callback.php. Содержимое файла должно быть следующим:
<?php require_once('WebToPay.php'); function isPaymentValid(array $order, array $response): bool { if (array_key_exists('payamount', $response) === false) { if ($order['amount'] !== $response['amount'] || $order['currency'] !== $response['currency']) { throw new Exception('Wrong payment amount'); } } else { if ($order['amount'] !== $response['payamount'] || $order['currency'] !== $response['paycurrency']) { throw new Exception('Wrong payment amount'); } } return true; } try { $response = WebToPay::validateAndParseData( $_REQUEST, {YOUR_PROJECT_ID}, {YOUR_PROJECT_PASSWORD} ); if ($response['status'] === '1' || $response['status'] === '3') { //@ToDo: Validate payment amount and currency, example provided in isPaymentValid method. //@ToDo: Validate order status by $response['orderid']. If it is not already approved, approve it. echo 'OK'; } else { throw new Exception('Payment was not successful'); } } catch (Exception $exception) { echo get_class($exception) . ':' . $exception->getMessage(); }
Внимание! Все параметры paysera.com методом GET должны иметь префикс WebToPay::PREFIX, метод WebToPay::checkResponse() возвращает отправленные в Paysera данные без префиксов. Иллюстрация, как это выглядит:
>>> $response = WebToPay::checkResponse(['foo' => 'bar', 'wp_projectid' => '123'], [...]); >>> print_r($response); ['projectid' => '123']
Параметры запроса
Продавец не должен полагаться на accepturl для подтверждения заказа. Подтверждение заказа со стороны продавца должно осуществляться посредством callbackurl.
Скрипт должен вернуть текст "OK". Только тогда наша система сможет зафиксировать факт успешного информирования об оплате.
Если ответа "OK" нет, то сообщение отправляется 4 раза (сразу после получения, спустя час, спустя три часа и спустя сутки).Оплата за товары и услуги (за нр. [order_nr]) ([site_name]).
Если реквизиты платежа указаны, необходимо внести следующие переменные, которые в конечном тексте назначения будут заменены соответствующими значениями:
[order_nr] - номер заказа.[site_name] или [owner_name] - адрес сайта или название предприятия.
* Окончательная длина может варьироваться в зависимости от спецификации типа оплаты
** Текст согласия покупателя:
Callback
Для получения дополнительной информации о 'callback' смотрите раздел - Callback .