Автоматическая отправка сообщений в P2P-чат Binance через WebSocket на Python

Автоматическая отправка сообщений в P2P-чат Binance через WebSocket на Python

Отправка уведомлений продавцу о переводе средств в P2P-чате Binance. Подключение через WebSocket и автоматизация на Python.

В мире автоматизации криптовалютной торговли важной частью остаётся взаимодействие с контрагентами. В Binance P2P-чате часто требуется уведомить продавца или покупателя о том, что платёж был произведён. Это можно сделать автоматически — без ручного ввода, используя WebSocket-соединение и Python.

В этой статье мы рассмотрим, как получить учётные данные чата, подключиться к WebSocket и отправить сообщение в P2P-чат Binance, уведомляя о переводе средств. Это удобно, если вы разрабатываете P2P-бота или автоматизируете P2P-операции.

🔐 Получение учётных данных для WebSocket чата

Для начала нам нужно получить chatWssUrl, listenKey и listenToken, чтобы подключиться к WebSocket-каналу.

📦 Функция retrieveChatCredential

 


def retrieveChatCredential():
    # You Api Key on binance
    api_key = "11111"
    # You Apy Secret on binance
    secret_key = "11111"
    
    base_url = "https://api.binance.com"

    endpoint = "/sapi/v1/c2c/chat/retrieveChatCredential"
    timestamp = int(time.time() * 1000)
    query_string = f"timestamp={timestamp}"

    signature = hmac.new(
        secret_key.encode('utf-8'),
        query_string.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

    headers = {
        "clientType": "web",
        "X-MBX-APIKEY": api_key
    }

    url = f"{base_url}{endpoint}?{query_string}&signature={signature}"
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        return response.json()
    else:
        print("Error:", response.status_code, response.text)
        return None

 

После получения данных формируется URL подключения:

Мы используем библиотеку websocket-client, чтобы установить соединение и получать события в реальном времени из P2P-чата.

 


chatWssUrl = res_detail['data']['chatWssUrl']
listenKey = res_detail['data']['listenKey']
listenToken = res_detail['data']['listenToken']
chat_wss_url = f"{chatWssUrl}/{listenKey}?token={listenToken}&clientType=web"

 

🔌 Установка WebSocket-соединения

 


def connect_to_websocket():
    global reconnect_attempts, ws
    reconnect_attempts = 0
    ws = websocket.WebSocketApp(
        chat_wss_url,
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    ws.run_forever()

 

📡 Обработчики событий

  • on_open — подключение установлено

  • on_message — пришло сообщение

  • on_error — ошибка соединения

  • on_close — закрытие соединения и автоматический reconnect


✉️ Отправка сообщения в чат

Когда приходит нужный момент (например, после перевода средств продавцу), вызывается функция:

 


def send_message(content, order_no):
    if ws_connection:
     # ============================================================
     # 💖 Donation Notice
     #
     # English:
     # ⚠️ Full functionality is available only after making a donation.
     # After your donation, provide the transaction hash and we will unlock the feature for you.
     #
     # Spanish:
     # ⚠️ La funcionalidad completa está disponible solo después de realizar una donación.
     # Después de tu donación, proporciona el hash de la transacción y desbloquearemos la función.
     # ============================================================

        try:
           ws_connection.send(json.dumps(response_message))
           print(f"Message sent to chat: {content}")
           log.logging(f"Message sent payload: {json.dumps(response_message)}")

        except Exception as e:
            log.logging(f"Message sending error: {str(e)}")

Пример вызова:

 


send_message("Здравствуйте, деньги переведены. Пожалуйста, отпустите крипту.", "789456123ABCDEF")

 

Полный код реализации:

 


import uuid
import websocket
import time
import hmac
import hashlib
import requests
import json

# You Api Key on binance
api_key = "11111"
# You Apy Secret on binance
secret_key = "11111"

def retrieveChatCredential():
    
    base_url = "https://api.binance.com"
    endpoint = "/sapi/v1/c2c/chat/retrieveChatCredential"
    timestamp = int(time.time() * 1000)
    query_string = f"timestamp={timestamp}"
    signature = hmac.new(
        secret_key.encode('utf-8'),
        query_string.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

    headers = {
        "clientType": "web",
        "X-MBX-APIKEY": api_key
    }

    url = f"{base_url}{endpoint}?{query_string}&signature={signature}"
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        return response.json()
    else:
        print("Error:", response.status_code, response.text)
        return None

res_detail = retrieveChatCredential()

if res_detail:
    chatWssUrl = res_detail['data']['chatWssUrl']
    listenKey = res_detail['data']['listenKey']
    listenToken = res_detail['data']['listenToken']

    chat_wss_url = f"{chatWssUrl}/{listenKey}?token={listenToken}&clientType=web"
    #print("WebSocket URL:", chat_wss_url)
else:
    raise Exception("Failed to obtain credentials for WebSocket.")

def generate_uuid():
    return str(uuid.uuid4())

def send_message(content, order_no):
    if ws_connection:
     # ============================================================
     # 💖 Donation Notice
     #
     # English:
     # ⚠️ Full functionality is available only after making a donation.
     # After your donation, provide the transaction hash and we will unlock the feature for you.
     #
     # Spanish:
     # ⚠️ La funcionalidad completa está disponible solo después de realizar una donación.
     # Después de tu donación, proporciona el hash de la transacción y desbloquearemos la función.
     # ============================================================


        try:
           ws_connection.send(json.dumps(response_message))
           print(f"Message sent to chat: {content}  for orderNo: {order_no} ")

        except Exception as e:
             print(f"Message sent error: {str(e)}")

def on_open(ws):
    global ws_connection
    ws_connection = ws
    print("WebSocket connection  established for Chat")


def on_message(ws, message):
    try:
        parsed_message = json.loads(message)
        print(f"parsed_message: {parsed_message}")
    except json.JSONDecodeError:
        print("Error JSON:", message)
 

def on_error(ws, error):
    print("Error WebSocket:", error)

def on_close(ws, close_status_code, close_msg):
    global reconnect_attempts
    print("WebSocket connection closed.", close_msg)
   
    if reconnect_attempts < 5:
        reconnect_attempts += 1
        print(f"Attempting to reconnect ({reconnect_attempts})...")
        time.sleep(5)
        connect_to_websocket()
    else:
        print("The maximum number of reconnection attempts has been reached.")

reconnect_attempts = 0
ws_connection = None

def connect_to_websocket():
    global reconnect_attempts, ws
    reconnect_attempts = 0
    ws = websocket.WebSocketApp(
        chat_wss_url,
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    ws.run_forever()

connect_to_websocket()

 

 

🤖 Преимущества автоматизации чата

  • 📈 Ускорение сделок — продавец быстрее получит уведомление.

  • 🔒 Безопасность — меньше ручных действий, меньше ошибок.

  • Экономия времени — особенно при большом объёме сделок.

  • 🧠 Интеграция с ботами — логика может быть встроена в вашего P2P-бота.


🧠 Практическое применение

Такая автоматизация особенно полезна при масштабных операциях или если вы работаете с несколькими ордерами. Бот может моментально уведомить продавца, что оплата отправлена, и сократить общее время завершения сделки.

💡 Готовое решение

У нас есть готовый продукт — P2Pay Binance Bot, в котором уже реализован необходимый функционал. Этот бот автоматически отслеживает статусы заказов, выполняет выплаты продавцам криптовалюты на банковские счета (карты) согласно условиям ордера и одновременно отправляет уведомления и сообщения в чат.

Таким образом, P2Pay Binance Bot полностью автоматизирует процесс обработки сделок и коммуникацию с участниками, обеспечивая удобство и безопасность.

📌 Заключение

Автоматизация P2P-чата Binance с помощью Python и WebSocket — это  инструмент для разработчиков, создающих ботов или автоматизирующих торговые процессы. Получив chatWssUrl и listenToken, вы можете подключаться к чату, слушать события и отправлять сообщения, уведомляя контрагентов о переводах.

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


Защитный код
Обновить


💬
Telegram WhatsApp