Paypal API Rest 和 Python 电报机器人

问题描述 投票:0回答:1

我的 Telegram 机器人的 Python 脚本有问题,我在 Paypal 上配置了一个 REST API,当用户单击 Telegram 上的付款按钮时,用户应该被重定向到付款页面,除了我的脚本创建数据库中的令牌提供访问权限,但不会重定向用户进行付款。

在 Paypal 上,我在任何地方都找不到

return_url
cancel_url
的链接。

这是我的功能(我不会向您发送所有代码):

async def start(update: Update, context: CallbackContext) -> None:
    user_id = update.effective_user.id
    if check_payment(user_id):
        # L'utilisateur a déjà payé, donc on peut activer le bot
        await context.bot.send_message(chat_id=update.effective_chat.id, text='Bienvenue, voici la liste des commandes disponibles:\n\n /start - Lancer le bot et liste toutes les commandes du bot\n/setdate - Modification de la prochaine commande fournisseur\n/countdown - Afficher un compte à rebours jusqu’à la prochaine commande fournisseur\n/list - Affiche toute la liste des commandes du bot')
    else:
        # L'utilisateur n'a pas encore payé, donc on affiche le bouton de paiement
        await start_paiement(update, context)



paypalrestsdk.configure({
  "mode": "live",  # sandbox ou live
  "client_id": "-",
  "client_secret": "-" })



cnx = mysql.connector.connect(user='-', password='-',
                              host='localhost',
                              database='-')



def generate_token():
    return binascii.hexlify(os.urandom(20)).decode()



def check_payment(user_id):
    cursor = cnx.cursor()
    query = ("SELECT token FROM tokens WHERE user_id = %s")
    cursor.execute(query, (user_id,))
    result = cursor.fetchone()
    return result is not None


async def start_paiement(update: Update, context: CallbackContext) -> None:
    user_id = update.effective_user.id
    if check_payment(user_id):
        # L'utilisateur a déjà payé, donc on démarre le bot normalement
        await context.bot.send_message(chat_id=update.effective_chat.id, text="Bienvenue !")
    else:
        # L'utilisateur n'a pas encore payé, donc on affiche le bouton de paiement
        keyboard = [[InlineKeyboardButton("Payer", callback_data='pay')]]
        reply_markup = InlineKeyboardMarkup(keyboard)
        welcome_message = "Bienvenue, \n\n Veuillez effectuer le paiement de 100 euros \n pour un accès à vie à ce bot. \n\n Si vous souhaitez d'abord tester nos différents bots avant de procéder à votre achat, vous pouvez rejoindre notre groupe <a href='-'>exemple</a>"
        await context.bot.send_message(chat_id=update.effective_chat.id, text=welcome_message, reply_markup=reply_markup, parse_mode='HTML', disable_web_page_preview=True)




async def pay(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    await query.answer()    #  gérer les callbacks du bouton de paiement
    payment = paypalrestsdk.Payment({
        "intent": "sale",
        # Configurez votre retour d'appel et les URL d'annulation ici
        "redirect_urls": {
            "return_url": "-m",
            "cancel_url": "-"},
        "payer": {"payment_method": "paypal"},
        # Configurez votre paiement ici
        "transactions": [{
            "item_list": {
                "items": [{
                    "name": "Accès au Bot",
                    "sku": "item",
                    "price": '100.00',
                    "currency": "EUR",
                    "quantity": 1}]},
            "amount": {
                "total": '100.00',
                "currency": "EUR"},
            "description": "Paiement pour l'accès au Bot"}]})
    if payment.create():
        print('Paiement créé avec succès')
        token = generate_token()
        print(f'Le jeton pour l\'utilisateur est: {token}')
        cursor = cnx.cursor()
        query = ("INSERT INTO tokens "
                 "(user_id, token) "
                 "VALUES (%s, %s)")
        cursor.execute(query, (update.effective_user.id, token))
        cnx.commit()
    else:
        print('Échec de la création du paiement PayPal')
        print(payment.error)

你能帮我解决问题或找到解决方案吗?

python paypal bots telegram
1个回答
0
投票

如果您将付款人重定向到 PayPal 以批准付款,则 return_url 和 cancel_url 是您自己的 URL,它们随后将返回该 URL。在 return_url 的情况下,您需要显示一个确认页面,当交易确认时,捕获/执行付款。

我不确定您的代码中的“paypalrestsdk”是什么,但 PayPal 的所有 REST SDK 均已弃用,不应用于新的集成。直接与 REST API 集成(使用客户端 id 和密钥获取访问令牌,然后以 JSON 格式进行 HTTPS 请求/响应)

© www.soinside.com 2019 - 2024. All rights reserved.