Как начать принимать криптоплатежи в своем интернет-магазине?

accept crypto bitcoin usdt on website

Принимайте криптовалюту на своем сайте за 5 минут с Mitilena Payprocessing company for accepting cryptocurrencies on the site

1. Зарегистрируйтесь в нашей системе, регистрация моментальная, подтверждения не требуется.
2. Подключите свой магазин через API или Плагин WordPress Woocommerce.
3. Начните принимать оплату за свои товары в криптовалюте!
4. Выводите криптовалюту на любой из своих кошельков без каких-либо ограничений.

 

Наши возможности по приему криптовалют:
  • Быстрая регистрация
  • Подключайтесь за 5 минут в любое время, семь дней в неделю
  • Поддержка USDT на трех блокчейнах (ERC20 Ethereum, TRC20 Tron, BEP20 Binance Smart Chain)
  • Готовый плагин для WooCommerce (WordPress)
  • Первые 90 дней комиссия 0%, далее 0,8%.

На данный момент мы поддерживаем следующие криптовалюты: USDT, VMT, APFC.
По запросу мы можем добавить нужную вам криптовалюту.

Немного подробнее:

  1. Когда пользователь выбирает оплату криптовалютой в корзине покупок, он перенаправляется на страницу нашей системы для оплаты криптовалютой.
  2. Процесс формирования цены выглядит следующим образом: стоимость всего заказа конвертируется в доллары США, а затем в криптовалюту. Курс рассчитывается официальным Центральным банком вашей страны, без комиссии.
  3. Выплаты в криптовалюте USDT происходят очень быстро, около 3 секунд. После оплаты платежная страница пользователя сигнализирует ему, что платеж прошел успешно. Вы, как владелец интернет-магазина, получите электронное письмо о том, что платеж прошел успешно.
  4. Из нашей системы вы можете в любое время вывести криптовалюту на любой другой адрес. Советуем вам вывести на холодный кошелек в нашем кошельке.

F.A.Q.

Как отслеживаются платежи?

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

Как мне сэкономить с помощью вашей системы отслеживания платежей?

Обычно при оплате в Интернете криптовалютой клиент всегда получает новый адрес для оплаты. Каждый счет имеет новый платежный адрес. То есть, если у вас 1000 заказов в день, вам будет сгенерировано 1000 адресов и по 1000 адресов придет оплата. Чтобы потом собрать все платежи в один кошелек, вам нужно будет заплатить 1000-кратную комиссию, даже если вы поместите много адресов в одну транзакцию, это будет очень дорого. Короче говоря, 1000 транзакций = 1000 комиссий (например, один доллар за транзакцию). Это значительно увеличивает стоимость данного способа оплаты. У нас из-за уникальной технологии и, следовательно, разных сумм на миллионную долю доллара мы собираем 1000 платежей на один адрес и только потом меняем его. Получается экономия на комиссиях в 1000 раз.

Какие еще преимущества?

У нас самая быстрая система на USDT, платеж занимает несколько секунд для первых нескольких блоков и статус «Успешно». За счет использования стейблкоинов меньшая волатильность курса, что позволяет использовать криптовалюту как обычный платежный инструмент с минимальными рисками, но с очень хорошей анонимностью, даже если она вам не нужна.

Как тогда вывести собранную криптовалюту?

Выберите любой адрес из своего горячего кошелька, заплатите комиссию в размере 1 USDT и отправьте.

Нужно ли мне подтвердить магазин или компанию, чтобы начать работу?

На данный момент не требуется. В будущем это может понадобиться некоторым юрисдикциям по всему миру.

Если платеж не пройдет, можно ли вручную повторно отправить ссылку для оплаты?

Да, ссылку на оплату вы можете отправить через любой мессенджер (или почтой). При оплате определенной суммы на конкретный кошелек, независимо от того, откуда плательщик взял эту информацию и даже через какой сторонний кошелек он ее оплатил, заказ автоматически получит статус оплаченного.

Отправляет ли ваша система отдельное электронное письмо клиенту об оплате?

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

Хранит ли ваша платформа какую-либо информацию?

Сохраняет вашу электронную почту без дополнительных пояснений, а также обезличенную историю анонимизированных транзакций без привязки к адресу вашего интернет-магазина. Мы даже не храним адрес вашего интернет-магазина.

