[嗨,我必须使用Curl在api上发送数据。它要求请求标头中的摘要值。但是我在Curl的响应中遇到了签名不匹配的错误。
以下是创建摘要值的步骤:
用于计算摘要值,请按照以下步骤操作:
1)从原始密钥字节中获取hmac_sha1密钥(此处原始密钥字节将为Client_secret(将在电话)
2)在有效载荷字节上计算hmac
3)对hmac进行十六进制编码(十六进制编码,而不是示例中提到的Base64,然后返回获得的字符串为DigestValue
4)使用的算法是:HmacSHA1
请参考下面链接中的示例50,以获取更多帮助:http://www.javatips.net/api/java.security.signatureexception
十六进制编码,而不是如示例中提到的Base64,这里使用Client_secret代替密钥,如上所述例如
$key=rrxfwr@*QB60rrxfwr@*QB60;
$client_secret='EghAfDrNv4RrGpRvbH1/00BGiC3vCP49cwVAEIzT7ob5JFiEQS5oMg==';
$pad=hash_hmac("sha1",$client_secret,true);
$digestvalue=bin2hex($pad);
根据手册以及您的描述,应该是这样:
$key = 'rrxfwr@*QB60rrxfwr@*QB60';
$data = base64_decode('EghAfDrNv4RrGpRvbH1/00BGiC3vCP49cwVAEIzT7ob5JFiEQS5oMg==');
$pad = hash_hmac('sha1', $data, $key, true);
$digestvalue = bin2hex($pad);
似乎您的$data
和$key
参数相反。