该软件包提供用于处理 Telegram 迷你应用程序初始化数据的实用程序。 要了解 有关初始化数据及其用法的更多信息,请参阅 文档.
8 w3 k7 U6 y" s8 d
" {, z9 L: [2 {) ?# c安装- go get github.com/telegram-mini-apps/init-data-golang
复制代码 验证如果过期时间设置为 0,函数将跳过过期时间检查。 不过,建议指定一个非零值,因为这一检查对于防止 使用被盗的旧初始化数据非常重要。 - package main8 g+ Z* l# ~. `, M
0 K' w1 @: E- D: C- import (% q+ h* K7 P1 I6 T, @( b
- "fmt"
6 v5 j( W9 M1 _+ K1 c - "github.com/Telegram-Mini-Apps/init-data-golang"
+ Z* X. h; {' ]# W7 g m - "time"9 d7 _, E4 Z Y; o8 J0 B
- )
8 L1 R& o7 z' H# W* O
8 ]3 q% |6 h& N0 `. Y% d- func main() {% A( T( Q2 E* ~% b2 ?; K
- // Init data in raw format.
5 M7 |. u* u" V1 k1 T: r - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
% j, W& [. j4 k- ~: b
* N6 v$ T: q" Y# J0 V( b6 e0 H- // Telegram Bot secret key.
% d5 T7 u, i7 [( D7 q* E - token := "627618978:amnnncjocxKJf"& h# W. D. X" m
- S9 U {4 p7 s% W( W9 K7 ]
- // Define how long since init data generation date init data is valid.4 L7 p9 d* L0 N( }$ G7 q3 P2 ^0 y, t
- expIn := 24 * time.Hour
0 U- }9 z) z4 _9 ^) y - B6 c% R% E+ V; ^) h1 { \
- // Will return error in case, init data is invalid. To see,4 L1 E( o# _& M8 y5 A
- // which error could be returned, see errors.go file.
# C( o, \; V& P" D7 e - fmt.Println(initdata.Validate(initData, token, expIn))0 D1 X# B3 f% N0 a
- }
复制代码 解析需要注意的是,Parse 函数不会执行与 Validate 函数相同的检查。 因此,该函数只对输入数据进行解析,而不对 哈希值或过期时间进行验证。 - package main
# @# Y5 L. Q% _+ m
# }/ P/ J! N$ U- import (0 g7 Y2 L% ?/ G" s5 U
- "fmt"
6 {& h ]! k- x- w - "github.com/Telegram-Mini-Apps/init-data-golang"2 Y. d& [5 ^* K6 J
- )
( J3 Z |. k& I+ V% V - & i& B1 J( o H! V% h
- func main() {) p2 T% H% |9 o6 w: { D+ @* y
- // Init data in raw format.
$ e0 v, z/ j8 a - initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
! g2 c- v J0 X -
% @) O0 A- u# G6 A' q. C - // Will return 2 values.1 [- K& `, Y. _( c8 I0 k( M# { j* _
- // 1. Pointer to InitData in case, passed data has correct format.1 G# f% w" v& x: ~
- // 2. Error in case, something is wrong.
& R" j1 y# M. ` |8 k - fmt.Println(initdata.Parse(initData))
' {* f0 _+ j" i2 C8 B - }
复制代码 签名签署数据的函数会删除hash和auth_date等参数,因为假定 ,hash将由函数返回,auth_date将由函数 本身设置。 - package main/ c6 t8 v; F7 F6 m" K
2 K$ D5 o1 p1 z q- import (
- d( B N; ~( s' K5 c1 Q0 b3 o) [7 {5 g( d - "fmt"
! C$ Q% ?5 V' W% v - "github.com/Telegram-Mini-Apps/init-data-golang"
3 e7 ^- R# `0 h+ t' R9 D5 \5 q - "time"6 r1 r$ H6 { A+ v& X! r
- )! r% ~' A) R" d$ b5 x
% f$ Z$ |$ W- V. A) I: E- func main() {
" V. t0 M, J% P9 k1 h0 b" M9 B - // Init data in raw format.2 R3 ~0 y5 h: j& A G$ k+ x
- initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
) Z$ ]# l) r0 Z1 p* {! k% M - 6 S3 G$ }) w- K
- // Telegram Bot secret key.$ b; v) e! ~% Z& ~' }/ r
- token := "627618978:amnnncjocxKJf"4 { H7 Y' @. g' a" a* g
- + F* A. I# N2 P
- // Signing timestamp.7 ]( ], E# c7 m7 E# T
- authDate := time.Now()
" d6 ^% L5 }0 O
h1 i' b$ Q3 C/ ?! k- // The first value is parameters sign result ("hash" init data property).
0 ?" `" R& |7 w' _5 K - // The second one is error which could occur while parsing query string as/ z0 C# R" X; T7 C
- // query parameters.
7 }1 s+ [; [: h- N7 ? - fmt.Println(initdata.SignQueryString(initData, token, authDate))
" `1 q, T* b( W( v9 a* v1 i - // or4 M% r. A7 Z* h! `
- fmt.Println(initdata.Sign(map[string]string{
% @9 B/ U4 \/ I8 B. C0 \$ Y+ J4 j - "query_id": "AAHdF6IQAAAAAN0XohDhrOrc",/ P/ s6 I8 J; P: l( \& k
- // ...
9 O3 v6 k( C1 X2 F9 m! I) P' u: E - }, token, authDate))
* ]3 y) A8 v, t - }
复制代码 GoDoc要查看 GoDoc 文档,请访问 此链接。
, f: v, p/ m4 [ |