在pc端微信小程序中,请求阿里的oss 中 mp3 文件,提示密钥错误,但是直接在浏览器中访问是没有问题的。

139 阅读1分钟

抓包后,看到返回的响应是

<?xml version="1.0" encoding="UTF-8"?> <Error> <Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message> <RequestId>XXXXXXXX</RequestId> <HostId>[XXXX](http://XXX.oss-cn-beijing.aliyuncs.com/)</HostId> <OSSAccessKeyId>XXXXXXX</OSSAccessKeyId> <SignatureProvided>XXXXXXXXXX/+Q=</SignatureProvided> <StringToSign>GET application/json 1713430534 /XXX/media/202404181154/practice_1988265e8001191c.mp3</StringToSign> <StringToSignBytes>ZXXXXXXX </StringToSignBytes> <EC>0002-00000040</EC> <RecommendDoc><https://api.aliyun.com/troubleshoot?q=0002-00000040></RecommendDoc> </Error>

其实文档中有问题指导文档,总结一下就是:

你的请求体中多出了content-type字段,所以计算Signature的时候,需要计算进去。

至于能不能解决,大家可以试一下。

因为我是前端,这个改动成本挺大的,所以可以转变一下思路。在微信小程序中,先直接下载文件,然后将临时文件的路径赋给InnerAudioContext.src就可以了。