Как подключить на сайт прием криптовалют? Обзор сервиса PayKassa.pro

Давно мечтали о платежной системе, которая работала бы с криптой? Тогда вы по адресу: раскуриваем PayKassa – первый агрегатор платежей в криптовалюте.

Чтобы не голословить, сразу перейдем к механике работы сервиса. Итак, что это и с чем его едят.

PayKassa – это сервис, который поможет тебе мгновенно принимать платежи в криптовалюте на своем ресурсе, а также производить многочисленные выплаты с использованием множества платежных систем.

Чем крут данный агрегатор?

  1. Ты сможешь работать с более чем 20 платежными системами, самые известные из которых – Bitcoin, Ethereum, Dash, Litecoin, DogeCoin. Весь перечень можешь посмотреть на странице тарифов.
  2. С подключением к системе разберется даже ребенок. Создаешь мерчант, копируешь код, и твой сайт готов принимать и рассылать моментальные платежи. В разделе “Разработчикам” находишь PHP-классы для работы с API и SCI, скачиваешь их и радуешься жизни. Все максимально просто.
  3. Для тех, кто использует готовую CMS, на сайте перечислены готовые CMS-модули оплат, в которых можно указать PayKassa как сервис приема платежей, что упростит процесс подключения.

Настройка сервиса

Вот мы и подобрались к самому интересному.

После регистрации вы можете изменить язык интерфейса на русский. Перейди на вкладку “Мерчанты” и нажми “Добавить мерчант”:

Заполни форму и снова нажми кнопку “Добавить мерчант”:

Обрати внимание, что “URL обработчика” – это адрес для уведомлений об изменении статуса заказа.

После добавления выскочит месседж, сообщающий об успешной регистрации. Если ты перейдешь на вкладку Мерчанты, то увидишь там свой сайт с балансом по каждой из поддерживаемых сервисом платежных систем. В настройках найдешь информацию по доступным операциям с процентами и фиксированной комиссией:

Платежные системы, с которыми не будешь работать, можно просто отключить.

После создания мерчанту будет присвоен ID. Он потребуется для дальнейшей работы. Посмотреть его можно на вкладке “Мерчанты”:

Интеграция

С PHP проблем не будет. Как мы уже упоминали ранее, ты можешь использовать готовые PHP классы для получения адреса, выставления счета, проверки оплаты и моментальных выплат. Но даже в случае с другим языком никаких трудностей возникнуть не должно.

А вот чтобы работать с этим на других языках, понадобится использовать обертку. Как? Смотри дальше.

Python:

import httplib
import urllib
import json

class PayKassa:
    sci_domain = 'paykassa.pro'
    sci_path = '/sci/0.4/index.php'

    def __init__(self, sci_id, sci_key, domain, test):
        self.sci_id = sci_id
        self.sci_key = sci_key
        self.domain = domain
        self.test = test and 'true' or 'false'

    def sci_create_order(self, amount, currency, order_id, comment, system):
        return self.make_request({
            'func': 'sci_create_order',
            'amount': amount,
            'currency': currency,
            'order_id': order_id,
            'comment': comment,
            'system': system
        })

    def sci_confirm_order(self, private_hash):
        return self.make_request({ 'func': 'sci_confirm_order', 'private_hash': private_hash })

    def make_request(self, params):
        fields = {'sci_id': self.sci_id, 'sci_key': self.sci_key, 'domain': self.domain, 'test': self.test}.copy()
        fields.update(params)
        encoded_fields = urllib.urlencode(fields)
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}

        conn = httplib.HTTPSConnection(self.sci_domain)
        conn.request('POST', self.sci_path, encoded_fields, headers)
        response = conn.getresponse()
        return json.loads(response.read())

Используем:

paykassa = PayKassa(0, '123', 'mydomain.com', False)
result = paykassa.sci_create_order(0.001, 'BTC', 1, 'Order number 1', 11)
if result['error']:
  print(result['message'])
else:
  print(result['data']['url'])

Node.js:

var https = require('https');
var querystring = require('querystring');

function mergeArray(array1,array2) {
  for(item in array1) {
    array2[item] = array1[item];
  }
  return array2;
}

function PayKassaApi(sci_id, sci_key, domain, test) {
  this.sci_id = sci_id;
  this.sci_key = sci_key;
  this.domain = domain;
  this.test = test || false;
};
PayKassaApi.methods = [
  'sci_create_order',
  'sci_confirm_order'
]
PayKassaApi.prototype.sendRequest = function(method, params, callback) {
  if (PayKassaApi.methods.indexOf(method) === -1) {
    throw new Error('wrong method name ' + method)
  };

  if (callback == null) {
    callback = params;
  };

  var data = {
    method: method,
    sci_id: this.sci_id,
    sci_key: this.sci_key,
    domain: this.domain,
    test: this.test
  }
  data = mergeArray(params, data)

  var body = querystring.stringify(data);

  var options = {
    host: 'paykassa.pro',
    port: 443,
    path: '/sci/0.4/index.php',
    method: 'POST',            
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
  };

  var request = https.request(options, function (response) {
    var result = '';
    response.setEncoding('utf8');

    response.on('data', function (chunk) {
      result += chunk;
    });
    response.on('end', function () {
      try {
        callback(JSON.parse(result));
      } catch (e) {
        console.error(e);
        callback(result);
      }
    });
  });

  request.write(body)
  request.end()
};

