You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram小程序数据哈希校验错误排查:格式与代码问题求助

Telegram Web App 哈希校验失败排查(Go语言)

你的哈希校验失败主要有几个核心问题,逐一排查:

  • 函数名字符错误
    你的函数名СheckTelegramAuth首字母是西里尔字母С(并非英文的C),这会导致代码调用时出现函数找不到的问题,虽然可能不是哈希计算错误的直接原因,但必须修正。

  • User JSON格式不符合Telegram规范
    Telegram要求生成校验字符串时,user字段的JSON必须是紧凑无空格格式(无任何空格、换行或缩进)。你当前提供的校验字符串中,user的JSON存在逗号后的空格(例如"id":377742748,"first_name"),这会直接导致哈希计算结果不一致。

    正确的user JSON格式应该是:

    {"id":377742748,"first_name":"Марк","last_name":"Аникин","username":"corray9","language_code":"en","allows_write_to_pm":true}
    

    注意:逗号后无空格,整个JSON为紧凑结构。

  • initData处理的潜在问题
    使用url.ParseQuery解码initData是正确的,但要确保解码后得到的user值和Telegram前端传递的原始紧凑JSON完全一致,不要对其进行任何格式化操作(比如用json.MarshalIndent处理)。


修正后的代码

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"net/url"
	"os"
	"sort"
	"strings"
)

// 修正函数名为英文首字母C
func CheckTelegramAuth(initData string) bool {
	data, err := url.ParseQuery(initData)
	if err != nil {
		fmt.Println("Error parsing initData:", err)
		return false
	}

	var keys []string
	for k := range data {
		keys = append(keys, k)
	}
	sort.Strings(keys)

	var dataCheckStrings []string
	for _, k := range keys {
		if k != "hash" {
			// 直接使用解码后的值,不修改JSON格式
			dataCheckStrings = append(dataCheckStrings, fmt.Sprintf("%s=%s", k, data.Get(k)))
		}
	}
	dataCheckString := strings.Join(dataCheckStrings, "\n")

	fmt.Println(dataCheckString)

	// 生成secretKey的逻辑符合Telegram规范
	h := hmac.New(sha256.New, []byte(os.Getenv("BOT_TOKEN")))
	h.Write([]byte("WebAppData"))
	secretKey := h.Sum(nil)

	h = hmac.New(sha256.New, secretKey)
	h.Write([]byte(dataCheckString))
	calculatedHash := hex.EncodeToString(h.Sum(nil))

	return calculatedHash == data.Get("hash")
}

额外验证步骤

  1. 检查前端传递的initData中的user字段,确认是紧凑无空格的JSON(可在前端打印window.Telegram.WebApp.initData查看)。
  2. 确保BOT_TOKEN环境变量配置正确,无多余空格或换行。
  3. 打印生成的dataCheckString,对比Telegram官方示例格式,确认键值对排序正确、格式为key=value且无额外空格。

内容的提问来源于stack exchange,提问作者Mark Anikin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:23:14