Создание вебхуков
Создание вебхуков
Заголовок раздела «Создание вебхуков»Это руководство поможет вам создавать вебхуки с помощью API Chaingateway. Оно включает подробности о написании базового приёмника вебхуков, подписке на вебхук и обработке параметров, специфичных для конкретной сети.
Как это работает
Заголовок раздела «Как это работает»Наша система вебхуков работает как система Instant Payment Notification. Её можно использовать для уведомления вашего программного обеспечения о входящем платеже или получении токена. Она состоит из двух частей кода:
Вебхук: Это URL-эндпоинт, на который будут отправляться уведомления вебхука. Вы должны предоставить этот URL API Chaingateway при подписке на вебхук. Вам также нужно указать параметры фильтра, такие как sender, receiver, contractaddress, token_id и type (тип транзакции). Если в блокчейне происходит событие, соответствующее этим критериям, мы отправим вебхук на указанный вами URL.
Приёмник вебхука: Это код, который выполняется на вашем сервере и прослушивает входящие уведомления вебхука. Он получает payload вебхука и выполняет необходимые действия в вашем программном обеспечении на основе полученных данных.
Чтобы настроить систему вебхуков, вам нужно реализовать код приёмника вебхука на своём сервере и настроить URL вебхука в API Chaingateway. После настройки, каждый раз при возникновении платежа или получении токена, API Chaingateway будет отправлять POST-запрос на ваш URL вебхука, запуская код приёмника вебхука и позволяя вашему программному обеспечению предпринять соответствующие действия.
Написание базового приёмника вебхука
Заголовок раздела «Написание базового приёмника вебхука»Приёмник вебхука — это эндпоинт сервера, который прослушивает входящие HTTP POST-запросы от ChainGateway. Ниже приведены примеры базовых приёмников вебхуков на различных языках программирования.
Пример кода
Заголовок раздела «Пример кода»const express = require('express');const app = express();const port = 3000;
app.use(express.json());
app.post('/webhook', (req, res) => { console.log('Received webhook:', req.body); res.status(200).send('Webhook received');});
app.listen(port, () => { console.log(`Webhook receiver listening at http://localhost:${port}`);});from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])def webhook(): data = request.json print('Received webhook:', data) return jsonify({'status': 'Webhook received'}), 200
if __name__ == '__main__': app.run(port=3000)<?phpif ($_SERVER['REQUEST_METHOD'] === 'POST') { $data = file_get_contents('php://input'); $json = json_decode($data, true); file_put_contents('php://stderr', print_r($json, TRUE)); http_response_code(200); echo json_encode(['status' => 'Webhook received']);}?>/** To integrate this code into a Laravel application, follow these steps:** 1. Create a new route in your `routes/web.php` file:* Route::post('/webhook', [WebhookController::class, 'handleWebhook']);** 2. Create a new controller using the Artisan command:* php artisan make:controller WebhookController** This will create a new `WebhookController` class in the `app/Http/Controllers` directory.** 3. Open the newly created `WebhookController.php` file and replace its content with the code provided above.** Now, your Laravel application is ready to handle webhooks using the `WebhookController` class.**/
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WebhookController extends Controller{ public function handleWebhook(Request $request) { $data = $request->all(); file_put_contents('php://stderr', print_r($data, TRUE)); return response()->json(['status' => 'Webhook received'], 200); }}Создание вебхука для подписки на событие блокчейна
Заголовок раздела «Создание вебхука для подписки на событие блокчейна»Чтобы подписаться на вебхук, вам нужно отправить запрос к API ChainGateway с соответствующими параметрами.
Параметры
Заголовок раздела «Параметры»- url (обязательный): URL вашего приёмного эндпоинта вебхука. Должен быть допустимым URL.
- from: Адрес отправителя (необязательный, требуется хотя бы один из
fromилиto). - to: Адрес получателя (необязательный, требуется хотя бы один из
fromилиto). - contractaddress: Адрес контракта токена (необязательный).
- token_id: Обязателен, если отсутствуют и
from, иto. - type: Тип транзакции (необязательный). Возможные значения:
TRX,TRC10,TRC20,TRC721.
Пример заголовка Authorization
Заголовок раздела «Пример заголовка Authorization»Замените YOUR_API_TOKEN на ваш реальный API-токен.
Пример кода
Заголовок раздела «Пример кода»curl --request POST \ --url https://api.chaingateway.io/v2/webhooks \ --header 'Accept: application/json' \ --header 'content-type: application/json' \ --header 'Authorization: YOUR_API_TOKEN' \ --data '{ "url": "http://yourdomain.com/webhook", "from": "TXSenderAddress", "to": "TXReceiverAddress", "contractaddress": "0xTokenContractAddress", "token_id": "12345", "type": "TRC20"}'import requests
url = "https://api.chaingateway.io/v2/webhooks"payload = { "url": "http://yourdomain.com/webhook", "from": "TXSenderAddress", "to": "TXReceiverAddress", "contractaddress": "0xTokenContractAddress", "token_id": "12345", "type": "TRC20"}headers = { 'Accept': 'application/json', 'content-type': 'application/json', 'Authorization': 'YOUR_API_TOKEN'}
response = requests.post(url, json=payload, headers=headers)print(response.json())const axios = require('axios');
const url = 'https://api.chaingateway.io/v2/webhooks';const payload = { url: 'http://yourdomain.com/webhook', from: 'TXSenderAddress', to: 'TXReceiverAddress', contractaddress: '0xTokenContractAddress', token_id: '12345', type: 'TRC20'};const headers = { 'Accept': 'application/json', 'content-type': 'application/json', 'Authorization': 'YOUR_API_TOKEN'};
axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); });<?phprequire 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();$response = $client->post('https://api.chaingateway.io/v2/webhooks', [ 'headers' => [ 'Accept' => 'application/json', 'content-type' => 'application/json', 'Authorization' => 'YOUR_API_TOKEN', ], 'json' => [ 'url' => 'http://yourdomain.com/webhook', 'from' => 'TXSenderAddress', 'to' => 'TXReceiverAddress', 'contractaddress' => '0xTokenContractAddress', 'token_id' => '12345', 'type' => 'TRC20' ]]);
echo $response->getBody();?><?php
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([ 'Accept' => 'application/json', 'content-type' => 'application/json', 'Authorization' => 'YOUR_API_TOKEN',])->post('https://api.chaingateway.io/v2/webhooks', [ 'url' => 'http://yourdomain.com/webhook', 'from' => 'TXSenderAddress', 'to' => 'TXReceiverAddress', 'contractaddress' => '0xTokenContractAddress', 'token_id' => '12345', 'type' => 'TRC20']);
echo $response->body();Важная информация
Заголовок раздела «Важная информация»- Убедитесь, что ваш приёмный эндпоинт вебхука публично доступен и может обрабатывать HTTP POST-запросы.
- Защитите свой эндпоинт вебхука, проверяя источник входящих запросов и обеспечивая целостность данных.
- Chaingateway не хранит чувствительную информацию, такую как токен. Поэтому храните эту информацию в безопасности.
- Информацию о получении API-ключа и об авторизации см. в разделе «Начало работы» документации Chaingateway.