for (var i = 0; i < PayKassaApi.methods.length; i++) {
  PayKassaApi.prototype[PayKassaApi.methods[i]] = function (method) {
    return function (params, callback) {
      this.sendRequest(method, params, callback)
    }
  }(PayKassaApi.methods[i])
}

module.exports = PayKassaApi

Используем:

var PayKassa = require("./paykassa")
var paykassa = new Api({ sci_id: 0, sci_key: '123', domain: 'mydomain.com', test: true })
paykassa.sci_create_order({
  amount: 0.01,
  currency: 'BTC',
  order_id: 1,
  comment: 'test order №1',
  system: 1
}, function (res) {
  if (res.error) {
    throw new Error(res.message)
  } else {
    console.log(res.data.url)
  }
})

Ruby:

require 'net/http'
class Paykassa
  BASE_SCI_URI = URI('https://paykassa.pro/sci/0.4/index.php')

  def initialize(auth = Rails.application.secrets[:paykassa])
    @_auth = auth
  end

  def create_order(amount:, currency:, order_id:, comment:, system:)
    make_request(
      func: :sci_create_order,
      amount: amount,
      currency: currency,
      order_id: order_id,
      comment: comment,
      system: system
    )
  end

  def confirm_order(private_hash)
    make_request(func: :sci_confirm_order, private_hash: private_hash)
  end

  private

  def make_request(data)
    res = Net::HTTP.post_form(BASE_SCI_URI, data.merge(@_auth))
    JSON.parse(res.body).deep_symbolize_keys
  end
end

Используем:

paykassa = Paykassa.new
    result = paykassa.create_order(
      amount: 0.01,
      currency: 'BTC',
      order_id: 1,
      comment: "Payment №1",
      system: 11
    )
    raise StandardError.new(result[:message]) if result[:error]
    url = result[:data][:url]

Коллаут – стандартный POST запрос multipart/form-data.

Параметры для работы с запросом:

  1. domain — домен магазина
  2. sci_key — секретный ключ магазина (указывается при его создании)
  3. currency — валюта
  4. amount — сумма (используется указанная валюта)
  5. comment — комментарий к заказу
  6. order_id — Id заказа
  7. system — Id выбранной платежной системы
  8. sci_id — Id созданного магазина (смотри выше)
  9. test — тестовый режим

Проверка

Как только платеж совершен, сервис PayKassa обращается к “URL обработчика”. Как ты помнишь, туда приходят уведомления об изменении статуса заказа. Обращение будет содержать Id заказа. Чтобы получить статус, сделай запрос с использованием этого Id:

curl https://paykassa.pro/sci/0.4/index.php -d 'func=sci_confirm_order&private_hash=PRIVATE_HASH&sci_id=SCI_ID&sci_key=SCI_KEY&domain=DOMAIN&test=true' -H 'Content-type: application/x-www-form-urlencoded'

Как это выглядит в уже приведенных языках программирования?

Python:

paykassa = PayKassa(0, '123', 'mydomain.com', False)
result = paykassa.confirm_order(request.POST['private_hash'])
if result['error']:
  print(result['message'])
else:
  print(result['data']['order_id'])
  print(result['data']['amount'])

Node.js:

var PayKassa = require("./paykassa")
var paykassa = new Api({ sci_id: 0, sci_key: '123', domain: 'habratest.ngrok.io', test: true })
paykassa.sci_confirm_order({
    private_hash: req.body.private_hash
  }, function (res) {
  if (res.error) {
    throw new Error(res.message)
  } else {
    console.log(res.data.order_id)
    console.log(res.data.amount)
  }
})

Ruby:

paykassa = Paykassa.new
    private_hash = params[:private_hash]
    result = paykassa.confirm_order(private_hash)

    raise StandardError.new(result[:message]) if result[:error]

    order_id = res[:data][:order_id]
    amount = res[:data][:amount]

Сама интеграция довольно проста. Все, что тебе нужно, – это следовать приведенным инструкциям.

Остались вопросы? С радостью ответим в комментариях ;)

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

Библиотека программиста
29 января 2018

Создаем первый смарт-контракт на Ethereum менее чем за 60 минут

Расскажем, как создать смарт-контракт на блокчейне Ethereum при помощи серв...