根据指南做小游戏排行榜功能,使用HTTPS的方式 调用 storage.setUserStorage API 报:48001 api unauthorized,
网上资料实在太少,想问 sig_method = 'hmac_sha256' 是这样写吗? 希望官方补充一些范例吧。
提示 “48001 ,api unauthorized”
是需要登录mp管理后台后,在游戏设置-排行榜配置中完成配置吗?我看指南说,不影响,就暂时没有配置
该配置只影响搜索、小游戏中心的排行榜展现。并不影响利用托管数据、主域和开放数据域的方式实现的游戏内好友排行榜。
服务端代码部分代码如下,
//获取accessToken
let got = require('got')
let config ={appId:'xxxxxxxxx',appSecret:'xxxxxxxxxxx'}
let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.appId}&secret=${config.appSecret}`
const response = await got(url)
let { access_token } = JSON.parse(response.body)
//数据签名
let { session_key, openid } = (await common.mysql('user_table').where({ id: userId }).select('session_key', 'openid'))[0]
let str_kv = '{ "kv_list":[{"key":"score","value":"100"}] }'
let signature = crypto.createHmac('sha256', session_key).update(str_kv).digest('hex')
let sig_method = 'hmac_sha256'
//得到url,和要发送的数据
let curl = `curl -d '${str_kv}' 'https://api.weixin.qq.com/wxa/set_user_storage`
+ `?access_token=${access_token}&signature=${signature}&openid=${openid}&sig_method=${sig_method}'`
用代码POST 和 CURL 结果都一样,如下
curl -d '{ "kv_list":[{"key":"score","value":"100"}] }' 'https://api.weixin.qq.com/wxa/set_user_storage?access_token=44_vWhpofvZmVo6BorFsJjcg_66kUlaj6dgQJRuzXDU9Gu7vX0Q-wHZ56sJlirWUAwHracF9X8QwlQTus2HieWYqr-QrzfZiFrTh2uSdmm4PqBfB3vLPYMQbApCvOPUNETuhVlO7UjvNC4u09vUSWGcAJAGKU&signature=4925b27ee196df072e41dfc46f64767b57b003e6b4d730816299b59b064a2b89&openid=oy2Rh5V5B1cM_BsDUIuErs32nBW4&sig_method=hmac_sha256'
报错
{"errcode":48001,"errmsg":"api unauthorized rid: 6093e581-0c52f67b-399463e4"}
2. access_token,和session_key,都是在调用HTTPS接口,之前全新获取的,应该不存在过期问题
3. 做的对战游戏,用服务器API就是为了解决,用户端意外掉线,无法上传比赛结果的情况
4. 实在不行,只能曲线救国了,用这个客户端接口wx.setUserCloudStorage,在用户 恢复登录后,在把意外终止的比赛结果上传了。。。
request.post('https://api.weixin.qq.com/wxa/set_user_storage?access_token=ACCESS_TOKEN&signature=615d2eaedb2e4a086e4362f8b71b2a2ea20e22e3e1076de4fb5df31b8b583f4e&openid=OPENID&sig_method=hmac_sha256', { "kv_list":[{"key":"score","value":"100"},{"key":"gold","value":"3000"}] })