0

在下面的示例中,当我启用发布数据时,我们计算curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法',但是当我禁用发布数据时,它的工作。我应该在其他任何地方传递这个数据参数吗?

$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);
4

1 回答 1

0
$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);
于 2021-04-25T07:00:55.647 回答