{
“code”: 2001,
“data”: null,
“msg”: “服务异常:code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256
31c396f4d3f98a606bc62e73afc1d4df9d982442cd0c7c5d3c5d5ccdb2237c40], server CanonicalRequest is [POST
/
content-type:application/octet-stream
host:ocr-api.cn-hangzhou.aliyuncs.com
x-acs-action:RecognizeMixedInvoices
x-acs-content-sha256:1133b6d349e2d6f525d04900d9e8f97e26eb15f6cb5a2d1c3262936aebe06240
x-acs-date:2023-09-13T09:04:00Z
x-acs-signature-nonce:d6f153f1-4b34-469a-ace7-3099bb16e255169459584040534
x-acs-version:2021-07-07
content-type;host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version
1133b6d349e2d6f525d04900d9e8f97e26eb15f6cb5a2d1c3262936aebe06240] request id: 7EADBBB3-F55F-5107-BBD2-90F4AC83DD74”
}
文字识别 OCR混贴发票识别,,用的是sdk方式请求,报如上异常。今天更换的新账号,本地测试是正常的,放到gts上部署请求,就报如上的问题?
楼主你好,这个异常提示是服务端返回的签名不匹配错误,可能是由于请求参数不正确或者是时间戳不一致导致的。你可以尝试重新生成签名并检查请求参数,确保它们与阿里云文档中的要求一致。
同时,也建议检查使用的阿里云账号是否具有访问 OCR 混贴发票识别服务的权限。如果账号没有权限,也会导致类似的异常。
根据提供的错误信息,看起来是请求中的签名计算有问题。这可能是由于以下原因导致:
计算签名时使用了错误的密钥或密钥对:请确保您在请求中使用的是正确的密钥或密钥对。检查您的代码、配置文件或环境变量,确保使用了与新账号相关联的正确密钥。
请求中的时间戳不正确:签名计算需要准确的时间戳(x-acs-date)和签名随机数(x-acs-signature-nonce)。请确认您的时间戳和签名随机数与服务器时间一致,并在UTC格式下提供。
请求头或请求体参数不正确:签名计算需要包括特定的请求头参数和请求体参数。请确保您按照服务提供商的要求正确设置了content-type、host、x-acs-action、x-acs-content-sha256等参数,并且将其作为签名计算的一部分。
根据提供的错误信息,看起来是由于签名计算不匹配导致的异常。针对您的具体情况,建议您检查以下几个方面:
验证密钥和访问权限:确保您在部署到 GTS 上时正确配置了新账号的密钥(Access Key ID 和 Access Key Secret),并且该账号具有正确的访问权限。请注意,如果是刚创建的账号,可能需要等待一段时间才能生效。
网络代理或防火墙设置:如果您的部署环境中使用了网络代理或有防火墙设置,请确保您已经正确配置了相关的网络设置,以确保请求可以顺利通过。
请求参数和头部:根据错误信息中的 CanonicalRequest 内容,仔细检查您发送的请求中的参数和头部信息是否与服务器端要求的一致。特别要注意日期、签名算法、内容哈希值等关键字段是否正确。
网络连接和域名解析:确认您的部署环境可以正常访问阿里云服务,并且能够成功解析
ocr-api.cn-hangzhou.aliyuncs.com
域名您好,从您提供的错误信息Specified signature does not match our calculation 来看是签名不匹配。文字识别OCR接口调用后,在response中会返回服务端的待签名字符串(就是string to sign),需要自己本地打印一下拼接的待签名字符串,对比一下是否存在拼接错误。只需保证本地自己拼接的待签名字符串和文字识别OCR服务端的一样,那算出来的签名肯定也一样了。比如没有urlEncode,或者少了几个公共参数,对比就即可得知具体差异在哪里。