You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Discord bot时如何对接QIWI API实现收款功能

实现Discord QIWI收款的具体操作步骤

前置准备

  • 获取QIWI API Token:登录QIWI官方后台开通API权限,获取对应令牌,确认开启收款相关接口权限
  • 获取Discord Bot Token:在Discord开发者平台创建Bot应用,开启消息读取、发送、身份组操作等必要权限,将Bot邀请到目标服务器

安装依赖库

执行以下命令安装需要的第三方库:

pip install discord.py pyqiwi

核心关联逻辑

两个库不需要特殊的绑定操作,各自独立初始化后,在Discord命令的回调逻辑中直接调用QIWI接口即可,完整的业务流程如下:

  1. 用户在Discord触发付款指令,提交需要支付的金额
  2. 后端调用QIWI API生成带唯一标识的收款账单,返回付款链接给用户
  3. 后台定时轮询对应账单的支付状态
  4. 检测到支付成功后,执行对应Discord侧的操作(给用户发通知、分配身份组、解锁权限等)

简化示例代码

import discord
from discord import app_commands
from pyqiwi import Wallet
import asyncio

# 初始化QIWI客户端,替换为自己的QIWI绑定手机号和API Token
QIWI_PHONE = "+7XXXXXXXXXX"
QIWI_TOKEN = "你的QIWI_API_TOKEN"
qiwi_wallet = Wallet(QIWI_TOKEN, phone=QIWI_PHONE)

# 初始化Discord Bot
intents = discord.Intents.default()
intents.message_content = True
bot = discord.Client(intents=intents)
tree = app_commands.CommandTree(bot)

# 付款斜杠命令
@tree.command(name="pay", description="生成QIWI付款链接")
async def pay(interaction: discord.Interaction, amount: float):
    # 生成唯一账单ID,避免重复
    bill_id = f"{interaction.user.id}_{int(asyncio.get_event_loop().time())}"
    # 调用QIWI接口创建账单
    bill = qiwi_wallet.create_bill(
        bill_id=bill_id,
        amount=amount,
        comment=f"Discord用户{interaction.user.name}付款"
    )
    # 私发付款链接给用户,避免公开泄露
    await interaction.response.send_message(f"付款链接已生成,请15分钟内完成支付:{bill.pay_url}", ephemeral=True)
    
    # 轮询账单状态,30秒查询一次,最多查询30次(总超时15分钟)
    for _ in range(30):
        await asyncio.sleep(30)
        current_bill = qiwi_wallet.get_bill(bill_id)
        if current_bill.status == "PAID":
            # 支付成功后执行后续操作,示例为发送通知、分配身份组
            await interaction.followup.send(f"付款{amount}元已到账,对应权益已发放", ephemeral=True)
            # 如需分配身份组,替换下面的ID为你的服务器身份组ID即可
            # pay_role = interaction.guild.get_role(你的身份组ID)
            # await interaction.user.add_roles(pay_role)
            return
        elif current_bill.status in ["REJECTED", "EXPIRED"]:
            await interaction.followup.send("付款已被拒绝或超时,请重新发起申请", ephemeral=True)
            return
    # 超时未支付自动取消账单
    qiwi_wallet.reject_bill(bill_id)
    await interaction.followup.send("付款超时已自动取消,请重新操作", ephemeral=True)

@bot.event
async def on_ready():
    await tree.sync()
    print(f"Bot已启动,登录账号为:{bot.user}")

# 替换为你的Discord Bot Token
bot.run("你的DISCORD_BOT_TOKEN")

注意事项

  • 所有密钥不要硬编码到代码中,建议用环境变量或独立配置文件存储,避免泄露导致资产损失
  • 账单轮询间隔不要低于10秒,避免触发QIWI API的频率限制
  • 生产环境建议增加支付记录本地存储、幂等校验逻辑,避免重复发放权益
  • 可以根据需求增加支付成功后的公共频道通知、交易记录导出等功能

内容的提问来源于stack exchange,提问作者OSTEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:27:06