Kami sedang menulis pembayaran untuk bot telegram di python menggunakan perpustakaan telebot bagian 3

Bagi yang belum membaca bagian sebelumnya:


Mengapa Anda perlu pembayaran?


Dalam kehidupan setiap pengembang bot telegram, ada saatnya Anda perlu menerapkan pembayaran dalam bot Anda. Dan di sini Anda memiliki dua cara. Yang pertama adalah mendaftarkan TIN, IP / Badan hukum dan menghubungkan pembayaran resmi dari telegram atau hanya menggunakan layanan pihak ketiga seperti Free-Kassa, QIWI, dll. Saya pikir pilihannya jelas, dalam artikel ini saya akan menggunakan QIWI, karena saya menginginkannya.

Untuk memulai, mari kita pikirkan tentang bagaimana bot akan memeriksa apa yang telah datang, dari siapa dan berapa banyak. Kapten bukti memberi tahu saya bahwa akan diperlukan untuk mendapatkan seluruh riwayat transfer ke akun, yang akan kami gunakan sebagai akun kami untuk menerima pembayaran. Mari kita lakukan:

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) 

Di konstanta QIWI_TOKEN, kami menulis kunci api untuk bekerja dengan QIWI, Anda bisa mendapatkannya di sini . Dan di QIWI_ACCOUNT kami mencatat nomor telepon akun utama Anda. Jika Anda melakukan semuanya dengan benar, tidak akan ada kesalahan. Data ada di kamus req , yang mencakup daftar data. Atau lebih tepatnya (jangan membaca) variabel req yang menyertakan kamus data, yang berisi daftar kamus bernomor yang menyertakan daftar.



Di sini kita harus mendapatkan nomor telepon, komentar (nanti Anda akan mengerti mengapa) dan jumlah transaksi. Untuk terus menulis kode, Anda harus dapat menggunakan database, jika Anda tidak tahu apa-apa atau bahkan tidak tahu apa itu - di sini ada tautan ke artikel yang menjelaskan cara bekerja dengan Sqlite3 dengan sangat jelas. Sekarang mari kita pikirkan algoritma yang akan digunakan dalam bot kita.

  1. Kami menghasilkan angka acak dari 100.000 hingga 999999.
  2. Masukkan sementara data ke dalam tabel (id pengguna, nomor telepon, jumlah yang dihasilkan nomor acak sebelumnya)
  3. Kami memeriksa komentar, akun, dan jumlah dalam kamus req .
  4. Jika jumlah, telepon, dan komentar setuju, kami menghitung pembayaran.
  5. Tambahkan fungsionalitas Anda setelah pembayaran ...

Sekarang Anda mungkin berpikir, mengapa Anda perlu memeriksa komentar ini dan menghasilkan angka acak? Dan semua cerdik itu sederhana. Faktanya adalah bahwa jika kita hanya memeriksa jumlah dan telepon, maka bot akan dapat menemukan transaksi yang dikirim sebelumnya dan menghitungnya. Sederhananya, ini dilakukan untuk keamanan dan meminimalkan bug. Mari kita terus menulis kode:

Buat tabel:

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

Kami memasukkan data dalam tabel segera setelah pengguna ingin membayar sesuatu di bot Anda.

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

Selanjutnya, Anda perlu melakukan semacam verifikasi pembayaran, dalam kasus saya ini akan menjadi keyboard inline:

Ini adalah contoh dari bot saya yang terbaru.


Segera setelah pengguna mengklik tombol pembayaran, bot akan menerima riwayat terjemahan dengan QIWI. Sekarang kita perlu melakukan hal yang paling penting - verifikasi pembayaran.

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

Itu saja, saya harap saya membantu Anda memecahkan masalah lain! Pelanggan, di mana Anda? Menulis saya di telegram: dimagorovtsov , menunggu semua orang!

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


All Articles