Есть ли с вашей стороны какие-либо трекеры, отслеживающие информацию?

С нашей стороны нет трекеров, маркетинговых файлов cookie и так далее. AdGuard AdBlocker гордо показывает 0, и мы этим гордимся.

Распространяет ли ваша платформа информацию о клиентах?

Нет, и не планируем.

Какие бумажные валюты поддерживает ваш плагин?

Примерно 147 мировых валют, т.е. почти все. Внимание, курс USDT не всегда равен ровно 1 доллару. Иногда это 0,999 или 1,001. Косвенно это касается и других валют, сначала берется ваша валюта, например, норвежская крона, она конвертируется в доллары США по курсу Национального банка Норвегии, а затем USD конвертируется в USDT по среднему курсу трекер (coingecko или coinmarketcap).

Могу ли я добавить свою собственную криптовалюту в вашу систему?

На данный момент, если ваша криптовалюта находится на блокчейне Tron и по протоколу TRC20 (03.09.2023, также добавлена возможность токенов ERC20 Ethereum и BEP20 Binance Smart Chain), существуют следующие возможности:

  1. Только в пределах вашего магазина или сети магазинов (до 10-15) мы можем добавить вашу криптовалюту за 1990 долларов США, ссылка для оплаты, после оплаты напишите нам письмо на support@mitilena.com, укажите точные адреса магазинов, информацию о вашем токене и мы передадим этим магазинам дополнительно вашу монету через API. Ваши пользователи смогут платить вам вашей собственной криптовалютой. Мы можем установить курс как хард, так и из открытых источников (coinmarketcap, coingecko).
  2. Если вы хотите добавить свои монеты во всю нашу сеть, вам необходимо владеть как минимум 1% наших акций.

Остальные блокчейны уже в разработке. Если вы отправите нам электронное письмо со своим блокчейном и описанием его, как мы его реализуем, мы сообщим вам об этом.

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

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

 

Инструкция по подключению API для разработчиков

  1. Вам необходимо получить ключ API в нашей системе в разделе «Настройки». Регистрация занимает около 5 секунд. Первоначальная проверка и подтверждение вашего магазина не требуются. Вы можете начать принимать криптовалюту немедленно и сразу же вывести ее.
  2. Когда заказ размещен в вашем интернет-магазине и с вашей стороны известна общая стоимость заказа, вы создаете объект JSON, который отправляете на наш сервер POST-запросом.
  3. Мы регистрируем ваш возможный запрос на оплату, в ответ отправляем вам наш внутренний номер заказа и ссылку для оплаты.
  4. Вы перенаправляете пользователя на эту платежную страницу, он платит и автоматически перенаправляется обратно на ваш сайт.
  5. Мы обращаемся к вашему сайту со скрытым запросом и сообщаем, что заказ оплачен (это делается через так называемый вебхук). Вы помещаете заказ в свою базу как оплаченный (автоматически) и далее для вас процесс стандартный, как и любой другой оплаченный заказ.

Если ваш интернет-магазин работает на WordPress (WooCommerce), то вам не нужно ничего программировать, у нас есть готовый плагин для приема криптовалюты, перейдите по ссылке, чтобы увидеть инструкции и сам плагин

 

Описание API:

Шаг 2. Создание объекта JSON (пример JavaScript).

Возможные значения поля блокчейна, возьмите значение из кавычек (например: tether-trc20):

'tether-erc20' (ERC20 Ethereum USDT, contract: 0xdac17f958d2ee523a2206206994597c13d831ec7)

'tether-bep20' (BEP20 Binance smart chain USDT, contract: 0x55d398326f99059ff775485246999027b3197955)

'tether-trc20' (TRC20 Tron USDT, contract: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t)

'mitilena-own' (Vanishing Mitilena, VMT token)
'apfcoin' (ERC20 Ethereum APFC, contract: 0x8eD955a2b7d2C3a17a9d05dACa95E01818f8C11e)

 

