签名不匹配。授权签名或客户凭证错误

问题描述 投票:0回答:1

使用下面的代码尝试创建签名并获取不记名标记。

<?php
$tm=time();

$param_str = "grant_type=client_credentials&oauth_consumer_key=xxxx&oauth_nonce=xxx&oauth_signature_method=HMAC-SHA256&oauth_timestamp=".$tm."&oauth_version=1.0";

//die($param_str);
$base_str = "POST&" .urlencode("https://account.api.here.com/oauth2/token") . "&" . urlencode($param_str);
//die($base_str);
$sign_key = urlencode("xxxxxxxxxxxxxxxxxxxxxxxxx")."&";

$signature= hash_hmac("sha256",$base_str,$sign_key);

$url = "https://account.api.here.com/oauth2/token";

$ch = curl_init( $url );

$headers = [
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: OAuth oauth_consumer_key="xxx",oauth_nonce="xxx",oauth_signature="'.$signature.'",oauth_signature_method="HMAC-SHA256",oauth_timestamp="'.$tm.'",oauth_version="1.0"',
    'Cache-Control: no-cache'
];

$payload="grant_type=client_credentials";
curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
# Return response instead of printing.
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
# Send request.
$result = curl_exec($ch);
curl_close($ch);
?>

尝试了各种组合。得到同样的错误(签名不匹配,授权签名或客户端凭证错误)。甚至尝试从文档中复制精确的url编码字符串,替换相关信息,但仍然没有工作。是否有什么东西我不理解在所有的文档或东西我在我的代码丢失。谢谢你的帮助!。

here-api
1个回答
0
投票

签名不匹配的原因是你创建的签名和服务器创建的签名不同。请检查以下内容--------------------------------。

  • 你是否将签名密钥和基本字符串转换为字节后再传递给HMAC-SHA256哈希算法。
  • 你有没有将HMAC-SHA256哈希算法的输出转换成base64字符串。

还请检查这个 联系 如果这能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.