该软件包提供用于处理 Telegram 迷你应用程序初始化数据的实用程序。 要了解 有关初始化数据及其用法的更多信息,请参阅 文档.2 h4 ?, ~; z8 r5 f
1 M) I L; W% ^, E" y
安装- go get github.com/telegram-mini-apps/init-data-golang
复制代码 验证如果过期时间设置为 0,函数将跳过过期时间检查。 不过,建议指定一个非零值,因为这一检查对于防止 使用被盗的旧初始化数据非常重要。 - package main8 }) C, s3 P% k* o& {' t$ `
, H4 r y4 B9 o! G, J0 T- import (
- R/ B! _8 E: l+ o - "fmt". R. d# }' U" g1 U% A8 x. J
- "github.com/Telegram-Mini-Apps/init-data-golang"
. F! y8 c6 ]3 s6 A8 q5 ]& b# I - "time"
6 \: h" ]% L+ m - )
8 O% a/ y1 f' j6 q( `4 G H Z9 m
# v$ H6 a& N" ^3 q- func main() {
0 @" A1 u8 n9 n. R$ z - // Init data in raw format.8 [/ W, m; ]+ b' ^# n j
- initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
6 P# r, T( w7 ] `: O( S2 } - 3 X" K0 C, q; w% n
- // Telegram Bot secret key.
7 v4 F( {5 y4 X% I9 F" o. i9 I5 r - token := "627618978:amnnncjocxKJf"
. b0 J7 O0 }, L( [- h
% R0 @" A! X$ Y& M- // Define how long since init data generation date init data is valid.
1 a; ]6 e/ o" z; t - expIn := 24 * time.Hour. X/ }- a) v; S7 Y m
l! t. [; b, ?* G) g' ~7 A! U+ W( h8 E- // Will return error in case, init data is invalid. To see,
: B/ X# J2 t: N1 } - // which error could be returned, see errors.go file.' @0 Q. z+ Y3 Q$ n" K- A1 ?2 ?, T
- fmt.Println(initdata.Validate(initData, token, expIn))
1 R. c3 r9 x% {! u - }
复制代码 解析需要注意的是,Parse 函数不会执行与 Validate 函数相同的检查。 因此,该函数只对输入数据进行解析,而不对 哈希值或过期时间进行验证。 - package main
" z( X* `/ i/ y4 ]$ L) \1 X
0 e; Q0 a, N# s6 T- import (
( M: n; T. A- T4 ~: U - "fmt"! t# C$ ~/ s- _: Y
- "github.com/Telegram-Mini-Apps/init-data-golang"1 \- D& K, x# T" k' W V1 c
- )
7 \: j$ ^/ I4 Z$ W% ?2 Q# ?
7 d# P( l8 F# U7 M ?- func main() {( K# q( E" ~ D9 K, F! e4 O S0 l$ r
- // Init data in raw format.
/ W# c3 b1 I/ D( t5 N2 n - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
) o9 c" z" |" S5 b5 w2 b - 0 B$ d/ `, `+ z2 M9 u
- // Will return 2 values.
8 r' S( y; d2 u7 I& q! Z7 D: h" e - // 1. Pointer to InitData in case, passed data has correct format.
; e/ P5 |# R5 T: ~4 c - // 2. Error in case, something is wrong.
2 z0 Q( q2 Q$ I" U3 w - fmt.Println(initdata.Parse(initData))
7 }3 G% w( T2 f( \- _$ Q - }
复制代码 签名签署数据的函数会删除hash和auth_date等参数,因为假定 ,hash将由函数返回,auth_date将由函数 本身设置。 - package main, x l4 I X+ ^& Z
: u. Y5 x1 X0 c- z) l |- import (6 M2 `( ~* e6 }1 G5 z
- "fmt"3 s7 t4 Y: R8 v l% c
- "github.com/Telegram-Mini-Apps/init-data-golang"
' Y E! G3 T3 s% H: C) m3 w' _' w- E - "time"
* w. G% `- v- g+ v7 r p! v9 y - )
: S b* A! ?3 F' l - W* A# F# W: h$ G$ o' E
- func main() {5 X# W. O: _8 ? C7 b/ Y3 X
- // Init data in raw format.
; M% ^7 p+ e- l( ?/ C1 s: M- {& l - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
4 M3 M% R Z0 B5 y' u
+ V/ e: d! E# }9 M0 Y- // Telegram Bot secret key.
# i9 b8 u+ c3 v; f - token := "627618978:amnnncjocxKJf"8 ^4 _+ V6 x) X
) ^9 B' F3 y& J* x- // Signing timestamp.( i# c9 V! C6 l# h
- authDate := time.Now()
+ e# ~' e. J, I$ d, H/ j2 a3 U6 o1 c5 e - # P7 q- u$ `7 _: r3 M
- // The first value is parameters sign result ("hash" init data property).* K4 S U4 z/ q0 e0 C% O. z
- // The second one is error which could occur while parsing query string as4 q) u- p* L8 I2 B% E: @8 x5 q
- // query parameters.: T, ?! P0 G0 U, T: i! c/ a
- fmt.Println(initdata.SignQueryString(initData, token, authDate))
2 P+ I, L4 C4 H3 p% F/ G1 X - // or2 ?7 T( L5 z4 R% I
- fmt.Println(initdata.Sign(map[string]string{
& |7 i9 D1 _1 a% U - "query_id": "AAHdF6IQAAAAAN0XohDhrOrc",
& {- X6 K. x: s# Q, \ - // ...3 L6 k0 F7 l. H& x: u
- }, token, authDate))8 k2 }, P! i) A" s. ?1 a% C
- }
复制代码 GoDoc要查看 GoDoc 文档,请访问 此链接。 - }& [ l% W1 Y' E9 R4 r
|