Как подключить на сайт прием криптовалют? Обзор сервиса PayKassa.pro
Давно мечтали о платежной системе, которая работала бы с криптой? Тогда вы по адресу: раскуриваем PayKassa – первый агрегатор платежей в криптовалюте.
Чтобы не голословить, сразу перейдем к механике работы сервиса. Итак, что это и с чем его едят.
PayKassa – это сервис, который поможет тебе мгновенно принимать платежи в криптовалюте на своем ресурсе, а также производить многочисленные выплаты с использованием множества платежных систем.
Чем крут данный агрегатор?
- Ты сможешь работать с более чем 20 платежными системами, самые известные из которых – Bitcoin, Ethereum, Dash, Litecoin, DogeCoin. Весь перечень можешь посмотреть на странице тарифов.
- С подключением к системе разберется даже ребенок. Создаешь мерчант, копируешь код, и твой сайт готов принимать и рассылать моментальные платежи. В разделе “Разработчикам” находишь PHP-классы для работы с API и SCI, скачиваешь их и радуешься жизни. Все максимально просто.
- Для тех, кто использует готовую 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.
Параметры для работы с запросом:
- domain — домен магазина
- sci_key — секретный ключ магазина (указывается при его создании)
- currency — валюта
- amount — сумма (используется указанная валюта)
- comment — комментарий к заказу
- order_id — Id заказа
- system — Id выбранной платежной системы
- sci_id — Id созданного магазина (смотри выше)
- 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]
Сама интеграция довольно проста. Все, что тебе нужно, – это следовать приведенным инструкциям.