Nous écrivons un paiement pour un bot de télégramme en python en utilisant la bibliothèque de telebot partie 3

Pour ceux qui n'ont pas lu les parties précédentes:


Pourquoi avez-vous besoin d'un paiement?


Dans la vie de chaque développeur de bot de télégramme, il arrive un moment où vous devez implémenter le paiement dans votre bot. Et ici, vous avez deux façons. La première consiste à enregistrer le TIN, l'IP / l'entité juridique et à connecter le paiement officiel à partir du télégramme ou simplement à utiliser un service tiers comme Free-Kassa, QIWI, etc. Je pense que le choix est évident, dans cet article je vais utiliser QIWI, car je le veux.

Pour commencer, réfléchissons à la façon dont le bot vérifiera ce qui est venu, de qui et combien. Le capitaine de la preuve me dit qu'il sera nécessaire d'obtenir l'historique complet des transferts vers un compte, que nous utiliserons comme notre compte pour accepter les paiements. Faisons-le:

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) 

Dans la constante QIWI_TOKEN, nous écrivons la clé api pour travailler avec QIWI, vous pouvez l'obtenir ici . Et dans QIWI_ACCOUNT, nous enregistrons le numéro de téléphone de votre compte principal. Si vous avez tout fait correctement, il n'y aura aucune erreur. Les données sont dans le dictionnaire req , qui comprend des listes de données. Plus précisément (ne lisez pas) la variable req qui inclut le dictionnaire de données, qui contient une liste de dictionnaires numérotés qui incluent des listes.



Ici, nous devrions obtenir un numéro de téléphone, un commentaire (vous comprendrez plus tard pourquoi) et le montant de la transaction. Pour continuer à écrire du code, vous devrez pouvoir utiliser des bases de données, si vous ne savez rien ou même ne savez pas ce que c'est - voici un lien vers un article qui décrit très clairement le travail avec Sqlite3 . Réfléchissons maintenant à l'algorithme qui sera utilisé dans notre bot.

  1. Nous générons un nombre aléatoire de 100 000 à 999 999.
  2. Entrez temporairement les données dans le tableau (identifiant utilisateur, numéro de téléphone, montant généré précédemment, nombre aléatoire)
  3. Nous vérifions le commentaire, le compte et le montant dans le dictionnaire req .
  4. Si le montant, le téléphone et le commentaire sont d'accord, nous comptons le paiement.
  5. Ajoutez vos fonctionnalités après le paiement ...

Maintenant, vous pensez probablement, pourquoi avez-vous besoin de vérifier ce commentaire et de générer un nombre aléatoire? Et tout ingénieux est simple. Le fait est que si nous vérifions simplement le montant et le téléphone, le bot pourra trouver la transaction précédemment envoyée et la compter. Autrement dit, cela est fait pour la sécurité et pour minimiser les bugs. Continuons à écrire le code:

Créez une table:

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

Nous entrons les données dans le tableau dès que l'utilisateur souhaite payer quelque chose dans votre 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() 

Ensuite, vous devez faire une sorte de vérification de paiement, dans mon cas, ce sera un clavier en ligne:

Voici un exemple de mon récent robot.


Dès que l'utilisateur clique sur le bouton de paiement, le bot recevra un historique de traduction avec QIWI. Maintenant, nous devons faire la chose la plus importante - la vérification du paiement.

 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}") #      # ,  ,     

C'est tout, j'espère que je vous ai aidé à résoudre un autre problème! Clients, où êtes-vous? Écrivez-moi dans les télégrammes: dimagorovtsov , en attendant tout le monde!

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


All Articles