let createPaymentObj =
    {
        userSecret: 'your_API_key', // required
        userPaymentId: 'your_payment_id_usually_order_id', // required
        blockchain: 'tether-trc20', // required 
        fiatCode: '3x_ISO_code_of_your_fiat_currency_for example_EUR', // required
        customerEmail: 'customer_mail', // required

        fiatAmount: 'digit_amount_in_fiat_currency_for_example_100', // number, required
        userProductId: 'your_product_id_if_any', // not required
        language: 'two_digit_ISO_language_code', // default en, not required [available: en, cz, ru, tr, my, hr, si, ar, swa] - the rest will be an error
        // redirectUrl_yours: 'thank_you_page or success_page',
        redirectUrl_yours: 'url_on_your_site_where_to_send_user_after_successful_payment', // not required, but very desirable
        webHookPostUrl_yours: 'url_on_your_site_where_the_hidden_POST_request_will_go_on_successful_payment,' // required
    }

В заголовки запроса также необходимо вставить свой API-ключ: ‘mitilena-signature’: ‘your_api_key’
Выглядит это примерно так:

headers: {
     'Content-Type': 'application/json',
     accept: 'application/json',
     'mitilena-signature': 'your_key',
}

И отправьте его в виде POST-запроса по адресу:
https://mitilena.com/api/generatePayment

Если создание счета прошло успешно, то ответ сервера будет с кодом 200 и ответ будет содержать объект JSON, например, примерно такой:
Из этого ответа вам понадобится всего 2 поля, invoiceId и PaymentPage. Необходимо отправить (перенаправить) пользователя на страницу оплаты на сайте Mitilena Pay [поле PaymentPage]!

{
  usdtOverAmount: '1.580437',
  invoiceId: 'auto-e80099-ef456c-e0de42',
  invoiceVs: '0437',
  fiatAmount: '1.450',
  fiatCurrency: 'EUR',
  rateLocalCurrencyToNeededCrypto: '0.917',
  rateNeededCryptoToUSD: '0.99959700',
  isTrc20: 1,
isErc20: 0,
isBep20: 0, whenInit: '2023-08-22T11:30:05.000Z', contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', customerEmail: 'email_customer@email.com', productId: 85, expiresAt: '2023-09-05T11:30:05.000Z', blockchainHash: null, cryptoShortCode: 'USDT', cryptoValue: '1.580437', fiatValue: '1.450', receivedOnAddress: 'TRHpcBugcdEdD6BdW6k1Grtof6LBvRGWWJ', txId: 'auto-e80099-ef456c-e0de42', fiatShortCode: 'EUR', wasPaid: null, redirectUrl: 'https://google.com', paymentPage: 'https://mitilena.com/pay/auto-e80099-ef456c-e0de42/fast/' }

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

Примеры JavaScript (node.js версии 16.8)
Запрос:
const https = require('https');
const url = require('url');

const data = JSON.stringify({
    userSecret: '',
    userPaymentId: 'userPaymentdId111',
    blockchain: 'tether-trc20',
    fiatCode: 'EUR',
    customerEmail: 'email_customer@email.com',

    fiatAmount: 1.45,
    userProductId: 'new_someGoodsOk',
    language: 'en', // default en, not neccessary
    // redirectUrl_yours: 'https://google.com',
    redirectUrl_yours: 'https://google.com',
    webHookPostUrl_yours: 'https://mitilena.com/mi_webhook/'
});

const myURL = url.parse('https://mitilena.com/api/generatePayment');

const options = {
    hostname: myURL.hostname,
    port: myURL.port,
    path: myURL.pathname,
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        accept: 'application/json',
        'mitilena-signature': '',
    },
};

requestAsync(options, data)
    .then(dataFObj => {
        if (dataFObj.statusCode === 200) {
            let tokensObj = JSON.parse(dataFObj.dataRaw);
            console.log('success:', tokensObj)
        } else {
            console.log('error dataFObj', dataFObj);
            throw new Error('some errror in postToWebHook ' + dataFObj.dataRaw);
        }
    })
    .catch(e => {
        console.log('error request:', e)
    })


function requestAsync(optionsArr, dataToPost = false) {
    return new Promise((resolve, reject) => {
        const req = https.request(optionsArr, (resp) => {
            // console.log(`statusCode: ${resp.statusCode}`);
            let dataF = '';
            // A chunk of data has been received.
            resp.on('data', (chunk) => {
                dataF += chunk;
            });

            resp.on('end', () => {
                resolve({statusCode: resp.statusCode, dataRaw: dataF});
            }).on('error', (err) => {
                console.log('Error: ' + err);
                reject(err);
            });
        });

        if (dataToPost) {
            req.write(dataToPost);
        }

        req.end();
    });
}

