Постоянное развитие криптовалюты как средства платежа вызывает потребность в мультивалютных способах оплаты на платежных шлюзах. В этой статье мы с Нвачукву Кингсли Точукву поделимся отличным решением, которое работает для реализации криптовалютных платежей с помощью API.

Пример того, как вы можете реализовать криптовалюту в своем проекте с помощью CoinForBarter, приведен ниже:

Отправка запроса на публикацию API на https://api.coinforbarter.com/v1/payments с необходимой полезной нагрузкой приведет к созданию объекта платежа, с которым вы можете работать.
Пример в javascript с использованием axios показан ниже

/**
*
 * @returns a CoinForBarter payment object
 */
const createPaymentObject = async () => {
  try {
    const url = "https://api.coinforbarter.com/v1/payments";
    const requestPayload = {
      txRef: "RX1",
      amount: 10,
      currency: "BTC",
      currencies: [],
      meta: {
        consumer_id: 23,
      },
      customer: "[email protected]",
      customerPhoneNumber: "+234xxxxxx",
      customerFullName: "John Doe",
    };
    const secretKey = "xxxxxxxxxxxxxxxxxxx";
    const headers = {
      Authorization: `Bearer ${secretKey}`,
    };
    const { data } = await axios.post(url, requestPayload, { headers });
    return data;
  } catch (error) {
    // console.log(error)
  }
};

Вы получите ответ, как показано ниже

{
    "status": "success",
    "data": {
        "payment": {
            "id": "613a1067500d0f0020adf882",
            "_id": "613a1067500d0f0020adf882",
            "status": "in progress",
            "description": "Payment from [email protected]",
            "txRef": "hrgyuur743784",
            "redirectUrl": "",
            "amount": 0,
            "nairaValue": 0,
            "dollarValue": 0,
            "baseAmount": 0.01,
            "baseCurrency": "BTC",
            "currencies": [
                "BTC",
                "DOGE",
                "ETH",
                "USDT",
                "USDC",
                "BUSD",
                "DAI",
                "PAX",
                "BCH",
                "WBTC"
            ],
            "expiresBy": 0,
            "transactionFees": 0,
            "totalDue": 0,
            "customer": "[email protected]",
            "customerDetails": {
                "email": "[email protected]",
                "fullName": ""
            },
            "addressSentFrom": [],
            "transactionTimeLog": [
                {
                    "time": "2021–09–09T13: 47: 19.098Z",
                    "type": "event",
                    "event": "Started transaction"
                }
            ],
            "isCurrencyLocked": false,
            "createdAt": "2021–09–09T13: 47: 19.100Z"
        },
        "url": "https: //coinforbarter-checkout.herokuapp.com/v1/api-pay/6109aa97-ad5bab00–1b913f89–613a1067–500d0f00–20adf882"
    },
    "message": "payment created"
}

Есть два режима, в которых этот платежный объект может использоваться для обработки полного платежа:
• Размещение на CoinForBarter.
• Самостоятельное размещение.

Хостинг CoinForBarter

Вы можете просто перенаправить своего клиента в поле data.url, чтобы завершить платеж. Это называется стандартом CoinForBarter. Подробнее читайте в Стандартной документации CoinForBarter.

Он откроет платежный шлюз, как показано ниже, для клиента, чтобы завершить платеж.

Вы можете предоставить redirectUrl для полезных данных запроса, чтобы перенаправить клиента на этот URL-адрес после завершения платежа.

Вы также можете предоставить веб-перехватчик, как показано здесь.

Самостоятельное размещение

Для самообслуживания вы можете иметь собственный интерфейс, показываемый клиенту на протяжении всего процесса оплаты.

Процесс оплаты имеет следующий цикл.

• Выберите валюту и сеть
• Заблокируйте валюту
• Получите адрес и сумму, которую клиент должен заплатить из выбранной валюты.

Ниже показан пример с использованием аксиомов Javascript.

/**
 *
 * @param {string} paymentId the payment id gotten from data.id
 * @param {string} currency the selected currency to process the payment in eg BTC
 * @param {string} network the selected blockchain network of the currency eg. BEP20
 * @returns an updated payment object containing extra information based on selected currency and network
 */
const setCurrency = async (paymentId, currency, network) => {
  try {
    const url = `https://api.coinforbarter.com/v1/payments/${paymentId}/currency/set/${currency}/${network}`;
    const secretKey = "xxxxxxxxxxxxxxxxxxx";
    const headers = {
      Authorization: `Bearer ${secretKey}`,
    };
    const { data } = await axios.patch(url, {}, { headers });
    return data;
  } catch (error) {
    // console.log(error)
  }
};

Список поддерживаемых валют и их сетей на выбор можно найти здесь.

После выбора валюты возвращенная полезная нагрузка будет выглядеть, как показано ниже.

{
    "status": "success",
    "data": {
        "id": "60d461fe6410f43ce05be378",
        "status": "in progress",
        "description": "Payment from [email protected]",
        "txRef": "hrgyuur743784",
        "fee": 0.00030047,
        "currency": "BTC",
        "currencyNetwork": "bitcoin",
        "amount": 0.01030047,
        "baseAmount": 0.01,
        "baseCurrency": "BTC",
        "currencies": [],
        "transactionFees": 0,
        "totalDue": 0,
        "customer": "[email protected]",
        "customerDetails": {
            "email": "[email protected]"
        },
        "addressInformation": {
            "address": "19xqUGJ5Keo1LjDfatShxfHcKQT6HV24x3",
            "network": "bitcoin",
            "id": "60c7ca61ef2a380a447ed864"
        },
        "addressSentFrom": [],
        "transactionTimeLog": [
            {
                "time": "2021–06–24T10:44:14.787Z",
                "type": "event",
                "event": "Started transaction"
            },
            {
                "time": "2021–06–24T10:44:54.905Z",
                "type": "event",
                "event": "set currency to BTC, bitcoin"
            },
            {
                "time": "2021–06–24T10:45:40.482Z",
                "type": "event",
                "event": "locked currency"
            }
        ],
        "isCurrencyLocked": true,
        "createdAt": "2021–06–24T10:44:14.788Z"
    },
    "message": "currency locked"
}

Вышеупомянутый объект содержит data.currency и data.currencyNetwork. Это подтверждает, что валюта выбрана.
data.amount - сумма к оплате в выбранной валюте.

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

Пример ниже

/**
 *
 * @param {string} paymentId paymentId the payment id gotten from data.id
 * @returns an updated payment object containing extra information based on the locked currency and network
 */
const lockCurrency = async (paymentId) => {
  try {
    const url = `https://api.coinforbarter.com/v1/payments/${paymentId}/currency/lock`;
    const secretKey = "xxxxxxxxxxxxxxxxxxx";
    const headers = {
      Authorization: `Bearer ${secretKey}`,
    };
    const { data } = await axios.patch(url, {}, { headers });
    return data;
  } catch (error) {
    // console.log(error)
  }
};

Данные, возвращенные выше, аналогичны этим

{
    "status": "success",
    "data": {
        "id": "60d461fe6410f43ce05be378",
        "status": "in progress",
        "description": "Payment from [email protected]",
        "txRef": "hrgyuur743784",
        "fee": 0.00030047,
        "currency": "BTC",
        "currencyNetwork": "bitcoin",
        "amount": 0.01030047,
        "baseAmount": 0.01,
        "baseCurrency": "BTC",
        "currencies": [],
        "transactionFees": 0,
        "totalDue": 0,
        "customer": "[email protected]",
        "customerDetails": {
            "email": "[email protected]"
        },
        "addressInformation": {
            "address": "19xqUGJ5Keo1LjDfatShxfHcKQT6HV24x3",
            "network": "bitcoin",
            "id": "60c7ca61ef2a380a447ed864"
        },
        "addressSentFrom": [],
        "transactionTimeLog": [
            {
                "time": "2021–06–24T10: 44: 14.787Z",
                "type": "event",
                "event": "Started transaction"
            },
            {
                "time": "2021–06–24T10: 44: 54.905Z",
                "type": "event",
                "event": "set currency to BTC, bitcoin"
            },
            {
                "time": "2021–06–24T10: 45: 40.482Z",
                "type": "event",
                "event": "locked currency"
            }
        ],
        "isCurrencyLocked": false,
        "createdAt": "2021–06–24T10: 44: 14.788Z"
    },
    "message": "currency locked"
}

Объект выше содержит data.isCurrencyLocked Это подтверждает, что транзакция была заблокирована для выбранной валюты.
data.addressInformation показывает адрес и сеть, на которую должна быть отправлена ​​сумма.

Последний шаг - получить уведомление и подтвердить получение платежа.

Вы можете использовать CoinForBarter Webhooks, чтобы получать уведомления.

Затем проверьте транзакцию, проверив, что data.amountReceived равняется data.amount со следующей конечной точкой.

/**
 *
 * @param {string} paymentId paymentId paymentId the payment id gotten from data.id
 * @returns the present state of the payment object
 */
const verifyPayment = async (paymentId) => {
  try {
    const url = `https://api.coinforbarter.com/v1/payments/${paymentId}`;
    const secretKey = "xxxxxxxxxxxxxxxxxxx";
    const headers = {
      Authorization: `Bearer ${secretKey}`,
    };
    const { data } = await axios.patch(url, {}, { headers });
    return data;
  } catch (error) {
    // console.log(error)
  }
};

Вы можете получить свой секретный ключ в личном кабинете CoinForBarter.

Вы также можете использовать data.status для обозначения success, если платеж был успешным, error, если платеж не прошел, inProgress , если платеж выполняется, или cancelled, если платеж был отменен.

В этой статье мы узнали, как интегрировать криптовалюту в качестве способа оплаты с API. Nwachukwu Kingsley и я написал это. Ранее мы писали о том, как реализовать криптовалюту в качестве платежного средства с использованием html и javascript. В будущем мы будем писать о его реализации с помощью React и React Native. Мы будем признательны за ваши комментарии, и если у вас есть какие-либо вопросы, не стесняйтесь писать Кингсли или я в Твиттере.