相关关键词:session_key hmac_sha256 87009 invalid signature
原文档地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/checkSessionKey.html
signature:用户登录态签名,用session_key对空字符串签名得到的结果。即 signature = hmac_sha256(session_key, "")
个人认为可能hmac摘要算法平时可能使用较少,对于入参不熟悉导致错误。hmac摘要算法类似于普通哈希加盐。另外,即便入参顺序错误,仍然能够顺利计算摘要,从而导致开发者无法及时发现错误原因。
hmac加密算法入参一般为hmac(H,K,M),其中H为摘要算法,此处为sha256;K为密钥(secret key);M为要计算摘要的消息(message);
注意是将session_key作为密钥(secret key),而不是作为要计算摘要的消息体(message),此处消息体应为空字符串。
因此,签名算法为hmac("sha256" , session_key , ""),这个入参顺序并不绝对,不同语言不同扩展包可能入参顺序有差别,应仔细确认。
以PHP为例,自带的hash_hmac方法:
hash_hmac(摘要算法, 要计算摘要的消息体,密钥)
签名方法应为:hash_hmac("sha256" , "" , session_key)

太坑了这个问题
用php语言,确实被开发文档误导了,调试了半个多小时,看了这篇文章后,发现参数数序的原因。微信写文档的家伙,误导开发人员。