Модуль url в Node.js выше 16 версии, похоже, изменил синтаксис, если что, найдите информацию по этой теме или введите адрес и путь вручную.

Примеры в PHP и WordPress:
Запрос с использованием функции WordPress wp_remote_post(), посмотрите на чистую функцию PHP, она будет выглядеть примерно так:
<?php
$request_body = [
    'userSecret' => $this->mitilenaToken,
    'userPaymentId' => $order->id,    
  'blockchain' => 'tether-trc20', 'fiatCode' => $order->currency,    
  'customerEmail' => $order->get_billing_email(), 'fiatAmount' => $order->get_total(), 'userProductId' => $orderids, 'language' => 'en', // default en, not neccessary 'redirectUrl_yours' => $order->get_checkout_order_received_url(), 'webHookPostUrl_yours' => 'https://mywebsite.com/post-handler.php' ]; $request_headers = [ 'content-type' => 'application/json', 'mitilena-signature' => $this->mitilenaToken, ]; $args = [ 'method' => 'POST', 'httpversion' => '1.0', 'timeout' => 90, 'headers' => $request_headers, 'body' => '' ]; $environment_url = 'https://mitilena.com/api/generatePayment/'; $result = wp_remote_post($environment_url, array( 'method' => 'POST', 'headers' => $request_headers, 'timeout' => 60, // added 'redirection' => 5, // added 'blocking' => true, // added 'httpversion' => '1.0', 'sslverify' => false, 'body' => json_encode($request_body)) ); $fullObj = json_decode($result['body']); if (isset($result['response']) && isset($result['response']['code']) && $result['response']['code'] != 200) { $mi__err_message = 'Unknown error'; if (isset($result['body'])) { $mi__err_message = 'Error: ' . $result['body']; } // error handling + exit exit; } if (!isset($fullObj->paymentPage)) { http_response_code(400); // Bad Request echo "Error: No payment page specified"; exit; } $paymentPage = $fullObj->paymentPage; if (strlen($paymentPage) < 5) { http_response_code(400); // Bad Request echo "Error: payment page is too short."; exit; } ?>

Шаг 5, создание обработчика WebHook на стороне вашего сайта (сервера):

На примере версии Node.js 16.8 и версии Express.js 4 (JavaScript)
const bodyParser = require('body-parser');
const Big = require('big.js')
let endpointSecret = 'copy of the api key value'

// an object called statusObj arrives
app.post('/mi_webhook/', bodyParser.json(), (request, response) => {

    try {
        let eventObj = request.body;
        const signature = request.headers['mitilena-signature'];

        console.log({eventObj});
// compare the incoming secret key with your real one
        if (signature === endpointSecret) {
            if (!eventObj.statusObj) {
                return response.status(400).send('Error, no object.');
            }

            let hookObj = eventObj.statusObj;

            if (
                typeof hookObj.mitilenaInvoiceId === 'undefined' ||
                typeof hookObj.yourPaymentId === 'undefined' ||
                typeof hookObj.yourProductName === 'undefined' ||
                typeof hookObj.yourProductId === 'undefined' ||
                typeof hookObj.secretKey === 'undefined' ||
                typeof hookObj.stableCoinAmount === 'undefined' ||
                typeof hookObj.stableCoinSymbol === 'undefined' ||
                typeof hookObj.stableCoinBlockchain === 'undefined' ||
                typeof hookObj.localCurrencyAmount === 'undefined' ||
                typeof hookObj.localCurrencyCode === 'undefined' ||
                typeof hookObj.wasPaid === 'undefined' ||
                typeof hookObj.blockchainHash === 'undefined'
            ) {
                return response.status(400).send('Error, incomplete object.');
            }

            if (hookObj.wasPaid === true) {
                let centsAmount = Big(hookObj.localCurrencyAmount).times(Big(100)).round(0).toNumber();

// put the order in your database as paid and return the status code 200
// this is an example of our code, yours may look different
                paymentsModel
                    .completeUserPayment(hookObj.mitilenaInvoiceId, centsAmount)
                    .then((okString) => {
                        return response.status(200).send('all good Mitilena token');
                    })
                    .catch((e) => {
                        console.log('err in completeUserCardPayment', e.message);
                        return response.status(400).send('error, contact support');
                    });
            } else {
                return response.status(400).send('invoice was not paid');
            }
        } else {
            return response.status(400).send('bad Mitilena token');
        }
    } catch (e) {
        console.log('webhook err:', e.message);
        return response.status(400).send('bad request, error');
    }
});
Используя пример PHP:

Создайте файл-обработчик и поместите его на свой веб-сервер (сайт), чтобы он был доступен снаружи, т.е. если вы пропишете полный путь к файлу, чтобы он открывался, например https://youwebsite.com /webhook.php (это пример, можно по другому, через маршрутизацию и т.д.).

Как уже говорилось выше, укажите этот адрес в объекте, в котором вы создаете ссылку для оплаты, т.е.
{….
webHookPostUrl_yours: ‘https://youwebsite.com/webhook .php’

Содержимое файла:

<?php
$mi__jsonData = file_get_contents('php://input');
if (!$mi__jsonData) {
    http_response_code(400); // Bad Request
    echo 'bad input data';
    exit;
}
// Decode the JSON data into a PHP associative array
$mitilena_data = json_decode($mi__jsonData, true);


// Check if decoding was successful
if ($mitilena_data !== null && isset($mitilena_data['statusObj'])) {
    $mitilena_data = $mitilena_data['statusObj'];

    if (!isset($mitilena_data['secretKey'])) {
        http_response_code(400); // Bad Request
        echo "Error: Api key of Mitilena (Mitilena Token) is not specified. We can't verify if the request is genuine. Cancellation of a transaction.";
        exit;
    }
    $mitilenaToken = $mitilena_data['secretKey'];

    // compare your real API key with the one you received
    $realMitilenaToken = 'your_api_key'


    if ($mitilenaToken != $realMitilenaToken) {
        http_response_code(400); // Bad Request
        echo "Error: API token does not match. The website owner must specify the correct Api Mitilena token.";
        exit;
    }


    if (!isset($mitilena_data['yourPaymentId'])) {
        http_response_code(400); // Bad Request
        echo "Error: No payment id specified";
        exit;
    }
    $mi__paymentId = $mitilena_data['yourPaymentId'];

    if (strlen($mi__paymentId) < 1) {
        http_response_code(400); // Bad Request
        echo "Error: too short payment id.";
        exit;
    }
    
    function mi__pay_escapeString($var)
    {
        $var = stripslashes($var);
        $var = htmlentities($var);
        $var = strip_tags($var);
        return $var;
    }

    // yourPaymentId
    try {
        $mi__order = '';  // search your database for this order, mi__pay_escapeString($mi__paymentId)
    } catch (Throwable $e) {
        http_response_code(400); // Bad Request
        echo "Error: wrong payment id (order id). {yourPaymentId: \"\"}";
        exit;
    }

    if (!isset($mitilena_data['wasPaid'])) {
        http_response_code(400); // Bad Request
        echo "Error: No payment status specified";
        exit;
    }
    $mi__wasPaid = $mitilena_data['wasPaid'];


    if ($mi__wasPaid == true) {

        $blockchainHash = '';
        if (isset($mitilena_data['blockchainHash'])) {
            $blockchainHash = mi__pay_escapeString($mitilena_data['blockchainHash']);
        }

        // set the order as paid in your database
        // reduce inventory if required
        // send the user an email if required

        echo 'success';
    } else {
        echo 'unpaid status received';
    }
 } else {

    // JSON decoding failed
    http_response_code(400); // Bad Request
    echo "Invalid JSON data";
}

exit;
?>

Вот и все, если есть вопросы, задавайте в комментариях.

У вас нет разработчика, который мог бы реализовать это за вас? Напишите нам на адрес support@mitilena.com, мы сделаем Вам коммерческое предложение на работу разработчика по подключению криптоплатежей.

2 Comments

  1. Добрый день. Моя компания занимается разработкой и продажей программного обеспечения в сфере IT безопасности. Нуждаемся в платёжном инструменте, с помощью которого наши клиенты смогут оплачивать наши услуги в фиатной валюте анонимно. Есть ли у вашей компании такой инструмент? Если да, напишите, пожалуйста, условия и тарифы. Заранее благодарю за ответ.

    1. Добрый день, спасибо за вопрос.
      В фиатной валюте анонимно принимать возможности нет. А в криптовалюте анонимно, да – можно.
      0.8% с каждой транзакции и первые 3 месяца бесплатно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *