Постоянное развитие криптовалюты как средства платежа вызывает потребность в мультивалютных способах оплаты на платежных шлюзах. В этой статье мы с Нвачукву Кингсли Точукву поделимся отличным решением, которое работает для реализации криптовалютных платежей с помощью 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. Мы будем признательны за ваши комментарии, и если у вас есть какие-либо вопросы, не стесняйтесь писать Кингсли или я в Твиттере.