Прием онлайн платежей — важная составляющая интернет-бизнеса. Необходимость их подключения сначала превращается в головную боль по сбору бумаг для менеджеров, а затем в трудности разработчиков по интеграции.
Компании агрегаторы упростили задачу менеджерам, дав возможно подключить весь спектр платежных систем одним договором, но на прозрачность задач для разработчика это почти никак не повлияло. Зачастую, программист, сталкиваясь с необходимостью подключения интернет оплаты, получает от провайдера услуг «партянку» кода одним файлом с кривой реализацией, оставившему имплементацию протокола на волю разработчика. При этом сами протоколы и скорость их работы также оставляют желать лучшего.
Мы создали Pays.IO, как платежный шлюз, написанный разработчиками для разработчиков, проанализировав и учтя большинство недостатков текущих систем.
Не стану описывать всех возможностей сервиса, о них вы, при желании, сможете прочитать у нас на главной. Остановлюсь только на основных технических особенностях:
- REST-архитектура API
- библиотеки API на PHP и Python (для Ruby и JAVA будут в ближайшем будущем)
- отказоустойчивость на уровне шлюза — мы работаем с несколькими крупными процессинговыми центрами и имеем возможность автоматического переключения между шлюзами при их падении
- подробная документация по всему функционалу
- библиотека Paysio.js, позволяющая производить выбор способа оплаты и выставления счета прямо на странице магазина, без переадресации
Сейчас мы, вместе с нашими партнерами, ведем непрерывное закрытое бета-тестирование сервиса.
Но, естественно, специально для пользователей Хабра, мы сделали инвайт-код: habr. С которым вы можете пройти регистрацию.
Чтобы не распыляться на громкие слова, давайте перейдём сразу к делу — начнём принимать платежи.
curl https://api.paysio.com/v1/charges -v \ -u HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK: \ -d amount=10000 \ -d currency_id="rur" \ -d description="Test charge"
В целом — это всё, что нужно сделать. Приведенный пример создает счет на 100 рублей, и в заголовке ответа Location
возвращает адрес https://paysio.com/v1/charges/{CHARGE_ID}/invoice
, на который нужно перенаправить клиента для выбора системы и совершения оплаты. Сам ответ состоит из JSON-объекта созданного счета.
{ "object":"charge", "id":"{CHARGE_ID}", "merchant_id":"{MERCHANT_ID}", "payment_system_id":null, "currency_id":"rur", "amount":10000, "fee":0, "amount_refunded":0, "description":"Test charge", "wallet":null, "customer":null, "status":"pending", "status_code":"", "livemode":false, "lifetime":604800, "merchant_data":null, "order_id":"", "ip":"212.24.43.44", "payment_system_data":null, "discount":null, "success_url":"", "failure_url":"", "return_url":"", "created":1356448317, "updated":1356448317 }
Рассмотрим этот же код на php и python
PHP
|
Python
|
Здесь мы видим, что в API передается ключ вида HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK
— он является секретным и его не следует публиковать в открытом доступе. Ключ используется для доступа к серверному API.
Ключи, как и весь сервис, делятся на два режима работы: тестовый и боевой. В тестовом режиме вы можете выполнять любые действия, при этом коммерчески-важные данные не будут затронуты, боевой режим служит уже для работы с реальными платежными системами и деньгами. В данном случае используется тестовый ключ. Управление ключами происходит из настроек магазинов.
После завершения процесса оплаты клиент будет перенаправлен обратно на сайт магазина, для этого при выставлении счета нужно задать параметры success_url
и failure_url
, при этом магазин будет оповещен об успешной или же неудачной оплате посредством обратного вызова webhook. Обратные вызовы настраиваются достаточно просто: для магазина указывается url, на который будут поступать обратные вызовы и режим — «Тестовый» или «Боевой».
Теперь на указанный вами адрес будут приходить события вида:
{ "object":"event", "id":"{EVENT_ID}", "merchant_id":"{MERCHANT_ID}", "type":"charge.create", "data":{ "object":"charge", "id":"{CHARGE_ID}", "merchant_id":"{MERCHANT_ID}", "payment_system_id":null, "currency_id":"rur", "amount":10000, "fee":0, "amount_refunded":0, "description":"Test charge", "wallet":null, "customer":null, "status":"pending", "status_code":"", "livemode":false, "lifetime":604800, "merchant_data":null, "order_id":"", "ip":"212.24.43.44", "payment_system_data":null, "discount":null, "success_url":"", "failure_url":"", "return_url":"", "created":1356448317, "updated":1356448317 }, "livemode":false, "created":1356444717 }
Чтобы обработать входящие события по адресу, который указан для обратного вызова, вам будет достаточно добавить следующий код,
PHP
|
Python
|
В данном случае мы получаем JSON-данные и инициализируем ими объект события. Теперь, чтобы обработать событие оплаты, добавим проверку пришедшего типа объекта.
PHP
|
Python
|
Отлично, первый платеж принят! Вы можете видеть его в списке последних платежей.
Ваши виртуальные 100 рублей поступили на счет.
Расширенную версию этого руководства вы можете найти у нас в документации.
Спасибо за внимание! Наша цель — максимально упросить прием платежей, если у вас есть идеи как можно сделать еще проще, пожалуйста, поделитесь с нами.
ссылка на оригинал статьи http://habrahabr.ru/company/paysio/blog/163935/
Добавить комментарий