PHP post数据未使用AWS4签名方法进行身份验证

PHP post数据未使用AWS4签名方法进行身份验证,php,authentication,post,aws4c,Php,Authentication,Post,Aws4c,在下面的示例中,当我启用post datacurl_setopt($ch,CURLOPT_POSTFIELDS,$data_string)时 获取我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法”,但当我禁用post数据时,它会正常工作。 我应该将此数据参数传递到其他地方吗 $get_token = new GetToken(); $token_obj = $get_token->get_session_token(); $accessKeyID = $tok

在下面的示例中,当我启用post data
curl_setopt($ch,CURLOPT_POSTFIELDS,$data_string)时
获取我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法”,但当我禁用post数据时,它会正常工作。
我应该将此数据参数传递到其他地方吗

$get_token = new GetToken();
$token_obj = $get_token->get_session_token();

$accessKeyID = $token_obj->access_key_id;
$secretAccessKey = $token_obj->secret_key;
$regionName = $token_obj->region;
$serviceName = 'execute-api';
$httpMethodName = 'POST';
$canonicalURI = '/orders/salesorder';
$queryParametes = array();
$awsHeaders = array('content-type'=>'application/json','host'=>'api.mysite.com','id_token'=>$token_obj->id_token,'x-amz-date'=>gmdate("Ymd\THis\Z"),'x-amz-security-token'=>$token_obj->session_token);
$payload = "";

$get_aws4_sign = new AWSV4($accessKeyID,$secretAccessKey,$regionName,$serviceName,$httpMethodName,$canonicalURI,$queryParametes,$awsHeaders,$payload);
$headers_result = $get_aws4_sign->getHeaders();

$headersArr = array(
    'host' => $headers_result['host'],
    'id_token' => $headers_result['id_token'],
    'xamzdate' => $headers_result['x-amz-date'],
    'xamzsecuritytoken' => $headers_result['x-amz-security-token'],
    'Authorization' => $headers_result['Authorization']
);

$data = array("id" => "126757879");
$data_string = json_encode($data);

$ch = curl_init('https://api.mysite.com/orders/salesorder');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'content-type: '.$headers_result['content-type'],
   'host: '.$headers_result['host'],
   'id_token: '.$headers_result['id_token'],
   'x-amz-date: '.$headers_result['x-amz-date'],
   'x-amz-security-token: '.$headers_result['x-amz-security-token'],
   'Authorization: '.$headers_result['Authorization']
));
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

//execute post
$result = json_decode( curl_exec($ch), TRUE);

//close connection
curl_close($ch);

print_r($result);

curl_error返回什么?我得到的是“我们计算的请求签名与您提供的签名不匹配”。当我启用CURLOPT_POSTFIELDS时,请检查您的AWS秘密访问密钥和签名方法,但当我禁用该行时,这不是因为您根据第12行的空负载在第14行创建签名,并在第33行签名后添加数据吗?在计算之前,您不应该将$payload设置为$data\u字符串吗?
$get_token = new GetToken();
$token_obj = $get_token->get_session_token();

$accessKeyID = $token_obj->access_key_id;
$secretAccessKey = $token_obj->secret_key;
$regionName = $token_obj->region;
$serviceName = 'execute-api';
$httpMethodName = 'POST';
$canonicalURI = '/orders/salesorder';
$queryParametes = array();
$awsHeaders = array('content-type'=>'application/json','host'=>'api.mysite.com','id_token'=>$token_obj->id_token,'x-amz-date'=>gmdate("Ymd\THis\Z"),'x-amz-security-token'=>$token_obj->session_token);

$data = array("id" => "126757879");
$data_string = json_encode($data);

$payload = $data_string;

$get_aws4_sign = new AWSV4($accessKeyID,$secretAccessKey,$regionName,$serviceName,$httpMethodName,$canonicalURI,$queryParametes,$awsHeaders,$payload);
$headers_result = $get_aws4_sign->getHeaders();

$headersArr = array(
    'host' => $headers_result['host'],
    'id_token' => $headers_result['id_token'],
    'xamzdate' => $headers_result['x-amz-date'],
    'xamzsecuritytoken' => $headers_result['x-amz-security-token'],
    'Authorization' => $headers_result['Authorization']
);

$ch = curl_init('https://api.mysite.com/orders/salesorder');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'content-type: '.$headers_result['content-type'],
   'host: '.$headers_result['host'],
   'id_token: '.$headers_result['id_token'],
   'x-amz-date: '.$headers_result['x-amz-date'],
   'x-amz-security-token: '.$headers_result['x-amz-security-token'],
   'Authorization: '.$headers_result['Authorization']
));
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

//execute post
$result = json_decode( curl_exec($ch), TRUE);

//close connection
curl_close($ch);

print_r($result);