当前位置: 首页 > news >正文

钉钉机器人签名计算时 URL 编码格式错误导致校验失败怎么办?

直接检查签名生成代码中 timestamp 是否参与了 URL 编码,以及最终 sign 值在拼接 URL 时是否做了 URL 编码,大多数校验失败是因为这两步顺序或对象搞错了。

先说结论:签名计算时 timestamp 不应提前编码,最终 sign 必须编码,顺序错乱必失败

  • 先确认:secret 复制是否有空格或换行
  • 先处理:严格按照“时间戳 + 换行 + 密钥”拼接后再哈希
  • 再验证:用 curl 发送请求看返回 errmsg 是否为 ok

命令速用版

import hashlib, hmac, base64, urllib.parse, time
secret = 'SEC...' 
timestamp = str(round(time.time() * 1000))
string_to_sign = f'{timestamp}\n{secret}'
sign = urllib.parse.quote_plus(base64.b64encode(hmac.new(secret.encode(), string_to_sign.encode(), digestmod=hashlib.sha256).digest()))
webhook = f'https://oapi.dingtalk.com/robot/send?access_token=...&timestamp={timestamp}&sign={sign}'

为什么会这样

钉钉机器人加签机制要求使用 HMAC-SHA256 算法,协议规定字符串拼接完成后才进行哈希,最后对哈希结果进行 URL 编码。如果在哈希前对 timestamp 编码,或者哈希后忘记对 sign 编码,都会导致服务端计算出的签名与你发送的不一致。

分步处理

1. 检查密钥:确保 secret 没有多余空格,最好重新复制一次。

2. 检查时间戳:使用当前毫秒级时间戳,不要使用秒级。

3. 检查拼接:timestamp 和 secret 之间必须有一个换行符 \n。

4. 检查编码:最终 sign 包含特殊字符,必须用 URL Encode 处理。

怎么验证是否生效

发送请求后,观察 HTTP 状态码是否为 200,且返回 JSON 中 errmsg 字段为 ok。如果返回 errcode 不为 0,查看 errmsg 提示。

常见坑

1. 某些语言默认哈希输出是 hex 字符串,钉钉要求 base64。

2. 时间戳过期,签名有效期通常为请求前后一定时间内,确保服务器时间同步。

3. 二次编码,不要在生成 sign 后再次对整个 URL 进行编码。

参考来源

钉钉开放平台文档中心 - 自定义机器人接入 https://open.dingtalk.com/document/robots/custom-robot-access

原文链接:https://www.zjcp.cc/ask/10685.html

http://www.jsqmd.com/news/789334/

相关文章:

  • 告别迷茫!手把手教你用CodeWarrior 10.7为TWR-56F8200开发板创建第一个裸机工程
  • AI工具集开源实践:统一接口抽象与多模型集成设计
  • 天赐范式第37天:数值模拟到底算不算物理?——从KS和NS方程谈起
  • 零代码搭建工业监控系统:FUXA让SCADA/HMI开发变得如此简单
  • 从频谱仪读数到系统性能评估:手把手教你完成SNR到Eb/N0的实战换算
  • 从交流到直流:HLW8112计量芯片的双模测量实战解析
  • 打破3D创作瓶颈:浏览器内GPU加速法线贴图生成全攻略
  • 别再只会拖控件了!Axure RP 9 实战:用这5个交互让你的原型瞬间“活”起来
  • 告别QT左上角默认图标:RC_FILE配置详解与那些容易写错的rc文件语法
  • 2026年国际GEO排名有哪些 - 品牌企业推荐师(官方)
  • 基于知识图谱与推荐算法的职业路径规划系统设计与实现
  • AIAgent测试不是写用例——SITS2026提出的“动态场景沙盒法”:3分钟构建对抗性测试环境
  • macOS Cursors for Windows:让你的Windows拥有macOS般优雅鼠标指针体验
  • 天赐范式第37天:从数值模拟的内在机理出发,我们的算子流体系,似乎不是这么做的?DEEPSEEK如是说~
  • 2026年海外GEO工具哪个好 - 品牌企业推荐师(官方)
  • 系统级控制工具技术深度剖析:JiYuTrainer模块化架构实战指南
  • GitHub贡献图实战:构建自动化技能学习与可视化成长系统
  • 利用Python轻松实现找出同步日志中的重复数据
  • Horos医疗影像查看器终极指南:macOS平台的专业级开源解决方案
  • Eclipse CDT开发C/C++项目,头文件报红Unresolved inclusion?手把手教你配置GCC/MinGW路径(附常见环境变量问题排查)
  • 别再只盯着XGBoost了!LightGBM实战:用Adult数据集5分钟搞定收入预测模型
  • 天赐范式第37天:数值模拟到底算不算物理?为什么不问到底算不算数学呢?文心如是说~
  • 2026年外贸GEO排名哪个好 - 品牌企业推荐师(官方)
  • Windows Cleaner终极指南:5步彻底解决C盘爆红问题,让你的电脑重获新生!
  • 如何快速解决Windows苹果设备连接难题:一键安装USB和网络共享驱动终极指南
  • Draw.io Mermaid插件:用代码思维重塑技术图表设计流程
  • 【限时解禁】2026 AI大会餐饮数据看板原始日志(含每分钟人流热力、菜品剩余熵值、AI侍应响应延迟P99)
  • 抖音无水印下载器:三步实现高效自动化视频采集方案
  • PaperBanana:基于多智能体流水线的学术图表自动化生成工具实战
  • 专业的2026年白银宋式美学家具店哪家专业 - 品牌企业推荐师(官方)