当前位置:   article > 正文

TG创建小程序交互APP登录以及机器人信息_tg 小程序开发

tg 小程序开发

1、搜索  BotFather ,输入命令 /newbot   创建机器人。

2、修改机器人信息 /mybots

编辑名称 :  修改机器人名称
编辑关于:    修改关于 hayden yyds,修改以后打开机器人会出现在下图
编辑描述 :  机器人的描述
编辑描述图片 : 机器人的图片
编辑 Botpic :    点击以后发送图片,修改机器人的头像
编辑命令 :  编辑命令以后机器人对话框旁边会出现菜单,点击菜单可以出现我们编辑d

创建小程序:发送 /newapp  命令,选择关联小程序的机器人。  然后按照提示输入标题和描述。

    完成以后会要我们 :现在上传演示 GIF 或发送/empty 以跳过此步骤。
我们跳过以后会让我们输入小程序外部链接的https的url。

完成以后:很好!现在请为您的 Web 应用选择一个简称:3-30 个字符,a-zA-Z0-9_。此简称将用于 t.me/TetrisHayDenBot/myapp 等 URL,并作为您的 Web 应用的唯一标识符。

完成以后返回给我们小程序的访问链接地址

将我们机器人菜单改为自定义按钮。

输入命令: /mybots  ,点击 Menu Button

后续。。。。。。

到此我们完成了TG小程序配置 


使用TG小程序交互我们web平台,进行登录操作

Telegram Web Apps在启动时会提供一个initDatahash参数,用于验证数据的完整性和来源。你可以使用这些参数来确保数据没有被篡改。

当我们获取到了initData以后可以做一个hash验签:

  1. package com.app.web;
  2. import org.apache.commons.codec.binary.Hex;
  3. import org.springframework.boot.SpringApplication;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.commons.codec.digest.DigestUtils;
  6. import org.apache.commons.codec.digest.HmacAlgorithms;
  7. import org.apache.commons.codec.digest.HmacUtils;
  8. import org.springframework.boot.autoconfigure.SpringBootApplication;
  9. import org.springframework.scheduling.annotation.EnableScheduling;
  10. import javax.crypto.Mac;
  11. import javax.crypto.spec.SecretKeySpec;
  12. import java.io.UnsupportedEncodingException;
  13. import java.net.URLDecoder;
  14. import java.nio.charset.StandardCharsets;
  15. import java.util.Arrays;
  16. import java.util.Map;
  17. import java.util.stream.Collectors;
  18. @Slf4j
  19. @EnableScheduling
  20. @SpringBootApplication
  21. public class PeipeiApplication {
  22. public static void main(String[] args) {
  23. // initData和botToken
  24. String initData = "user=%7B%22id%22%3A5000109645%2C%22first_name%22%3A%22John%22%2C%22last_name%22%3A%22Zeng%22%2C%22language_code%22%3A%22zh-hans%22%2C%22allows_write_to_pm%22%3Atrue%7D&chat_instance=-1844952925335620055&chat_type=private&auth_date=1720850073&hash=79b805a0d61c577211e63fa8f2df178c87eff97ce162218fffc84faa2f84e900";
  25. //这个botToken就是我们创建机器人的token,创建的机器人和TG小程序绑定的
  26. String botToken = "5000906011:AAFqS3Ygb9eKYHJ8jJ_ply_3awwC79DrbeY";
  27. // 提取hash并解码其余的键值对
  28. Map<String, String> params = Arrays.stream(initData.split("&"))
  29. .map(param -> param.split("=", 2))
  30. .collect(Collectors.toMap(
  31. arr -> arr[0],
  32. arr -> {
  33. try {
  34. return URLDecoder.decode(arr[1], StandardCharsets.UTF_8.name());
  35. } catch (UnsupportedEncodingException e) {
  36. throw new RuntimeException(e);
  37. }
  38. }
  39. ));
  40. // 提取并移除hash
  41. String hash = params.remove("hash");
  42. // 按键名排序其余的键值对
  43. String dataCheckString = params.entrySet().stream()
  44. .sorted(Map.Entry.comparingByKey())
  45. .map(entry -> entry.getKey() + "=" + entry.getValue())
  46. .collect(Collectors.joining("\n"));
  47. // 生成密钥
  48. byte[] secretKey = hmacSha256("WebAppData", botToken);
  49. // 生成HMAC-SHA256签名
  50. String computedHash = hmacSha256Hex(secretKey, dataCheckString);
  51. // 验证hash
  52. if (computedHash.equals(hash)) {
  53. System.out.println("Data is valid");
  54. } else {
  55. System.out.println("Data is invalid");
  56. }
  57. }
  58. private static byte[] hmacSha256(String key, String data) {
  59. try {
  60. Mac mac = Mac.getInstance("HmacSHA256");
  61. SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
  62. mac.init(secretKeySpec);
  63. return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
  64. } catch (Exception e) {
  65. throw new RuntimeException("Failed to calculate hmac-sha256", e);
  66. }
  67. }
  68. private static String hmacSha256Hex(byte[] key, String data) {
  69. try {
  70. Mac mac = Mac.getInstance("HmacSHA256");
  71. SecretKeySpec secretKeySpec = new SecretKeySpec(key, "HmacSHA256");
  72. mac.init(secretKeySpec);
  73. byte[] hashBytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
  74. return Hex.encodeHexString(hashBytes);
  75. } catch (Exception e) {
  76. throw new RuntimeException("Failed to calculate hmac-sha256 hex", e);
  77. }
  78. }
  79. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/841565
推荐阅读
相关标签
  

闽ICP备14008679号