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

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑企业版,4核8GB 120小时 1个月
简介: 微信小游戏获取用户相关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)  

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

相关文章
|
14天前
|
人工智能 运维 安全
聚焦API安全未来,F5打造无缝集成的解决方案
聚焦API安全未来,F5打造无缝集成的解决方案
65 26
|
27天前
|
人工智能 机器人 Serverless
《10 分钟构建 AI 客服并应用到网站、钉钉或微信中》解决方案体验评测
一文带你详细了解如何基于百炼平台、函数计算或者计算巢AppFlow10 分钟构建 AI 客服并应用到网站、钉钉或微信中,附全篇图文详解,欢迎阅读评价。
103 9
《10 分钟构建 AI 客服并应用到网站、钉钉或微信中》解决方案体验评测
|
6天前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
2月前
|
人工智能 搜索推荐 UED
通过体验《10 分钟构建 AI 客服并应用到网站、钉钉或微信中》解决方案测评
本次测试涵盖了钉钉和微信上的部署体验。部署流程简单便捷,约10分钟即可完成基础配置,适合技术背景各异的用户。功能上,网站端响应迅速但准确度有待提升;钉钉内集成良好,响应及时但答案丰富度有限;微信端用户友好,回答深度需加强。稳定性方面表现出色,资源占用合理。此外,还支持一定程度的自定义开发以满足不同需求。总的来说,这是一个快速搭建AI客服的有效方案,不过还需针对特定场景做更多优化工作。
58 2
|
3月前
|
文字识别 小程序 安全
印刷文字识别操作报错合集之微信小程序调用API时路径总是返回不对,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
2月前
|
小程序
微信小程序无法触发onReachBottom的解决方案
这篇文章提供了解决微信小程序中`onReachBottom`事件无法触发的问题的方案。问题的原因可能是`onReachBottom`方法重复,解决方案是删除系统自动生成的该方法。
|
2月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
3月前
|
小程序 API
微信小程序getLocation报错 getLocation:fail the api need to be declared in the requiredPrivateInfos field in
微信小程序getLocation报错 getLocation:fail the api need to be declared in the requiredPrivateInfos field in
321 1
|
3月前
|
API
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
|
3月前
|
前端开发 小程序 API
【微信小程序】使用 Promise、async 和 await 将异步API 改写为同步
【微信小程序】使用 Promise、async 和 await 将异步API 改写为同步
49 0
下一篇
无影云桌面