نكتب الآن دفعة لبوت برقية في بيثون باستخدام جزء مكتبة التيلبوت 3

بالنسبة لأولئك الذين لم يقرأوا الأجزاء السابقة:


لماذا تحتاج الدفع؟


في حياة كل مطور برامج telegram bot ، يأتي وقت تحتاج فيه إلى تنفيذ عملية الدفع في برنامج الروبوت الخاص بك. وهنا لديك طريقتان. الأول هو تسجيل رقم TIN و IP / Legal وتوصيل الدفعة الرسمية من البرق أو مجرد استخدام خدمة تابعة لجهات أخرى مثل 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 ، نكتب مفتاح api للعمل مع QIWI ، ويمكنك الحصول عليه هنا . وفي QIWI_ACCOUNT نسجل رقم هاتف حسابك الرئيسي. إذا فعلت كل شيء بشكل صحيح ، فلن يكون هناك أي أخطاء. البيانات موجودة في قاموس req ، والذي يتضمن قوائم البيانات. بشكل أكثر تحديدًا (لا تقرأ) متغير req الذي يتضمن قاموس البيانات ، والذي يحتوي على قائمة من القواميس المرقمة التي تتضمن قوائم.



هنا يجب أن نحصل على رقم هاتف وتعليق (فيما بعد ستفهم السبب) ومبلغ المعاملة. لمتابعة كتابة التعليمات البرمجية ، ستحتاج إلى أن تكون قادرًا على استخدام قواعد البيانات ، إذا كنت لا تعرف أي شيء أو حتى لا تعرف ما هي عليه - هنا رابط لمقال يصف العمل مع Sqlite3 بوضوح تام. الآن دعونا نفكر في الخوارزمية التي سيتم استخدامها في الروبوت الخاص بنا.

  1. نقوم بإنشاء رقم عشوائي من 100000 إلى 999999.
  2. أدخل البيانات مؤقتًا في الجدول (معرف المستخدم ، رقم الهاتف ، المبلغ الذي تم إنشاؤه في وقت مبكر رقم عشوائي)
  3. نحن التحقق من التعليق والحساب والمبلغ في القاموس مسا .
  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/ar470023/


All Articles