English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

Telegram 小程序 | GoLang init-data-golang

开源社区 开源社区 8278 人阅读 | 0 人回复 | 2025-02-28

该软件包提供用于处理 Telegram 迷你应用程序初始化数据的实用程序。 要了解 有关初始化数据及其用法的更多信息,请参阅 文档.
* Q8 \1 _$ V. Y/ h! j, |& P4 y( R& N" B& n7 X$ F( p
安装
  1. go get github.com/telegram-mini-apps/init-data-golang
复制代码
验证

如果过期时间设置为 0,函数将跳过过期时间检查。 不过,建议指定一个非零值,因为这一检查对于防止 使用被盗的旧初始化数据非常重要。

  1. package main4 ]( D  u. r6 l  l  y. m- E
  2. $ m" z( ~3 u0 b
  3. import (! t+ Z. O% ]  P; q0 q) J/ u
  4.         "fmt"  y: I0 M' J) |2 A
  5.         "github.com/Telegram-Mini-Apps/init-data-golang"
    6 Q  G0 z3 b5 n& ^- }, a
  6.         "time"
    % ~/ a) N( e! Y- B8 f) ^
  7. )( K! k/ K* q! H5 m, b
  8. 3 \/ k$ l6 ^  ^! q' ~' @
  9. func main() {
    - f, M7 w( ]+ W0 w% B9 n
  10.         // Init data in raw format.
    ) }) v5 y5 N3 V" ~, B& k2 w
  11.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
    6 |5 q/ a1 U/ t
  12. ! ]: S8 b. f8 H) ~) I
  13.         // Telegram Bot secret key.$ M0 H# H* y; n0 ~% @" {- K
  14.         token := "627618978:amnnncjocxKJf"6 t: i) z1 \3 r4 `; ?' G4 k

  15. ( a/ l, x& N) f6 o" K5 t  }
  16.         // Define how long since init data generation date init data is valid.
    0 i6 A) o+ h* w  j0 v% \
  17.         expIn := 24 * time.Hour5 J3 q0 M& x: L4 i1 \" J0 _; A. Y

  18. 5 i. a) q7 ?. J' d
  19.         // Will return error in case, init data is invalid. To see,
    " }) G8 D9 A0 r$ B7 I0 ]/ ?- A
  20.         // which error could be returned, see errors.go file.8 m5 Y( L/ e1 s" W
  21.         fmt.Println(initdata.Validate(initData, token, expIn))5 j+ F' j5 f9 G) x
  22. }
复制代码
解析

需要注意的是,Parse 函数不会执行与 Validate 函数相同的检查。 因此,该函数只对输入数据进行解析,而不对 哈希值或过期时间进行验证。

  1. package main: F% K- U$ k" |" m& @& H; D

  2. & N$ B! ?( N0 u
  3. import (
    ; L) W7 J1 P8 `1 y- A* R( Q7 |
  4.     "fmt"
    " e# Q- ~8 \! G- P! ~  k3 o
  5.     "github.com/Telegram-Mini-Apps/init-data-golang"
    * g! Y, d0 N0 m  n' Q
  6. )
    % Z: L' Z  Z9 X# C. H

  7.   Z: ]- |0 _) y
  8. func main() {9 z/ p4 ~, }2 I+ N; B
  9.         // Init data in raw format.
    , C. t, N2 c0 {4 D( _' B
  10.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."& v* S. D/ h" @: R! p
  11.        
    " O! z  z, R7 n. E9 Z3 ~
  12.         // Will return 2 values.
    - @2 w, i6 K2 M* f0 F1 z  X- z$ n( z
  13.         // 1. Pointer to InitData in case, passed data has correct format.
    * X% T' J  Q$ Z7 U9 a" E
  14.         // 2. Error in case, something is wrong.
    1 i; l/ \' K$ b. N* F* x( T
  15.         fmt.Println(initdata.Parse(initData))% W' d1 y# i( F3 ^
  16. }
复制代码
签名

签署数据的函数会删除hash和auth_date等参数,因为假定 ,hash将由函数返回,auth_date将由函数 本身设置。

  1. package main
    5 O; k: h3 @/ ~5 _8 `! ?" i% |( U
  2. + z/ v1 t6 ?# H% L
  3. import (  R( e( z! o" b7 K
  4.         "fmt"
    " h$ ?" ?3 t3 O$ ?
  5.         "github.com/Telegram-Mini-Apps/init-data-golang"6 d0 Z- X. R" g3 z! Z
  6.         "time"2 D8 m( L  ^6 _+ r  |% H
  7. )
    # H8 x; R. O. m

  8. # d1 {6 o2 O- E
  9. func main() {* k+ b1 N5 b, V9 g3 Z3 {
  10.         // Init data in raw format.
    , V2 w7 g0 v* y+ `5 ?; q# Q
  11.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."9 u0 Y. l% V- X: C+ H
  12. % L9 [9 Z# K) g2 Z
  13.         // Telegram Bot secret key.3 k. H/ Z9 H% I& D  V
  14.         token := "627618978:amnnncjocxKJf"1 L9 Q$ Y7 k& Q' z7 i. @+ v

  15. " M$ c( ~. q4 b& ^7 C& \
  16.         // Signing timestamp.
    . j1 h3 n; a% Z3 e0 D& ?
  17.         authDate := time.Now()
    7 r) O8 d. j; o

  18. , V+ N, d4 z* D( x2 c' s$ w/ C
  19.         // The first value is parameters sign result ("hash" init data property).7 S: V; ]% ]( l2 f/ B
  20.         // The second one is error which could occur while parsing query string as
    " ?3 T. p- b) Y, R$ X8 y0 l% H1 o
  21.         // query parameters.& P, s) P9 N3 v% Y  ?" y
  22.         fmt.Println(initdata.SignQueryString(initData, token, authDate))+ {) ~/ R, Z2 \7 J  @6 N! C
  23.         // or1 @4 _- N* z& j, z  J
  24.         fmt.Println(initdata.Sign(map[string]string{1 b# J! x" k! \% n0 t
  25.                 "query_id": "AAHdF6IQAAAAAN0XohDhrOrc",
    2 w4 y7 ?: q9 m" H
  26.                 // ...
    " }: \. x5 y% m$ P& v. P
  27.         }, token, authDate))
    0 B' ^$ k% F( M9 j2 p( H) H+ ~
  28. }
复制代码
GoDoc

要查看 GoDoc 文档,请访问 此链接


( H( h3 M% G6 G2 |7 b& G7 ]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则