微信小游戏获取用户相关api返回签名错误87009的解决方案

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑个人版,1个月黄金款+200核时
简介: 微信小游戏获取用户相关api返回签名错误87009的解决方案

             大家在用微信小游戏经常会通过小程序的appid和secret来获取访问权限,这样就能获取用户的加密串,或者查询用户的记录。

            不过微信社区在一些问题上更新并不及时,或者不活跃导致很多用户使用过程中经常遇到奇奇怪怪的签名错误,但无法找到相关的解决方案,这里我就拿微信官网的这个案例加以说明:

internet.getUserEncryptKey | 微信开放文档

这里我们看到

image.gif编辑

于是我们就按照微信官网的方式来生成签名,结果

https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=sdfAaB_LcOntkEi0cUvr5b3qFCfe28nsGrZcpCRvj1H0hQLYQEONLTaE_wYS0BUMXqHXn66h_uwPuu64Yucvp7h0Qxgt77PzZeuoo27vxnqG3KXqbv9wSc6sdD0QNGDbACARKH&openid=sdGm5RUzyfDqiVTWjg4oWM87ldsdfsdfPY&signature=e88fb40bf0f35f543b4a1d1b9d646d6484351b3e955b77ac82a85b06591ed380&sig_method=hmac_sha256

提示签名错误:

{"errcode":87009,"errmsg":"invalid signature rid: 6442685e-7243b495-3f8fc51f","key_info_list":[]}

image.gif

那么我们就开始排查签名算法是否有问题:

这里我们提供几个go语言的HmacSha256的签名算法,相信遇到这种问题的很多人都见到过这种算法,我们顺便也就能验证下到底是哪个算法才能帮助我们解决问题,

算法1:

func ComputeHmacSha256(message string, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    sha := hex.EncodeToString(h.Sum(nil))
    return base64.StdEncoding.EncodeToString([]byte(sha))
}

image.gif

算法2

func HmacSha256(key string, data string) string {
    mac := hmac.New(sha256.New, []byte(key))
    _, _ = mac.Write([]byte(data))
    return hex.EncodeToString(mac.Sum(nil))
}

image.gif

算法3:

func HmacSha256(key string, data string) []byte {
    mac := hmac.New(sha256.New, []byte(key))
    _, _ = mac.Write([]byte(data))
    return mac.Sum(nil)
}
// HmacSha256ToHex 将加密后的二进制转16进制字符串
func HmacSha256ToHex(key string, data string) string {
    return hex.EncodeToString(HmacSha256(key, data))
}
// HmacSha256ToHex 将加密后的二进制转Base64字符串
func HmacSha256ToBase64(key string, data string) string {
    return base64.URLEncoding.EncodeToString(HmacSha256(key, data))
}

image.gif

算法4:

func HmacSha256(message string, secret string) string {
    h := hmac.New(sha256.New, []byte(secret))
    io.WriteString(h, message)
    return fmt.Sprintf("%x", h.Sum(nil))
}

image.gif

发现按照官网的方法填充都不对,实际上真正有效的是算法4,那么参数怎么传呢?

应该是

signature:=HmacSha256("",session_key)  

最终完美解决,如果你遇到类似的问题,仍然没有解决,可以下方留言

相关文章
|
3月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
786 1
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
172 3
|
15天前
|
机器学习/深度学习 人工智能 监控
API超越应用的时代,深入了解F5 API安全解决方案
API超越应用的时代,深入了解F5 API安全解决方案
30 3
|
3月前
|
数据可视化 前端开发 小程序
5G时代-探索微信小游戏
5G时代-探索微信小游戏
36 2
5G时代-探索微信小游戏
|
3月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
267 1
|
3月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
24 2
|
3月前
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
3月前
|
JSON 小程序 前端开发
微信小程序-人脸核身解决方案
微信小程序-人脸核身解决方案
277 0
|
3月前
|
云安全 存储 小程序
PHP微信小程序解决方案PhpMall
PHP微信小程序解决方案PhpMall
49 0
|
3月前
|
小程序
微信小程序之weui.wxss不能引用查找的解决方案
微信小程序之weui.wxss不能引用查找的解决方案
81 0