Estamos escribiendo un pago para un bot de telegramas en Python usando la biblioteca de telebot parte 3

Para aquellos que no han leído las partes anteriores:


¿Por qué necesitas el pago?


En la vida de cada desarrollador de bot de telegramas, llega un momento en el que necesita implementar el pago en su bot. Y aquí tienes dos formas. El primero es registrar la entidad TIN, IP / Legal y conectar el pago oficial desde el telegrama o simplemente usar un servicio de terceros como Free-Kassa, QIWI, etc. Creo que la elección es obvia, en este artículo usaré QIWI, porque así lo deseo.

Para comenzar, pensemos en cómo el bot verificará lo que vino, de quién y cuánto. El capitán de pruebas me dice que será necesario obtener todo el historial de transferencias a una cuenta, que usaremos como nuestra cuenta para aceptar pagos. Hagámoslo:

import requests import json QIWI_TOKEN = '' QIWI_ACCOUNT = '' s = requests.Session() s.headers['authorization'] = 'Bearer ' + QIWI_TOKEN parameters = {'rows': '50'} h = s.get('https://edge.qiwi.com/payment-history/v1/persons/'+ QIWI_ACCOUNT +'/payments', params = parameters) req = json.loads(h.text) 

En la constante QIWI_TOKEN, escribimos la clave de API para trabajar con QIWI, puede obtenerla aquí . Y en QIWI_ACCOUNT registramos el número de teléfono de su cuenta principal. Si hiciste todo correctamente, no habrá errores. Los datos están en el diccionario de requisitos , que incluye listas de datos. O, mejor dicho (no lea) la variable req que incluye el diccionario de datos, que contiene una lista de diccionarios numerados que incluyen listas.



Aquí deberíamos obtener un número de teléfono, un comentario (más adelante comprenderá por qué) y el monto de la transacción. Para continuar escribiendo código, necesitará poder usar bases de datos, si no sabe nada o incluso no sabe qué es, aquí hay un enlace a un artículo que describe el trabajo con Sqlite3 con bastante claridad. Ahora pensemos en el algoritmo que se usará en nuestro bot.

  1. Generamos un número aleatorio de 100,000 a 999999.
  2. Ingrese temporalmente los datos en la tabla (identificación de usuario, número de teléfono, cantidad generada anteriormente número aleatorio)
  3. Verificamos el comentario, la cuenta y la cantidad en el diccionario de requisitos .
  4. Si la cantidad, el teléfono y el comentario están de acuerdo, contamos el pago.
  5. Agregue su funcionalidad después del pago ...

Ahora probablemente esté pensando, ¿por qué necesita verificar este comentario y generar un número aleatorio? Y todo ingenioso es simple. El hecho es que si solo verificamos la cantidad y el teléfono, el bot podrá encontrar la transacción enviada anteriormente y contarla. En pocas palabras, esto se hace por seguridad y para minimizar los errores. Sigamos escribiendo el código:

Crea una tabla:

 import sqlite3 c.execute("CREATE TABLE IF NOT EXISTS payment_query(user_id INTEGER, phone TEXT, sum INTEGER, code INTEGER)") 

Ingresamos los datos en la tabla tan pronto como el usuario quiera pagar algo en su bot.

 from random import randint #   ,    phone = '+79999999999' sum = 100 random_code = randint(100000, 999999) c.execute(f"INSERT INTO payment_query VALUES({message.from_user.id}, {phone}, {sum}, {random_code})") conn.commit() 

A continuación, debe hacer algún tipo de verificación de pago, en mi caso será un teclado en línea:

Aquí hay un ejemplo de mi bot reciente.


Tan pronto como el usuario haga clic en el botón de pago, el bot recibirá un historial de traducción con QIWI. Ahora tenemos que hacer lo más importante: la verificación del pago.

 result = c.execute(f"SELECT * FROM payment_query WHERE user_id = {call.message.chat.id}").fetchone() #     #    ,      () phone = result[1] random_code = result[3] sum = result[2] #     for i in range(len(req['data'])): if req['data'][i]['account'] == phone: if req['data'][i]['comment'] == random_code: if req['data'][i]['sum']['amount'] == sum: c.execute(f"DELETE FROM payment_query WHERE user_id = {call.message.chat.id}") #      # ,  ,     

¡Eso es todo, espero haberte ayudado a resolver otro problema! Clientes, ¿dónde estás? Escríbeme en telegramas: dimagorovtsov , esperando a todos!

Source: https://habr.com/ru/post/470023/


All Articles