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

в 15:48, , рубрики: pays.io, Блог компании Pays.IO, платежные системы, процессинг, эквайринг, электронная коммерция, метки: , , ,

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

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

Мы создали Pays.IO, как платежный шлюз, написанный разработчиками для разработчиков, проанализировав и учтя большинство недостатков текущих систем.

Не стану описывать всех возможностей сервиса, о них вы, при желании, сможете прочитать у нас на главной. Остановлюсь только на основных технических особенностях:

  • REST-архитектура API
  • библиотеки API на PHP и Python (для Ruby и JAVA будут в ближайшем будущем)
  • отказоустойчивость на уровне шлюза — мы работаем с несколькими крупными процессинговыми центрами и имеем возможность автоматического переключения между шлюзами при их падении
  • подробная документация по всему функционалу
  • библиотека Paysio.js, позволяющая производить выбор способа оплаты и выставления счета прямо на странице магазина, без переадресации

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

Сейчас мы, вместе с нашими партнерами, ведем непрерывное закрытое бета-тестирование сервиса.
Но, естественно, специально для пользователей Хабра, мы сделали инвайт-код: 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';
PaysioApi::setKey($key);
$charge = PaysioCharge::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.
Ключи, как и весь сервис, делятся на два режима работы: тестовый и боевой. В тестовом режиме вы можете выполнять любые действия, при этом коммерчески-важные данные не будут затронуты, боевой режим служит уже для работы с реальными платежными системами и деньгами. В данном случае используется тестовый ключ. Управление ключами происходит из настроек магазинов.

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

После завершения процесса оплаты клиент будет перенаправлен обратно на сайт магазина, для этого при выставлении счета нужно задать параметры success_url и failure_url, при этом магазин будет оповещен об успешной или же неудачной оплате посредством обратного вызова webhook. Обратные вызовы настраиваются достаточно просто: для магазина указывается url, на который будут поступать обратные вызовы и режим — «Тестовый» или «Боевой».

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

Теперь на указанный вами адрес будут приходить события вида:

{
	"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';
PaysioApi::setKey($key);

$data = file_get_contents('php://input');
$event = new PaysioEvent(json_decode($data));
Python

key = "HZClZur5OW3BYimWSydQNsArbph2L7IRo0ql8HK"
paysio.api_key=key

import json
event = json.loads(HttpRequest.body)

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

PHP

if ($event->data instanceof PaysioCharge) {
    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

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

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

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

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

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

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

Автор: volovikov

Источник

  1. Джонни:

    В чем смысл данного сайта? Простое зеркало хабры…
    В чем смысл затраченных сил на оригинальный дизайн, да и вообще на сайт?

  2. Игорь:

    Смысл в том, что некоторые статьи с хабра исчезают в никуда, после бана пользователя или после его решения убрать пост в черновики. Вот тогда и помогают подобные зеркала в поиске информации. Смысл есть :)

  3. Игорь:

    Pays.Io Очень долго подключают.
    Отправил документы в середине сентября.
    16 сентября они их получили.
    Через 2 дня уже ноябрь будет.
    Платежи через свой сайт до сих пор принимать не могу.
    Кормят “ЗАВТРАками” телефоны не берут.
    Очень не приятно.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js