Я пытаюсь сделать заявку на конференциюCallout в службе Sinch, но у меня возникают проблемы с подписью. Я вставьте код:Неисправность с запросом авторизации
<?php
//JSon Object
$conferencia['method']="conferenceCallout";
$participante['cli']="46000000000";
$destination['type']="username";
$destination['endpoint']="roke1";
$participante['destination']=$destination;
$participante['domain']="mxp";
$participante['custom']="customData";
$participante['locale']="en-US";
$participante['greeting']="Welcome to my conference";
$participante['conferenceId']="conferencia_de_prueba";
$participante["enableDice"]=false;
$conferencia['conferenceCallout']=$participante;
$data=json_encode($conferencia);
$md5_body = base64_encode (MD5 (utf8_encode (json_encode($conferencia))));
$applicationKey="XXXXXX-xXXX-XXXX-XXXX-XXXXXXXX";
$applicationSecret="XXXXXXXXXXXXXXXX==";
$timestamp = new DateTime('NOW');
$StringToSign ="POST
".$md5_body."
application/json
x-timestamp:".$timestamp->format(DateTime::ISO8601)."
/v1/callouts";
$utf8encode=utf8_encode($StringToSign);
$hash= hash_hmac("sha256",$applicationSecret,$utf8encode);
$base64=base64_encode($hash);
$Signature =$base64;
$Autorization = "Application"." ".$applicationKey.":".$Signature;
$ch = curl_init('https://callingapi.sinch.com/v1/callouts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization:' . $Autorization,
'X-Timestamp: ' . $timestamp->format(DateTime::ISO8601),
'Content-Length: ' . strlen($data))
);
$result = curl_exec($ch);
echo $result;
?>
Но я получаю код ошибки 40102, которое 40102 - недействительная подпись.
Может ли кто-нибудь мне помочь? Что я делаю неправильно?
С наилучшими пожеланиями.
Похоже, что вы не указали '\ n' между строками, которые вы подписываете. Они показывают, как 'StringToSign = HTTP-Verb + "\ п" + Content-MD5 + "\ п" + Content-Type + "\ п" + CanonicalizedHeaders + "\ п" + CanonicalizedResource;' – drew010
I попробуйте с \ n и \ r и не сработали :( – Roke
Когда base64 кодирует хэш MD5 и HMAC, вам нужно кодировать исходный вывод: '$ md5 = base64_encode (md5 ($ message, true));' base64_encode (hash_hmac ('sha256', $ stringToSign, $ applicationSecret, true)); ' – drew010