Wir schreiben eine Zahlung für einen Telegrammbot in Python mit der Telebot-Bibliothek Teil 3

Für diejenigen, die die vorherigen Teile nicht gelesen haben:


Warum brauchen Sie eine Zahlung?


Im Leben eines jeden Telegramm-Bot-Entwicklers kommt eine Zeit, in der Sie die Zahlung in Ihrem Bot implementieren müssen. Und hier haben Sie zwei Möglichkeiten. Die erste besteht darin, die TIN, IP / Rechtsperson zu registrieren und die offizielle Zahlung aus dem Telegramm zu verbinden oder einfach einen Drittanbieter-Service wie Free-Kassa, QIWI usw. zu nutzen. Ich denke, die Wahl liegt auf der Hand. In diesem Artikel werde ich QIWI verwenden, weil ich es so will.

Lassen Sie uns zunächst darüber nachdenken, wie der Bot überprüft, was von wem und wie viel gekommen ist. Der Hauptmann der Beweise sagt mir, dass es notwendig sein wird, die gesamte Überweisungshistorie auf ein Konto zu übertragen, das wir als unser Konto verwenden, um Zahlungen zu akzeptieren. Lass es uns tun:

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) 

In der Konstante QIWI_TOKEN schreiben wir den API-Schlüssel für die Arbeit mit QIWI. Sie können ihn hier herunterladen . Und in QIWI_ACCOUNT zeichnen wir die Telefonnummer Ihres Hauptkontos auf. Wenn Sie alles richtig gemacht haben, gibt es keine Fehler. Die Daten befinden sich im erforderlichen Wörterbuch, das Datenlisten enthält. Genauer gesagt (nicht lesen) die req-Variable, die das Datenwörterbuch enthält, das eine Liste nummerierter Wörterbücher enthält, die Listen enthalten.



Hier sollten wir eine Telefonnummer, einen Kommentar (später werden Sie verstehen warum) und den Transaktionsbetrag erhalten. Um weiterhin Code schreiben zu können, müssen Sie in der Lage sein, Datenbanken zu verwenden, wenn Sie nichts wissen oder gar nicht wissen, was es ist. Hier ist ein Link zu einem Artikel , in dem die Arbeit mit Sqlite3 ganz klar beschrieben wird. Lassen Sie uns nun über den Algorithmus nachdenken, der in unserem Bot verwendet wird.

  1. Wir generieren eine Zufallszahl von 100.000 bis 999999.
  2. Geben Sie die Daten vorübergehend in die Tabelle ein (Benutzer-ID, Telefonnummer, früher generierte Zufallszahl).
  3. Wir überprüfen den Kommentar, das Konto und den Betrag im erforderlichen Wörterbuch.
  4. Wenn der Betrag, das Telefon und der Kommentar übereinstimmen, zählen wir die Zahlung.
  5. Fügen Sie Ihre Funktionalität nach der Zahlung hinzu ...

Jetzt denken Sie wahrscheinlich, warum müssen Sie diesen Kommentar überprüfen und eine Zufallszahl generieren? Und alles Geniale ist einfach. Tatsache ist, dass der Bot die zuvor gesendete Transaktion finden und zählen kann, wenn wir nur den Betrag und das Telefon überprüfen. Einfach ausgedrückt, dies dient der Sicherheit und der Minimierung von Fehlern. Schreiben wir den Code weiter:

Erstellen Sie eine Tabelle:

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

Wir geben die Daten in die Tabelle ein, sobald der Benutzer etwas in Ihrem Bot bezahlen möchte.

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

Als nächstes müssen Sie eine Art Zahlungsüberprüfung durchführen. In meinem Fall handelt es sich um eine Inline-Tastatur:

Hier ist ein Beispiel von meinem letzten Bot.


Sobald der Benutzer auf die Zahlungsschaltfläche klickt, erhält der Bot einen Übersetzungsverlauf mit QIWI. Jetzt müssen wir das Wichtigste tun - die Überprüfung der Zahlung.

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

Das ist alles, ich hoffe ich habe dir geholfen ein anderes Problem zu lösen! Kunden, wo sind Sie? Schreiben Sie mir in Telegrammen: dimagorovtsov , warten auf alle!

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


All Articles