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

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

回答

收藏

Telegram 小程序 | GoLang init-data-golang

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

该软件包提供用于处理 Telegram 迷你应用程序初始化数据的实用程序。 要了解 有关初始化数据及其用法的更多信息,请参阅 文档.
8 w3 k7 U6 y" s8 d
" {, z9 L: [2 {) ?# c安装
  1. go get github.com/telegram-mini-apps/init-data-golang
复制代码
验证

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

  1. package main8 g+ Z* l# ~. `, M

  2. 0 K' w1 @: E- D: C
  3. import (% q+ h* K7 P1 I6 T, @( b
  4.         "fmt"
    6 v5 j( W9 M1 _+ K1 c
  5.         "github.com/Telegram-Mini-Apps/init-data-golang"
    + Z* X. h; {' ]# W7 g  m
  6.         "time"9 d7 _, E4 Z  Y; o8 J0 B
  7. )
    8 L1 R& o7 z' H# W* O

  8. 8 ]3 q% |6 h& N0 `. Y% d
  9. func main() {% A( T( Q2 E* ~% b2 ?; K
  10.         // Init data in raw format.
    5 M7 |. u* u" V1 k1 T: r
  11.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
    % j, W& [. j4 k- ~: b

  12. * N6 v$ T: q" Y# J0 V( b6 e0 H
  13.         // Telegram Bot secret key.
    % d5 T7 u, i7 [( D7 q* E
  14.         token := "627618978:amnnncjocxKJf"& h# W. D. X" m
  15.   S9 U  {4 p7 s% W( W9 K7 ]
  16.         // Define how long since init data generation date init data is valid.4 L7 p9 d* L0 N( }$ G7 q3 P2 ^0 y, t
  17.         expIn := 24 * time.Hour
    0 U- }9 z) z4 _9 ^) y
  18.   B6 c% R% E+ V; ^) h1 {  \
  19.         // Will return error in case, init data is invalid. To see,4 L1 E( o# _& M8 y5 A
  20.         // which error could be returned, see errors.go file.
    # C( o, \; V& P" D7 e
  21.         fmt.Println(initdata.Validate(initData, token, expIn))0 D1 X# B3 f% N0 a
  22. }
复制代码
解析

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

  1. package main
    # @# Y5 L. Q% _+ m

  2. # }/ P/ J! N$ U
  3. import (0 g7 Y2 L% ?/ G" s5 U
  4.     "fmt"
    6 {& h  ]! k- x- w
  5.     "github.com/Telegram-Mini-Apps/init-data-golang"2 Y. d& [5 ^* K6 J
  6. )
    ( J3 Z  |. k& I+ V% V
  7. & i& B1 J( o  H! V% h
  8. func main() {) p2 T% H% |9 o6 w: {  D+ @* y
  9.         // Init data in raw format.
    $ e0 v, z/ j8 a
  10.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
    ! g2 c- v  J0 X
  11.        
    % @) O0 A- u# G6 A' q. C
  12.         // Will return 2 values.1 [- K& `, Y. _( c8 I0 k( M# {  j* _
  13.         // 1. Pointer to InitData in case, passed data has correct format.1 G# f% w" v& x: ~
  14.         // 2. Error in case, something is wrong.
    & R" j1 y# M. `  |8 k
  15.         fmt.Println(initdata.Parse(initData))
    ' {* f0 _+ j" i2 C8 B
  16. }
复制代码
签名

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

  1. package main/ c6 t8 v; F7 F6 m" K

  2. 2 K$ D5 o1 p1 z  q
  3. import (
    - d( B  N; ~( s' K5 c1 Q0 b3 o) [7 {5 g( d
  4.         "fmt"
    ! C$ Q% ?5 V' W% v
  5.         "github.com/Telegram-Mini-Apps/init-data-golang"
    3 e7 ^- R# `0 h+ t' R9 D5 \5 q
  6.         "time"6 r1 r$ H6 {  A+ v& X! r
  7. )! r% ~' A) R" d$ b5 x

  8. % f$ Z$ |$ W- V. A) I: E
  9. func main() {
    " V. t0 M, J% P9 k1 h0 b" M9 B
  10.         // Init data in raw format.2 R3 ~0 y5 h: j& A  G$ k+ x
  11.         initData := "query_id=AAHdF6IQAAAAAN0XohDhrOrc&..."
    ) Z$ ]# l) r0 Z1 p* {! k% M
  12. 6 S3 G$ }) w- K
  13.         // Telegram Bot secret key.$ b; v) e! ~% Z& ~' }/ r
  14.         token := "627618978:amnnncjocxKJf"4 {  H7 Y' @. g' a" a* g
  15. + F* A. I# N2 P
  16.         // Signing timestamp.7 ]( ], E# c7 m7 E# T
  17.         authDate := time.Now()
    " d6 ^% L5 }0 O

  18.   h1 i' b$ Q3 C/ ?! k
  19.         // The first value is parameters sign result ("hash" init data property).
    0 ?" `" R& |7 w' _5 K
  20.         // The second one is error which could occur while parsing query string as/ z0 C# R" X; T7 C
  21.         // query parameters.
    7 }1 s+ [; [: h- N7 ?
  22.         fmt.Println(initdata.SignQueryString(initData, token, authDate))
    " `1 q, T* b( W( v9 a* v1 i
  23.         // or4 M% r. A7 Z* h! `
  24.         fmt.Println(initdata.Sign(map[string]string{
    % @9 B/ U4 \/ I8 B. C0 \$ Y+ J4 j
  25.                 "query_id": "AAHdF6IQAAAAAN0XohDhrOrc",/ P/ s6 I8 J; P: l( \& k
  26.                 // ...
    9 O3 v6 k( C1 X2 F9 m! I) P' u: E
  27.         }, token, authDate))
    * ]3 y) A8 v, t
  28. }
复制代码
GoDoc

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


, f: v, p/ m4 [
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则