скрипт платежной системы на php
Прием платежей на сайте через Юкассу
В данной статье описан процесс оплаты через сервис ЮKassa с помощью прямых запросов к API через PHP cURL. Также существует уже готовый SDK (с установкой через Composer).
Настройка магазина в ЮKassa
В юкассе потребуется создать два магазина, один основной, второй тестовый для проверки интеграции.
Далее потребуется сгенерировать секретный ключ для доступа к API в разделе «Интеграция» – «Ключи API».
Формирование ссылки на оплату
Для того чтобы направить пользователя на оплату, нужно получить ссылку, для этого отправляется запрос в API с данными платежа (сумма, ссылка для возврата после оплаты, комментарий и внутренний номер заказа).
В запросе к API нужно передать значение идемпотентности, т.е. уникальное значение операции на стороне сайта. Без этого значения API возвращает ошибку, сгенерировать ключ можно с помощью функции:
Отправка платежных данных:
В ответе содержится номер заказа в Юкассе, его необходимо сохранить и ссылка на форму оплаты.
Редиректим пользователя на форму оплаты:
Чтобы завершить платеж нужно ввести реквизиты тестовой карты. После чего, платежная система вернет пользователя на указанный return_url без параметра статуса оплаты.
У Юкассы есть возможность уведомлений о платежах, подробнее на https://yookassa.ru/developers/using-api/webhooks
Получение данных о платеже
Получить данные платежа и его статус можно по его ID, отправив запрос:
Результат:
Статусы платежа
Как сделать приём платежей на сайте
У меня время от времени спрашивают, как сделать приём платежей на сайте. Например, Вы что-нибудь продаёте, какую-нибудь книгу или какой-нибудь файл. Либо, например, у Вас на сайте есть платные разделы, доступ к которым Вы не хотите давать всем подряд. Вот о том, как организовать приём оплаты с посетителей, я постараюсь рассказать в этой статье.
Первым делом, Вы должны понять, что Вам потребуется сторонний платёжный механизм, без него никак. Деньги же ведь должны куда-то поступать? И вот тут есть 2 варианта:
Независимо от того, какой из способов Вы выберите, последовательность действий будет примерно такой:
Как видите, общий принцип очень простой. Однако, у каждого платёжного механизма (либо платёжного агрегатора) есть своя инструкция по установке. Они в мелочях могут отличаться, поэтому обязательно внимательно чиатайте её. Если Вы обладаете хотя бы небольшими знаниями по PHP, то никаких проблем не возникнет. И не забудьте потом проверить, попробовав оплатить самостоятельно, чтобы не возникало потом конфликтных ситуаций.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 17 ):
Интересная статья, давно собирался изучить данную тему. Вот что еще было бы интересно узнать: допустим я создал скрипт интернет магазина, для использования людьми, далекими от программирования. Как сделать так чтобы после оплаты товара, он автоматически отправлялся покупателю. Насколько я понимаю, после успешной оплаты информация о заказе отправляется либо по почте либо в какую-либо таблицу базы данных, доступную для администратора склада, и уже он занимается отправкой товара. Как вы думаете, так ли это происходит? Надеюсь понятно выразился)
Я имел ввиду физический товар, т.е. материальный, а не в электроном виде. Например мебель. Допусти пользователь оплатил кровать на сайте, и кто будет занимать отправкой(доставкой) кровати по месту жительства.
Должно быть уведомление сервису доставки о том, что заказ оплачен. Далее этот сервис уже должен заниматься отправкой и уведомлением клиента об её статусе.
Михаил в данной статье вы посоветовали платежного агрегатора RoboKassa. Хотел бы узнать как лучше осуществить подключение к своему сайту данного агрегатора. Как физическое или юридическое лицо. Данный агрегатор понадобится только для пополнения счета на сайте. (Донат). И еще один вопрос. Возможен ли взлом базы данных (MySql) и изменение количества валюты на аккаунте.
Как физическое лицо лучше, за пожертвования всё равно никаких налогов не платят и смысла в юридическом лице я не вижу.
Спасибо учту. А насчет вопроса «Возможен ли взлом базы данных (MySql) и изменение количества валюты на аккаунте.» Хотел бы узнать ваше мнение.
Подключение Payeer с помощью PHP
Введение
Главная особенность Payeer – это возможность анонимной работы, то есть без верификации пользователя. В этой статье мы будем подключать получение платежей и массовые выплаты.
Создание мерчанта
Вот пример:
Далее переходим во вкладку «Внешний вид» и выбираем, какие платежная системы будут доступны для оплаты, а также какие виды валют можно будет использовать.
Подключение на сайт
Создадим простую форму покупки на HTML:
Теперь займёмся тем, что будет происходить, если всё заполнено верно.
Сначала создадим форму подтверждения платежа:
Получается, что если все поля заполнены, то PHP добавляет эту форму на страницу.
Теперь сформируем цифровую подпись (добавляем перед созданием формы):
Не забудьте проставить $m_shop и $m_key.
Так как у нас в форме 3 вещи (айфон, машина и еда), то давай создадим для них стоимости.
После проверки на то, всё ли заполнено, создаём переменную и ставим её значение:
Теперь при заполнении формы у нас появляется кнопка «send»:
И только при нажатии на неё перекидывает на страницу оплаты.
Это очень неудобно, давайте сделаем, чтобы она нажималась автоматически:
добавляем форме и style=»display:none» и ниже формы вставляем скрипт, который автоматически нажмет на кнопку для перехода на платежную систему.
Теперь при нажатии кнопки купить мы сразу переходим на страницу оплаты!
Вот полный блок того, что мы сейчас изменили:
При успешной оплате нас перекинет на example.com/success.php.
При неуспешной на example.com/fail.php.
А также нужно создать обработчик (example.com/handler.php).
Давайте создадим его в корне сайта!
В success.php вы должны создать страницу, которая будет сообщать человеку, что оплата прошла. Например, выводить информацию о том, что товар куплен.
В fail.php вы должны создать страницу, которая будет сообщать человеку, что оплата не прошла. Например, выводить текст о том, что оплата не прошла.
В handler.php пишем:
Не забудьте указать секретный ключ в $m_key.
Давайте создадим базу данных, которая будет выводить информацию о том, сколько всего товаров купили.
Создадим таблицу items с одним полем count:
И в поле, где платёж помечается как выполненный:
Мы будем вставлять запись с цифрой 1, если что-то купили.
Возвращаемся к index.php и изменяем валюта на RUB и вместо:
пишем $summ = 1;
Это нужно, чтобы мы сами могли совершить платёж и проверить работоспособность.
После оплаты:
Прием платежей работает. Всё, что было показано выше, только пример, чтобы вы поняли, как подключать эту платежную систему. Вы можете сами придумать, как её использовать.
Массовые выплаты
Далее скачаем PHP-класс для работы с Payeer выплатами. Скачать его можно на странице «Массовые выплаты» → «Документация» → «Скачать».
Помещаем его в корень сайта.
Создадим новый файл payout.php в корне сайта.
Переходим на http://example.com/payout.php и видим только цифру 2. Это и будет наш баланс, который мы будем выводить.
Создадим кнопку для вывода денег + проверки:
И в PHP-теги (после определения переменной):
После этого выведет: transferHimselfForbidde, если вы пробовали вывести деньги себе. Для других Payeer аккаунтов всё сработает.
Примеры таких проверок можно посмотреть здесь: https://payeer.com/ru/account/api/
Заключение
Я надеюсь, что вам помогла моя статья, и вы теперь можете самостоятельно делать выплаты или пополнения с помощью Payeer.
Bootpay скачать скрипт приема платежей без модерации
Bootpay скрипт приема платежей без модерации
В отличии от других подобных скриптов, моя система имеет возможность не только принимать платежи от плательщиков, но и отслеживать транзакции в истории операций, управлять статусом счета и уведомлять клиента о принятых / отклоненных платежах.
Способы оплаты в Lite:
— QIWI кошелек;
— PayPal;
— WebMoney;
— PerfectMoney;
— Skrill;
— Payeer;
— Bitcoin (доступно несколько шлюзов);
— ADV Cash;
Вы устанавливаете систему на свой домен и активируете необходимые методы оплаты. Для каждого метода оплаты необходимо указать реквизиты, на которые будут поступать денежные средства. Деньги поступают напрямую на Ваш счет, минуя посредников.
После того, как Вы установили необходимые способы оплаты, Вы можете сформировать платежные ссылки. Для формирования такой ссылки потребуется указать назначение платежа, кодовый номер и стоимость. Эта ссылка сохранится в панеле управления и Вы сможете пользоваться ею по своему усмотрению: вставить в код кнопки на своем сайте, выслать ссылку напрямую плательщику или воспользоваться встроенными инструментами для отправки ссылки по электронной почте или в SMS сообщении.
Переходя по такой ссылке, клиент попадает на платежную форму, где выбирает удобный способ оплаты и производит платеж. Эта операция сохранится в истории транзакций и Вы сможете отслеживать и изменять ее статус.
При подтверждении платежа, клиенту отправляется email уведомление, где Вы сможете вставить ссылку например на продаваемый товар.
— Интеграция с MailGun API, чтобы Ваши письма никогда не попадали в спам. Вы сможете выслать 1000 уведомлений по платежам в месяц бесплатно.
— Интеграция с SMS.RU, чтобы высылать ссылку на оплату в смс сообщении Вашему плательщику;
— Интеграция с DataTable, чтобы искать платежи “на лету”;
— Управление дизайном платежной страницы;
— Блокировка плательщиков по IP;
— другие опции.
Распакуйте загруженный архив с системой. В архиве вы найдете файлы скрипта и установочный дамп БД SQL. Перенесите файлы системы в корневую папку вашего сайта. Обратите внимание, что если в корневой папке домена уже находится действующий сайт, Bootpay следует распаковать в отдельную папку или на поддомен.
В хостинг-панеле перейдите в раздел управления базы данными и создайте новую. Откройте созданную базу через phpMyadmin и импортируйте установочный дамп SQL. Если база успешно была импортирована, вы получите уведомление об этом.
Откройте файл application/config/database.php и пропишите данные от созданной Вами базы данных.
‘hostname’ => ‘localhost’, // Название хоста или IP адрес
‘username’ => ‘user_bd’, // Имя пользователя БД
‘password’ => ‘*******’, // Пароль от БД
‘database’ => ‘name_bd’, // Название БД
‘dbdriver’ => ‘mysqli’,
Далее откройте application/config/config.php и укажите адрес вашего сайта, куда устанавливается Bootpay. Если вы планируете использовать SSL сертификат, не забудьте указать https путь.
Зарегистрируйтесь, чтобы увидеть текст или ссылку!
Создание модулей платежных систем
Модуль платежной системы отвечает за набор настроек подключения, внешний вид формы настроек, а так же за внешний вид и поведение формы оплаты, непосредственно на стороне клиента. Так же в модуле оплаты реализуются механизмы выставления, проведения и зачисления платежа от клиента. В зависимости от потребностей в модуле может быть реализована различная логика поведения при совершении оплаты — переадресация клиента на сайт платежной системы для совершения оплаты, либо выставление счета и ожидания проведения клиентом оплаты
Механизм работы модуля
В общих чертах жизненный цикл модуля оплаты в BILLmanager выглядит примерно следующим образом:
Установка модуля выполняется либо вручную, если он представлен набором файлов, либо из стандартного репозитория при помощи пакетного менеджера. После установки модуль становится доступен для выбора при создании метода оплаты в BILLmanager.
Каждый модуль опрашивается BILLmanager на предмет поддерживаемых возможностей и списка необходимых параметров. Делается это один раз на один запуск BILLmanager при первом обращении к модулю. Делается это для ускорения работы BILLmanager исключив не поддерживаемые вызовы, а так же для определения поведения форм BILLmanager при совершении клиентом оплаты.
Структура модуля
Модуль платежной системы состоит минимум из двух и максимум из неограниченного числа файлов. Основными являются XML описание модуля и основной скрипт отвечающий, как минимум, за передачу BILLmanager конфигурации модуля. Так же наиболее распространенным является схема при которой используются два CGI скрипта: для переадресации клиента на сайт платежной системы и для получения оповещений об изменении статуса платежа от платежной системы.
При наличии у платежной системы дополнительных требований к интеграции, либо по желанию разработчика могут быть добавлены и другие файлы, отвечающие, например, за отрисовку дополнительных форм, дополнительные проверки параметров оплаты, печать квитанций, проверку статусов платежей по расписанию и т.д.
Стандартный список файлов модуля выглядит следующим образом (пути указаны относительно каталога установки BILLmanager):
Где XXX название вашего модуля, указываемое латиницей. Если название основного скрипта модуля содержит расширение файла, оно так же включается в имя модуля. Например, если ваш скрипт называется pmpay.php, то именем модуля будет являться pay.php, а не pay.
Описание XML
Наименование файла должно иметь вид billmgr_mod_pmXXX.xml, где XXX — имя модуля. Файл копируется в каталог etc/xml относительно пути установки BILLmanager. Файл содержит описание самого модуля (описывается как плагин), а так же описание дополнительных форм и сообщений.
Примерный вид XML файла модуля:
— отвечает за описание самого модуля. Свойство name совпадает с именем модуля оплаты. Внутри секции может быть один элемент group со значением payment_method, который указывает на то, что данный модуль используется для методов оплаты, и несколько элементов msg. Свойство lang у элемента указывает к какому языку относится сообщение, атрибут name может иметь следующие значения:
Секция metadata с именем paymethod.edit.XXX отвечает за дополнительные поля модуля при добавлении и настройке метода оплаты. Формируется согласно стандартному описанию XML формы, с учетом необходимости расположения полей в секции
для корректного размещения полей на формах в BILLmanager. Единственным отличием от стандартного описание является поддержка атрибута private который запрещает вывод данного атрибута в XML при печати счета по созданному платежу. Используется для секретных данных, таких как пароль или секретный ключ. Страницы (page) с именами recurring и refundpage описывают настройки рекуррентных платежей и настройки отмены платежей, соответственно
Секция metadata с именем payment.edit.xxx отвечает за дополнительные поля, отображаемые клиенту при совершении оплаты. Так же описывается согласно стандартной схема описания XML форм в BILLmanager.
Секция metadata с именем paymethod.transfer.XXX отвечает за дополнительные поля, отображаемые при переводе средств обратно клиенту. Так же описывается согласно стандартной схема описания XML форм в BILLmanager.
Секция lang содержит переводы наименований полей на форме согласно стандартной схеме описания переводов. Раздел отвечает за подпись наименования модуля в списке методов оплаты.
Основной скрипт модуля
Основной скрипт модуля оплаты отвечает за передачу BILLmanager инфомрации о поддерживаемых модулем функциях, а так же обработку некоторых из этих функций. При работе с модулем BILLmanager исполняет файл скрипта со следующими параметрами:
В параметр —command могут быть переданы следующие значения:
Ветка feature содержит список возможностей модуля оплаты. Если какая-то возможность не поддерживается, она должна отсутствовать в выводе результата выполнения команды.
Список допустимых значений выглядит следующим образом:
Ветка param содержит список параметров метода оплаты. На данный момент поддерживаются:
Пример реализации скрипта можно найти в конце статьи
CGI скрипты модуля
CGI скрипты являются необязательно часть модуля оплаты и могут отсутствовать, в случае, если все логика реализована в основном модуле. Например при оплате через WebMoney кошелек, счет выставляется пользователю непосредственно основным скриптом модуля и его оплата проверяется по расписанию.
Возможны так же случаи когда модуль содержит несколько CGI скриптов:
Так например для интеграции с ЮMoney реализован дополнительный CGI скрипт выполняющий проверку введенных клиентом данных на стороне ЮMoney. Для этого платежная система вызывает скрипт и передает ему введенные клиентом данные, а так же параметр отвечающий за тип операции — check.
В общем случае CGI скрипты могут располагаться на отличном от BILLmanager сервере, либо на другом IP адресе или домене. Все зависит от желаний разработчика модуля и/или платежной системы. Например существуют схемы при которого авторизация при отправке уведомления об изменении статуса платежа выполняется по клиентскому сертификату и в этом случае требуется размещение скрипта на отдельном VirtualHost с настройкой обработки клиентских сертификатов. Но чаще всего какая-либо специфика в интеграции отсутствует и для упрощения поддержки модуля оплаты рекомендуется размещение CGI скриптов в стандартном каталоге BILLmanager — /usr/local/mgr5/cgi
Для примера разберем два типа скрипта — переадресации на оплату и получения уведомлений об изменении статуса.
Скрипт переадресации на оплату
Адрес скрипта переадресации на оплату BILLmanager получает вместе с загрузкой данных модуля при первом к нему обращении. Самым распространенным способом переадресации является формирование и автоматическая отправка формы с необходимыми параметрами. Выглядит форма примерно так:
В скрипт переадресации на оплату всегда передается параметр elid содержащий код платежа. По значению этого параметра используя функцию payment.info можно получить все необходимые данные для формирования формы оплаты. Возвращаемая функцией XML (можно так же использовать JSON при необходимости) выглядит примерно следующим образом:
К ноде payment добавляются все параметры указываемые клиентов при оплате дополнительно, к ноде paymethod добавляются все параметры метода оплаты. Такой способ получения информации о платеже является более предпочтительным нежели прямое обращение к базе данных BILLmanager.
Пример скрипта переадресации можно посмотреть в конце статьи
Скрипт получения уведомлений об изменении состояния платежа
Скрипт обработки оповещений об изменении статуса платежа от платежной системы должен выполнить следующие действия:
Пример скрипта обработчика оповещений об оплате можно найти в конце статьи
Функции BILLmanager
Страницы возврата
Для возврата клиента в биллинг после совершения оплаты можно использовать самостоятельно разработанные CGI скрипты, статические html страницы, либо стандартные функции BILLmanager:
Для дополнения форм, отображаемых данными функциями можно в XML описание плагина добавить дополнение к описанию соответствующих функций:
Пример модуля
Пример иллюстрирует реализацию модуля оплаты через QIWI по PULL(REST) протоколу
Модуль состоит из четырех основных файлов:
А так же вспомогательного файла с полезными функциями:
Функции bill_util.php
Перед включением в свой скрипт файла bill_util.php необходимо определить макрос __MODULE__, для формирования имени файла лога. Выглядит это примерно так:
Файл bill_util.php предоставляет следующие функции:
C++ (с использованием библиотек BILLmanager)
Использование заголовочных файлов BILLmanager для разработки собственных модулей обработчиков доступно с версии BILLmanager 5.58.0. Кроме приведенного упрощенного примера, можно изучить примеры представленные в пакете разработчика BILLmanager — billmanager-[Редакция BILLmanager]-devel:
yum install billmanager-corporate-devel — для BILLmanager Corporate;
yum install billmanager-devel — для BILLmanager.
После этого примеры можно найти в директории:
Пример модуля можно найти по адресу https://github.com/ISPsystemLLC/interkassa. Модуль использует заголовочные файлы COREmanager и BILLmanager, и основан на примере сборки собственных компонентов описанных в статьях Сборка собственных компонентов и Взаимодействие на низком уровне, плагины с++.
Так же при написании модулей могут быть полезные следующие материалы
Структура модуля
Так же в модуль входят два CGI скрипта — переадресации на оплаты в процессинговый центр и скрипт приема оповещений о зачислении платежей.