# Telegram Bot API Paid Broadcasts 使用教程

## 1. Paid Broadcasts 用途介绍

Paid Broadcasts(付费广播)是 Telegram Bot API 提供的一项功能,允许机器人通过 `sendPaidMedia` 方法发送付费媒体内容。当用户查看这些内容时,机器人可以获得 Telegram Stars 作为报酬。

**主要用途:**
- 实现内容付费功能,让用户通过 Telegram Stars 解锁或查看特定媒体内容
- 作为机器人开发者的一种 monetization( monetization)方式
- 适用于需要向用户提供优质付费内容的场景,如教育材料、独家资讯、创意作品等

**核心特点:**
- 支持多种媒体类型:照片、视频、音频、文档等
- 与现有的消息发送机制无缝集成
- 提供完整的交易状态跟踪
- 支持设置不同的价格点,以 Telegram Stars 为计价单位

## 2. 原生 PHP 调用实例

### 2.1 准备工作

确保你的 PHP 环境满足以下要求:
- PHP 5.6 或更高版本
- 已安装 cURL 扩展
- 已创建 Telegram Bot 并获取 Bot Token

### 2.2 基础的 sendPaidMedia 调用
ScreenShot_2025-12-16_105315_154.jpgScreenShot_2025-12-16_105325_407.jpg
<?php
/**
 * 使用 Telegram Bot API 发送付费媒体
 * @param string $botToken Bot Token
 * @param int $chatId 聊天 ID
 * @param string $mediaType 媒体类型: photo, video, audio, document 等
 * @param string $mediaUrl 媒体文件的 URL
 * @param string $caption 媒体描述文字
 * @param int $starCount 所需的 Telegram Stars 数量
 * @return array 响应结果
 */
