Cómo Enviar Comprobantes en Binance P2P con Python y WebSocket

Cómo Enviar Comprobantes en Binance P2P con Python y WebSocket

📩 Envío Automático de Recibos a los Vendedores en Binance P2P Chat Usando WebSocket y Python


En un artículo anterior explicamos cómo enviar mensajes automáticos en el chat P2P de Binance (Envío automático de mensajes a Binance P2P Chat con WebSocket y Python).

En esta ocasión aprenderás a enviar un comprobante de pago (recibo) directamente al vendedor dentro del chat de Binance P2P, utilizando WebSocket y Python.
Esta función es clave si estás construyendo un bot de arbitraje P2P, un sistema de pagos automatizado o una herramienta de gestión de operaciones cripto.


🔐 Cómo Obtener las Credenciales del Chat para WebSocket

Antes de enviar mensajes o imágenes, debemos recuperar tres valores esenciales:

  • chatWssUrl

  • listenKey

  • listenToken

Estos datos permiten establecer la conexión WebSocket con el servidor de Binance.

📦 Función retrieveChatCredential()

 


def retrieveChatCredential():
    # You Api Key on binance
    api_key = "11111"
    # You Apy Secret on binance
    api_secret = "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

 

Once the credentials are retrieved, we construct the connection URL:

We use the  websocket-client library to establish a connection and listen for real-time events from the P2P chat

 


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"

 

🔌 Conexión al 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()

 

📡 Los controladores (on_open, on_message, on_error, on_close) manejan los eventos de la conexión y reconectan automáticamente en caso de error.


✉️ Envío del Recibo de Pago

Cuando el comprador realiza la transferencia al vendedor, el bot puede enviar automáticamente el comprobante de pago (imagen) al chat.

 


def send_receipt(order_no: str, file_path: str):
    message_uuid = generate_uuid()
    timestamp = int(time.time() * 1000)
    query_string = f"timestamp={timestamp}"

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

    if not os.path.exists(file_path):
        print(f"File not found: {file_path}")
        return

    # 1️⃣ Get the file name (any name is possible)
    image_name = os.path.basename(file_path)

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

    parameters = {
        "timestamp": timestamp,
        "signature": signature
    }

    payload = {...}

   

📁 Ejemplo de uso:

file_path = r"C:\webSocetBinance\receipt.jpg" 
send_receipt("22764965405709934592", file_path)

 

Full implementation:

 


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

# You Api Key on binance
api_key = "111"

# You Apy Secret on binance
api_secret = "111"



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(
        api_secret.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_receipt(order_no: str, file_path: str):
    message_uuid = generate_uuid()
    timestamp = int(time.time() * 1000)
    query_string = f"timestamp={timestamp}"

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

    if not os.path.exists(file_path):
        print(f"File not found: {file_path}")
        return

    # 1️⃣ Get the file name (any name is possible)
    image_name = os.path.basename(file_path)

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

    parameters = {
        "timestamp": timestamp,
        "signature": signature
    }

    payload = {...}

    

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()

file_path = r"C:\webSocetBinance\receipt.jpg"
send_receipt("22764965405709934592", file_path)

 

Result:

send receipt binance p2p chat

 

Video Demo · Binance P2P Chat

Automatización del Chat de Binance P2P con Python y WebSocket

Mira cómo Python y WebSocket pueden utilizarse para automatizar la comunicación en tiempo real dentro del chat de Binance P2P, incluyendo el envío de mensajes relacionados con órdenes P2P activas.

Demostración práctica de la automatización de mensajes en Binance P2P Chat utilizando Python y una conexión WebSocket en tiempo real.

 

Automatización en Tiempo Real

Beneficios de Automatizar el Chat de Binance P2P

La automatización del chat de Binance P2P permite conectar los eventos de una orden con acciones de mensajería en tiempo real. En lugar de enviar manualmente cada confirmación, un bot en Python puede reaccionar al estado de la operación y comunicarse con el comprador o vendedor mediante WebSocket.

Comunicación Más Rápida

Envía confirmaciones y mensajes relacionados con la operación sin esperar una intervención manual del trader.

Menos Acciones Manuales

Reduce tareas repetitivas como informar que un pago fue enviado o compartir información relacionada con una orden P2P.

Integración con Bots P2P

La mensajería puede formar parte de una lógica más amplia que monitorea órdenes, pagos y cambios de estado en Binance P2P.

Procesamiento de Múltiples Órdenes

Un sistema basado en eventos puede gestionar la comunicación asociada a diferentes operaciones sin depender de un flujo completamente manual.

Integración Lista para Usar

Integración de Binance P2P Chat WebSocket con Python

Si necesitas una implementación funcional sin desarrollar toda la integración del chat de Binance P2P desde cero, ofrecemos una integración Binance P2P Chat WebSocket para Python diseñada para bots P2P y sistemas de automatización.

El stack en Python proporciona las funciones principales necesarias para integrar la comunicación en tiempo real del chat de Binance P2P en tu propia aplicación:

Mensajes Automáticos

Envía mensajes automáticamente a compradores o vendedores directamente en el chat de Binance P2P.

Comprobantes de Pago

Envía imágenes de comprobantes de pago como parte de un flujo P2P automatizado.

Conexión WebSocket

Mantén comunicación WebSocket en tiempo real y procesa eventos del chat de Binance P2P.

Integración con Bots

Integra la mensajería de Binance P2P en bots de trading y herramientas de automatización desarrolladas en Python.

En lugar de implementar desde cero toda la capa de mensajería WebSocket, los desarrolladores pueden utilizar esta integración como base para crear sistemas personalizados de automatización Binance P2P.

 

Automatización P2P Completa

Del Chat Automatizado al Procesamiento Completo de Órdenes P2P

Para operaciones que requieren más que mensajería automática, P2Pay Binance Bot amplía la automatización al procesamiento de órdenes Binance P2P.

El sistema puede monitorear órdenes P2P, coordinar flujos de procesamiento de pagos y enviar automáticamente notificaciones y mensajes a través del chat de Binance P2P, reduciendo las acciones manuales durante la gestión de operaciones.

💬
Telegram WhatsApp