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

使用Telegram Stars(XTR)发发票失败,API提示providerToken不能为空

关于Telegram Stars(XTR)发票创建时providerToken非空校验的问题

问题描述

我基于最新版Java SDK开发Kotlin Telegram机器人,尝试通过Telegram内部货币Stars(XTR)发送发票。根据Telegram官方文档,只需指定currency="XTR"且providerToken=""即可创建Stars发票,但操作后Telegram API抛出TelegramApiValidationException,提示providerToken参数不能为空。不想配置外部支付提供商获取令牌,请问:

  1. 是否有人遇到过该错误?
  2. 如何解决此问题?

相关代码:

fun invoice(
        chatId: String,
        text: String,
        starsAmount: Int,
        isFlexible: Boolean = true
    ) = SendInvoice.builder()
        .chatId(chatId)
        .title(text)
        .description("Пожертвование")
        .prices(listOf(LabeledPrice.builder().label("Пожертвование").amount(starsAmount).build()))
        .currency("XTR")
        .providerToken("")
        .payload("test")
        .startParameter("")
        .build()
}

问题解答

1. 是否有人遇到过该错误?

是的,不少使用Java/Telegram Bots SDK开发Stars发票的开发者都碰到过这个问题。核心原因是SDK内部的校验逻辑和Telegram官方API规则不匹配:官方API允许providerToken传空字符串,但SDK的校验代码会强制要求该参数非空,从而触发异常。

2. 如何解决此问题?

直接跳过providerToken参数的设置即可。SDK在检测到使用XTR作为货币时,会自动适配Stars发票的逻辑,无需手动传入空值。

修正后的代码如下:

fun invoice(
        chatId: String,
        text: String,
        starsAmount: Int,
        isFlexible: Boolean = true
    ) = SendInvoice.builder()
        .chatId(chatId)
        .title(text)
        .description("Пожертвование")
        .prices(listOf(LabeledPrice.builder().label("Пожертвование").amount(starsAmount).build()))
        .currency("XTR")
        .payload("test")
        .startParameter("")
        .build()
}

额外注意事项:

  • 确保你的Java SDK是v6.7.0及以上版本,旧版本未适配Stars发票的特殊逻辑;
  • starsAmount的单位是微Stars,比如要收取1 Stars,需要传入1000000,直接传整数1实际仅会收取0.000001 Stars,这点要严格匹配Telegram官方的金额规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:53:11