Лучших работников в сфере IT РАБОТА-КА Вам поможет найти! о нас ✈
Я ищу работу в IT сфере ✈ Я ищу резюме в IT сфере ✈
Инженер схемотехник! 80000-100000 руб. ТК. соц.пак. Подробнее ✈

Платежный шлюз для разработчиков


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 рублей поступили на счет.



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

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

Поиск IT персонала, python, perl, java, js, erlang, ARM и т.д. Давайте решать задачи вместе! rabota@rabota-ka.ru


© Поиск работы, сотрудников
© Сайт Работа КА
Блог Работа КА Freelance удаленная работа IT FreeSoft бесплатный софт Python news IT Новинки Фото нравится






 


Rambler's Top100 HotLog
Отправить комментарий