function sendPaidMedia($botToken, $chatId, $mediaType, $mediaUrl, $caption, $starCount) {
    $url = "https://api.telegram.org/bot{$botToken}/sendPaidMedia";
    
    $media = [
        'type' => $mediaType,
        'media' => $mediaUrl
    ];
    
    $data = [
        'chat_id' => $chatId,
        'media' => json_encode([$media]),
        'star_count' => $starCount,
        'caption' => $caption
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// 使用示例
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789; // 用户的聊天 ID
$mediaType = "photo";
$mediaUrl = "https://example.com/paid-content.jpg";
$caption = "这是一个付费照片示例,需要 5 颗 Telegram Stars 才能查看。";
$starCount = 5; // 价格:5 Telegram Stars

$result = sendPaidMedia($botToken, $chatId, $mediaType, $mediaUrl, $caption, $starCount);

if ($result['ok']) {
    echo "付费媒体发送成功!";
    echo "消息 ID: " . $result['result']['message_id'];
    echo "媒体组 ID: " . $result['result']['paid_media']['media_group_id'];
} else {
    echo "发送失败:" . $result['description'];
}
?>
```

### 2.3 发送多个付费媒体(媒体组)

```php
<?php
/**
 * 使用 Telegram Bot API 发送付费媒体组
 * @param string $botToken Bot Token
 * @param int $chatId 聊天 ID
 * @param array $mediaList 媒体列表数组
 * @param int $starCount 所需的 Telegram Stars 数量
 * @return array 响应结果
 */
function sendPaidMediaGroup($botToken, $chatId, $mediaList, $starCount) {
    $url = "https://api.telegram.org/bot{$botToken}/sendPaidMedia";
    
    $data = [
        'chat_id' => $chatId,
        'media' => json_encode($mediaList),
        'star_count' => $starCount
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// 使用示例
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789;

// 构建媒体列表
$mediaList = [
    [
        'type' => 'photo',
        'media' => 'https://example.com/paid-photo1.jpg'
    ],
    [
        'type' => 'photo',
        'media' => 'https://example.com/paid-photo2.jpg'
    ],
    [
        'type' => 'video',
        'media' => 'https://example.com/paid-video.mp4',
        'caption' => '这是一个付费媒体组示例,包含两张照片和一个视频。'
    ]
];

$starCount = 10; // 价格:10 Telegram Stars

$result = sendPaidMediaGroup($botToken, $chatId, $mediaList, $starCount);

if ($result['ok']) {
    echo "付费媒体组发送成功!";
    echo "消息 ID: " . $result['result']['message_id'];
    echo "媒体组 ID: " . $result['result']['paid_media']['media_group_id'];
} else {
    echo "发送失败:" . $result['description'];
}
?>
```

### 2.4 完整的 Telegram Bot 付费媒体类

```php
<?php
class TelegramPaidMediaBot {
    private $botToken;
    
    /**
     * 构造函数
     * @param string $botToken Bot Token
     */
    public function __construct($botToken) {
        $this->botToken = $botToken;
    }
    
    /**
     * 发送付费媒体
     * @param int $chatId 聊天 ID
     * @param string $mediaType 媒体类型
     * @param string $mediaUrl 媒体 URL
     * @param string $caption 描述文字
     * @param int $starCount Telegram Stars 数量
     * @param string|null $parseMode 解析模式: MarkdownV2, HTML, Markdown
     * @return array 响应结果
     */
    public function sendPaidMedia($chatId, $mediaType, $mediaUrl, $caption, $starCount, $parseMode = null) {
        $media = [
            'type' => $mediaType,
            'media' => $mediaUrl,
            'caption' => $caption
        ];
        
        return $this->sendPaidMediaRequest($chatId, [$media], $starCount, $parseMode);
    }
    
    /**
     * 发送付费媒体组
     * @param int $chatId 聊天 ID
     * @param array $mediaList 媒体列表
     * @param int $starCount Telegram Stars 数量
     * @param string|null $parseMode 解析模式
     * @return array 响应结果
     */
    public function sendPaidMediaGroup($chatId, $mediaList, $starCount, $parseMode = null) {
        return $this->sendPaidMediaRequest($chatId, $mediaList, $starCount, $parseMode);
    }
    
    /**
     * 发送付费媒体请求
     * @param int $chatId 聊天 ID
     * @param array $mediaList 媒体列表
     * @param int $starCount Telegram Stars 数量
     * @param string|null $parseMode 解析模式
     * @return array 响应结果
     */
    private function sendPaidMediaRequest($chatId, $mediaList, $starCount, $parseMode = null) {
        $url = "https://api.telegram.org/bot{$this->botToken}/sendPaidMedia";
        
        $data = [
            'chat_id' => $chatId,
            'media' => json_encode($mediaList),
            'star_count' => $starCount
        ];
        
        if ($parseMode !== null) {
            $data['parse_mode'] = $parseMode;
        }
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        
        if (curl_errno($ch)) {
            $error = curl_error($ch);
            curl_close($ch);
            return [
                'ok' => false,
                'error_code' => $httpCode,
                'description' => 'cURL 错误: ' . $error
            ];
        }
        
        curl_close($ch);
        return json_decode($response, true);
    }
    
    /**
     * 获取机器人的 Telegram Stars 余额
     * @return array 响应结果
     */
    public function getMyStarBalance() {
        $url = "https://api.telegram.org/bot{$this->botToken}/getMyStarBalance";
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        $response = curl_exec($ch);
        curl_close($ch);
        
        return json_decode($response, true);
    }
}

// 使用示例
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789;

$bot = new TelegramPaidMediaBot($botToken);

// 发送单个付费媒体
$result1 = $bot->sendPaidMedia(
    $chatId,
    'photo',
    'https://example.com/paid-content.jpg',
    '这是一个付费照片示例,使用 MarkdownV2 格式:\*粗体\* _斜体_ [链接](https://example.com)',
    5,
    'MarkdownV2'
);

if ($result1['ok']) {
    echo "付费媒体发送成功!\n";
    echo "消息 ID: " . $result1['result']['message_id'] . "\n";
} else {
    echo "发送失败:" . $result1['description'] . "\n";
}

// 获取机器人的 Star 余额
$balance = $bot->getMyStarBalance();
if ($balance['ok']) {
    echo "机器人当前 Star 余额: " . $balance['result']['star_balance'] . "\n";
}
?>
### 2.5 注意事项

1. **Bot Token 安全**:确保 Bot Token 不被泄露,不要硬编码在前端代码中
2. **媒体文件要求**:确保媒体文件可公开访问,或使用 Telegram 内部文件 ID
3. **价格设置**:根据内容价值合理设置 Telegram Stars 数量
4. **用户体验**:在发送付费媒体前,明确告知用户所需的 Stars 数量和内容价值
5. **响应处理**:总是检查 API 响应的 `ok` 字段,以便正确处理成功和失败情况
6. **交易状态**:通过监听 `message` 事件中的 `paid_media` 字段,可以跟踪用户的查看状态

## 3. 应用场景

- **数字内容销售**:销售照片、视频、音频等数字内容
- **付费教程**:提供付费教育内容,如编程教程、语言学习材料等
- **独家资讯**:发布付费的独家新闻、分析报告等
- **创意作品**:艺术家可以销售自己的创意作品
- **会员内容**:为订阅用户提供专属付费内容

## 4. 运行指南

1. 将以上代码保存为 `.php` 文件
2. 替换 `YOUR_BOT_TOKEN` 为你的实际 Bot Token
3. 替换 `$chatId` 为实际的聊天 ID
4. 确保媒体文件 URL 可公开访问
5. 在命令行或浏览器中运行 PHP 文件

```bash
php telegram-paid-media.php
```

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部