Recebendo Pix em bot Telegram
Se você quer criar um bot para o Telegram ou integrar funcionalidades de mensagens no seu projeto,
a API do Telegram é uma opção incrível – e muito mais fácil de usar do que parece. Com ela,
você consegue automatizar o envio de mensagens, gerenciar grupos, criar interações
personalizadas e até processar pagamentos. Tudo isso com bastante liberdade e flexibilidade.
A melhor parte é que a API funciona bem com várias linguagens de programação,
mas, se eu puder recomendar, Python é uma das melhores para começar. Ela tem várias bibliotecas
dedicadas, como o python-telegram-bot
, que agilizam bastante o
trabalho.
E se você já tiver
alguma experiência com desenvolvimento, vai se sentir em casa rapidinho; se ainda está começando,
vai encontrar uma comunidade enorme para ajudar.
Requisitos
- Ter uma conta Mercado Pago.
- Obter um token de acesso no painel de credenciais.
- Ter uma chave PIX para receber pagamentos cadastrada em sua conta.
Instalação
Instale a biblioteca oficial do Mercado Pago para utilizar a cobrança via PIX.
pip install mercadopago
Cobrança simples
import mercadopago
sdk = mercadopago.SDK(TOKEN)
payment_data = {
"transaction_amount": valor,
"description": "descrição",
"payment_method_id": 'pix',
"installments": 1,
"payer": {
"email": '[email protected]'
}
}
result = sdk.payment().create(payment_data)
print(result['response'])
transaction_amount
: Valor a ser cobradodescription
: Descriçãopayment_method_id
: (Não alterar) Método de pagamentoinstallments
: (Não alterar) Número de parcelas;player
:e-mail
: E-mail do cliente/pagador
Cobrança com validade
Abaixo, um script que gera cobrança com validade igual a 30 minutos:
import datetime
import mercadopago
sdk = mercadopago.SDK(TOKEN)
expire = datetime.datetime.now() + datetime.timedelta(minutes=30)
expire = expire.strftime("%Y-%m-%dT%-H:%M:%S.000-03:00")
payment_data = {
"date_of_expiration": f"{expire}",
"transaction_amount": valor,
"description": "descrição",
"payment_method_id": 'pix',
"installments": 1,
"payer": {
"email": '[email protected]'
}
}
result = sdk.payment().create(payment_data)
print(result['response'])
date_of_expiration
: Data de validade. Padrão: 1 dia.- : Formato obrigatório:
yyyy-MM-dd'T'HH:mm:ssz
- : Formato obrigatório:
Resposta
Para fins de simplicação, apenas alguns items da resposta serão tratados aqui.
Consulte a lista completa na documentação
oficial.
Usando-se qualquer um dos códigos anteriores,
pix_copia_cola = result['response']['point_of_interaction']['transaction_data']['qr_code']
qr_code = result['response']['point_of_interaction']['transaction_data']['qr_code_base64']
pix_copia_cola
: Valor a ser colado no PIX para ser feito o pagamento já com o valor fixado;qr_code
: QRCode correspondente ao pix copia e cola em base64.
Ou seja, com o pix_copia_cola
já é possível fazer o pagamento.
A imagem contida em qr_code
pode ser usada também. Mais abaixo é
demonstrado como ela pode ser enviada.
Lista de cobrança
Para verificar todas as cobranças em sua conta, independente do estado e listadas na ordem em que foram geradas, utilize:
import mercadopago
sdk = mercadopago.SDK(TOKEN_MERCADOPAGO)
payments = sdk.payment().search({'sort':'date_created', 'criteria': 'desc'})
for payment in payments['response']['results']:
print(payment['id'], payment['status'], payment['description'], payment['date_of_expiration'])
Verificando o estado
Uma cobrança de ID específico pode ser verificada usando:
import mercadopago
import telebot
bot = telebot.TeleBot(TOKEN_BOT)
sdk = mercadopago.SDK(TOKEN_MERCADOPAGO)
result = sdk.payment().get(ID_DO_PAGAMENTO)
payment = result["response"]
print(payment['status'], payment['description'])
Bot envia PIX copia e cola
Este bot irá enviar uma cobrança no valor de R$ 10 (linha 27) para a pessoa que enviar o comando
/pagar
.
import datetime
import mercadopago
import telebot
sdk = mercadopago.SDK(TOKEN_MERCADOPAGO)
bot = telebot.TeleBot(TOKEN_BOT)
def create_payment(value):
expire = datetime.datetime.now() + datetime.timedelta(days=1)
expire = expire.strftime("%Y-%m-%dT%-H:%M:%S.000-03:00")
payment_data = {
"transaction_amount": int(value),
"payment_method_id": 'pix',
"installments": 1,
"description": 'Descrição',
"date_of_expiration": f"{expire}",
"payer": {
"email": '[email protected]'
}
}
result = sdk.payment().create(payment_data)
return result
@bot.message_handler(commands=['pagar'])
def cmd_pagar(message):
payment = create_payment(10)
pix_copia_cola = payment['response']['point_of_interaction']
['transaction_data']['qr_code']
bot.send_message(message.from_user.id, f'{pix_copia_cola}
',
parse_mode='HTML')
if __name__ == "__main__":
bot.infinity_polling()
Envia QRCode
Semelhante ao exemplo anterior, este bot envia uma cobrança para o usuário que
enviar /pagar
. A resposta será a imagem do QRCode com o
PIX Copia e Cola como legenda.
import datetime
import mercadopago
import telebot
import base64
from PIL import Image
from io import BytesIO
sdk = mercadopago.SDK(TOKEN_MERCADOPAGO)
bot = telebot.TeleBot(TOKEN_BOT)
def create_payment(value):
expire = datetime.datetime.now() + datetime.timedelta(days=1)
expire = expire.strftime("%Y-%m-%dT%-H:%M:%S.000-03:00")
payment_data = {
"transaction_amount": int(value),
"payment_method_id": 'pix',
"installments": 1,
"description": 'Descrição',
"date_of_expiration": f"{expire}",
"payer": {
"email": '[email protected]'
}
}
result = sdk.payment().create(payment_data)
return result
@bot.message_handler(commands=['pagar'])
def cmd_pagar(message):
payment = create_payment(10)
pix_copia_cola = payment['response']['point_of_interaction']['transaction_data']['qr_code']
qr_code = payment['response']['point_of_interaction']['transaction_data']['qr_code_base64']
qr_code = base64.b64decode(qr_code)
qr_code_img = Image.open(BytesIO(qr_code))
qrcode_output = qr_code_img.convert('RGB')
bot.send_photo(message.from_user.id, qrcode_output,
f'{pix_copia_cola}
', parse_mode='HTML')
if __name__ == "__main__":
bot.infinity_polling()