该软件包提供用于处理 Telegram 迷你应用程序初始化数据的实用程序。 要了解 有关初始化数据及其用法的更多信息,请参阅 文档.
* Q8 \1 _$ V. Y/ h! j, |& P4 y( R& N" B& n7 X$ F( p
安装- go get github.com/telegram-mini-apps/init-data-golang
复制代码 验证如果过期时间设置为 0,函数将跳过过期时间检查。 不过,建议指定一个非零值,因为这一检查对于防止 使用被盗的旧初始化数据非常重要。 - package main4 ]( D u. r6 l l y. m- E
- $ m" z( ~3 u0 b
- import (! t+ Z. O% ] P; q0 q) J/ u
- "fmt" y: I0 M' J) |2 A
- "github.com/Telegram-Mini-Apps/init-data-golang"
6 Q G0 z3 b5 n& ^- }, a - "time"
% ~/ a) N( e! Y- B8 f) ^ - )( K! k/ K* q! H5 m, b
- 3 \/ k$ l6 ^ ^! q' ~' @
- func main() {
- f, M7 w( ]+ W0 w% B9 n - // Init data in raw format.
) }) v5 y5 N3 V" ~, B& k2 w - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
6 |5 q/ a1 U/ t - ! ]: S8 b. f8 H) ~) I
- // Telegram Bot secret key.$ M0 H# H* y; n0 ~% @" {- K
- token := "627618978:amnnncjocxKJf"6 t: i) z1 \3 r4 `; ?' G4 k
( a/ l, x& N) f6 o" K5 t }- // Define how long since init data generation date init data is valid.
0 i6 A) o+ h* w j0 v% \ - expIn := 24 * time.Hour5 J3 q0 M& x: L4 i1 \" J0 _; A. Y
5 i. a) q7 ?. J' d- // Will return error in case, init data is invalid. To see,
" }) G8 D9 A0 r$ B7 I0 ]/ ?- A - // which error could be returned, see errors.go file.8 m5 Y( L/ e1 s" W
- fmt.Println(initdata.Validate(initData, token, expIn))5 j+ F' j5 f9 G) x
- }
复制代码 解析需要注意的是,Parse 函数不会执行与 Validate 函数相同的检查。 因此,该函数只对输入数据进行解析,而不对 哈希值或过期时间进行验证。 - package main: F% K- U$ k" |" m& @& H; D
& N$ B! ?( N0 u- import (
; L) W7 J1 P8 `1 y- A* R( Q7 | - "fmt"
" e# Q- ~8 \! G- P! ~ k3 o - "github.com/Telegram-Mini-Apps/init-data-golang"
* g! Y, d0 N0 m n' Q - )
% Z: L' Z Z9 X# C. H
Z: ]- |0 _) y- func main() {9 z/ p4 ~, }2 I+ N; B
- // Init data in raw format.
, C. t, N2 c0 {4 D( _' B - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."& v* S. D/ h" @: R! p
-
" O! z z, R7 n. E9 Z3 ~ - // Will return 2 values.
- @2 w, i6 K2 M* f0 F1 z X- z$ n( z - // 1. Pointer to InitData in case, passed data has correct format.
* X% T' J Q$ Z7 U9 a" E - // 2. Error in case, something is wrong.
1 i; l/ \' K$ b. N* F* x( T - fmt.Println(initdata.Parse(initData))% W' d1 y# i( F3 ^
- }
复制代码 签名签署数据的函数会删除hash和auth_date等参数,因为假定 ,hash将由函数返回,auth_date将由函数 本身设置。 - package main
5 O; k: h3 @/ ~5 _8 `! ?" i% |( U - + z/ v1 t6 ?# H% L
- import ( R( e( z! o" b7 K
- "fmt"
" h$ ?" ?3 t3 O$ ? - "github.com/Telegram-Mini-Apps/init-data-golang"6 d0 Z- X. R" g3 z! Z
- "time"2 D8 m( L ^6 _+ r |% H
- )
# H8 x; R. O. m
# d1 {6 o2 O- E- func main() {* k+ b1 N5 b, V9 g3 Z3 {
- // Init data in raw format.
, V2 w7 g0 v* y+ `5 ?; q# Q - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."9 u0 Y. l% V- X: C+ H
- % L9 [9 Z# K) g2 Z
- // Telegram Bot secret key.3 k. H/ Z9 H% I& D V
- token := "627618978:amnnncjocxKJf"1 L9 Q$ Y7 k& Q' z7 i. @+ v
" M$ c( ~. q4 b& ^7 C& \- // Signing timestamp.
. j1 h3 n; a% Z3 e0 D& ? - authDate := time.Now()
7 r) O8 d. j; o
, V+ N, d4 z* D( x2 c' s$ w/ C- // The first value is parameters sign result ("hash" init data property).7 S: V; ]% ]( l2 f/ B
- // The second one is error which could occur while parsing query string as
" ?3 T. p- b) Y, R$ X8 y0 l% H1 o - // query parameters.& P, s) P9 N3 v% Y ?" y
- fmt.Println(initdata.SignQueryString(initData, token, authDate))+ {) ~/ R, Z2 \7 J @6 N! C
- // or1 @4 _- N* z& j, z J
- fmt.Println(initdata.Sign(map[string]string{1 b# J! x" k! \% n0 t
- "query_id": "AAHdF6IQAAAAAN0XohDhrOrc",
2 w4 y7 ?: q9 m" H - // ...
" }: \. x5 y% m$ P& v. P - }, token, authDate))
0 B' ^$ k% F( M9 j2 p( H) H+ ~ - }
复制代码 GoDoc要查看 GoDoc 文档,请访问 此链接。
( H( h3 M% G6 G2 |7 b& G7 ] |