Pays.IO — платежный шлюз для разработчиков

от автора

Pays.IO
Прием онлайн платежей — важная составляющая интернет-бизнеса. Необходимость их подключения сначала превращается в головную боль по сбору бумаг для менеджеров, а затем в трудности разработчиков по интеграции.

Компании агрегаторы упростили задачу менеджерам, дав возможно подключить весь спектр платежных систем одним договором, но на прозрачность задач для разработчика это почти никак не повлияло. Зачастую, программист, сталкиваясь с необходимостью подключения интернет оплаты, получает от провайдера услуг «партянку» кода одним файлом с кривой реализацией, оставившему имплементацию протокола на волю разработчика. При этом сами протоколы и скорость их работы также оставляют желать лучшего.

Мы создали 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

$key = 'HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK'; \Paysio\Api::setKey($key); $charge = \Paysio\Charge::create(array(     'amount' => 1000,     'description' => 'Test paymen',     'currency_id' => 'rur' )); 
Python

key = "HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK" paysio.api_key=key paysio.Charge.create(   amount=1000,   currency="rur",   description="Test charge" ) 

Здесь мы видим, что в 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

$key = 'HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK'; \Paysio\Api::setKey($key);  $data = file_get_contents('php://input'); $event = new \Paysio\Event(json_decode($data)); 
Python

key = "HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK" paysio.api_key=key  import json event = json.loads(HttpRequest.body) 

В данном случае мы получаем JSON-данные и инициализируем ими объект события. Теперь, чтобы обработать событие оплаты, добавим проверку пришедшего типа объекта.

PHP

if ($event->data instanceof \Paysio\Charge) {     if ($event->type == 'charge.success') {         // success logic     } elseif ($event->type == 'charge.failure') {         // failure logic     } elseif ($event->type == 'charge.refund') {         // refund logic     } } 
Python

if event.data['object'] == 'charge':     if event.type == 'charge.success':         pass #logic for charge success     elif event.type == 'charge.failure':         pass #logic for charge failure     elif event.type == 'charge.refund':         pass #logic for charge refund 

Отлично, первый платеж принят! Вы можете видеть его в списке последних платежей.

Ваши виртуальные 100 рублей поступили на счет.

Расширенную версию этого руководства вы можете найти у нас в документации.

Спасибо за внимание! Наша цель — максимально упросить прием платежей, если у вас есть идеи как можно сделать еще проще, пожалуйста, поделитесь с нами.

ссылка на оригинал статьи http://habrahabr.ru/company/paysio/blog/163935/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *