我们正在使用Telebot库的第3部分在python中为Telegram机器人编写付款

对于那些没有阅读前面部分的人:


为什么需要付款?


在每个电报机器人开发人员的生活中,都有一段时间需要在您的机器人中实现付款。 在这里,您有两种方法。 首先是注册TIN,IP /法人实体并连接电报的官方付款,或者仅使用Free-Kassa,QIWI等第三方服务。 我认为选择是显而易见的,在本文中,我将使用QIWI,因为我希望如此。

首先,让我们考虑一下该机器人将如何检查结果,来自谁以及多少。 证据负责人告诉我,有必要将整个转账历史记录到一个帐户中,我们将其用作接受付款的帐户。 让我们做吧:

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) 

QIWI_TOKEN常量中我们编写了用于QIWI的api密钥,您可以在此处获取。 然后在QIWI_ACCOUNT中记录您的主要帐户的电话号码。 如果您正确执行了所有操作,则不会出现任何错误。 数据在req词典中,其中包括数据列表。 更具体地说(不读取) 包括数据字典 req变量,该数据字典包含一个包含列表的带编号字典的列表。



在这里,我们应该获得一个电话号码,一个注释(稍后您将了解原因)和交易金额。 为了继续编写代码,如果您一无所知甚至不知道它是什么,则需要能够使用数据库- 这是指向一篇文章的链接,该链接非常清楚地描述了使用Sqlite3 。 现在,让我们考虑一下将在我们的机器人中使用的算法。

  1. 我们生成一个从100,000到999999的随机数。
  2. 暂时将数据输入到表中(用户ID,电话号码,生成的金额较早的随机数)
  3. 我们在req词典中检查注释,科目和金额。
  4. 如果金额,电话和评论同意,我们将计算付款。
  5. 付款后添加您的功能...

现在您可能正在思考,为什么需要检查此注释并生成一个随机数? 而且所有的创意都很简单。 事实是,如果我们仅检查金额和电话,那么该漫游器将能够找到先前发送的交易并对其进行计数。 简而言之,这样做是为了提高安全性并最大程度地减少错误。 让我们继续编写代码:

创建一个表:

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

一旦用户想在您的漫游器中付款,我们就会在表中输入数据。

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

接下来,您需要进行某种付款验证,在我的情况下,它将是嵌入式键盘:

这是我最近的机器人的一个例子。


一旦用户单击付款按钮,该机器人将收到QIWI的翻译历史记录。 现在,我们需要做最重要的事情-付款验证。

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

就这样,我希望我能帮助您解决另一个问题! 客户,你在哪里? 用电报给我写信: dimagorovtsov ,等着大家!

Source: https://habr.com/ru/post/zh-CN470023/


All Articles