南锋

南奔万里空,脱死锋镝余

telegram支付

今天开始接入telegram支付,参考教程这个是telegram的官方说明,详细介绍了机器人支付API。

新建机器人

因为支付是一个单独的系统,所以在做支付的时候单独创建了一个bot,没有用之前的bot了,特意这样将其分开。创建bot的方法和之前不变,这里不过多介绍。

获取支付token令牌

机器人创建好后,我们需要获取支付token令牌。步骤如下:
1、在BotFather对话中选择你用来支付的机器人
2、然后选择Payments
然后选择Payments
3、选择你的支付提供商,我这里选择的是第二个Stripe,你也可以选择其他的,后面的步骤都是在这个选项下进行的。
选择你的支付提供商
4、选择connect Stripe Test连接测试
connect Stripe Test
5、选择后会跳转到Stripe Test Bot支付提供商的测试机器人,点击Authorize按钮
测试机器人
6、点击后会生成一个链接打开,就能绑定你的bot机器人了。
绑定
7、再回到第3步,你就会看到你的测试token了,-Stripe Test:后面的一串,因为我生成了3次,所以这里有3个。如下图所示:
测试token

代码逻辑实现

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { Bot, InlineKeyboard} from "https://deno.land/x/grammy@v1.25.0/mod.ts";
const botToken = ""; // 你机器人的token
// 创建bot实例
const bot = new Bot(botToken);

// 使用测试提供商Token(例如Stripe的测试密钥)
const providerToken = ""; // 提示提供商的token,就是上面第7步看到的

bot.command("start", async (ctx) => {
try {
const title = "测试产品";
const description = "这是一个测试产品";
const payload = "test_payload";
const startParameter = "test_start";
const currency = "USD";
const prices = [
{ label: "测试产品", amount: 100, currency: currency }
];
const photoUrl = "https://api.telegram.org/file/botYOUR_BOT_TOKEN/photos/file_0.jpg";

const payloadData = {
chat_id: ctx.chat.id,
title: title,
description: description,
payload: payload,
provider_token: providerToken,
start_parameter: startParameter,
currency: currency,
prices: prices,
photo_url: photoUrl,
need_shipping_address: false, // 如果不需要配送地址,请设置为 false
is_flexible: false, // 如果价格不可灵活调整,请设置为 false
send_phone_number_to_provider: true, // 将用户的手机号发送给提供商,可选
send_email_to_provider: true // 将用户的邮箱发送给提供商,可选
};

const response = await fetch(`https://api.telegram.org/bot${botToken}/sendInvoice`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payloadData)
});

const data = await response.json();
if (!data.ok) {
throw new Error(`${data.error_code}: ${data.description}`);
}

console.log("发票发送成功:", data);
} catch (error) {
console.error("发送发票时出错:", error.message);
await ctx.reply("创建发票失败,请重试。");
}
});

bot.on("pre_checkout_query", async (ctx) => {
await ctx.answerPreCheckoutQuery(true);
});

bot.on("message", async (ctx) => {
if (ctx.message.successful_payment) {
console.log("支付成功!", ctx.message.successful_payment);
await ctx.reply("支付成功!感谢您的购买。");
}
});

bot.start();

将上面代码保存为ts文件,然后执行代码:

1
deno run --allow-net ts脚本.ts

确保代码正确执行后,回到你创建的支付机器人对话界面,发送/start,将出现如下回复
机器人界面
我这里一片黑色是因为图片没有加载出来,图片下载下来就好了。
点击下面的pay按钮就跳转到支付啦~

+