Спонсорский материал

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интеграция

С 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]
    

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

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

МЕРОПРИЯТИЯ

Комментарии

 
 
13 февраля 2020

Проблема с подключением PayKassa. Выставление счетов сделали, а проверка платежа не получается. Поможете? sergeyantonov_ya.ru

05 октября 2019

А какую информацию можно получить по id заказа? Интересует будет ли там например eth пдрес покупателя

24 сентября 2019

мгновенно принимать платежи в криптовалюте на своем ресурсе, а также производить многочисленные выплаты с использованием множества (?) платежных систем.

24 сентября 2019

Что не так? Ниже представлен скрин с перечнем платежных систем. И их немало.

30 сентября 2019

Вы ввод от вывода отличаете?

ВАКАНСИИ

Добавить вакансию
Senior Software Engineer (Java)
от 4500 USD до 6000 USD
Senior DevOps Engineer
по итогам собеседования

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

LIVE >

Подпишись

на push-уведомления