PDA

Просмотр полной версии : Передать заголовок header


ceg
06.01.2022, 22:27
Ребят, никак не могу передать заголовок Authorization, который передается в каждом запросе типа:


PHP:
$jwt="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9";
$headers= [
"Authorization: ".$jwt,
];


Мой код:

В одном файле формирую данные:


PHP:
/* ........ */
$checkSum="";
$paramList= array();
$paramList["wallet_to"] =$this->wallet_to;
$paramList["sum"] =$amount;
$paramList["order_id"] =$tnx_id;
$paramList["hook_url"] =cn("add_funds/lava/complete");
$paramList["success_url"] =cn("add_funds/success");
$paramList["fail_url"] =cn("add_funds/unsuccess");
$paramList["expire"] =$this->lava_expiretime;
$paramList["subtract"] =$this->lava_substract;
$paramList['comment'] =$this->lava_comment;
$data= array(
'paramList'=>$paramList,
'checkSum'=>$checkSum,
);
$this->load->view("lava/redirect",$data);


В другом файле форму: (redirect.php)


HTML:





$value) {
echo '';
}
?>

$(function() {
document.getElementById("payment_method_form").submit();
});





Как же мне сюда можно внедрить передачу заголовка? Крутил и туда, и сюда, и curl пихал, но не получается никак.

fandor9
07.01.2022, 02:09
ceg said:
↑ (https://antichat.live/posts/4486721/)
Ребят, никак не могу передать заголовок Authorization, который передается в каждом запросе типа:

PHP:
$jwt="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9";
$headers= [
"Authorization: ".$jwt,
];


Мой код:
...
Как же мне сюда можно внедрить передачу заголовка? Крутил и туда, и сюда, и curl пихал, но не получается никак.


Вам надо как минимум исправить код для заголовка, там не хватает слова Bearer перед самим JWT токен.


PHP:
$jwt="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9";
$headers= [
"Authorization: Bearer ".$jwt,
];


что-бы передавать заголовки, можете использовать Жабускрипт и:


Fetch (https://developer.mozilla.org/ru/docs/Web/API/Fetch_API/Using_Fetch) или же

XMLHttpRequest и setRequestHeader (https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest/setRequestHeader)('Authorization','Bearer '+ JWToken);

ceg
07.01.2022, 11:11
fandor9 said:
↑ (https://antichat.live/posts/4486740/)
не хватает слова Bearer перед самим JWT токен.


Взял с документации https://docs.lava.ru/primery-raboty-s-api/php

Вместо:


HTML:





$value) {
echo '';
}
?>

$(function() {
document.getElementById("payment_method_form").submit();
});





пишу:


HTML:





$value) {
echo '';
}
?>


var http = new XMLHttpRequest();
var url = 'https://api.lava.ru/invoice/create';
var params = '';
http.open('POST', url, true);

//Send the proper header information along with the request
http.setRequestHeader('Authorization','Bearer '+'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9');
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
console.log(this.responseText);
http.send(params);






Получаю в консоле ошибки:

undefined

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://api.lava.ru/invoice/create. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»). Код состояния: 200.

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://api.lava.ru/invoice/create. (Причина: не удалось выполнить запрос CORS). Код состояния: (null).

Куда стоит копать дальше?

ceg
07.01.2022, 12:25
Сделал все таки с помощью curl.

Вариант сработал, но посмотрите, можно ли оставлять такой вариант получения данных и перенаправление страницы? Пробовал перенаправлять с помощью header - ошибка в консоле по поводу запрета чтения удаленного ресурса.



PHP:
$url="https://api.lava.ru/invoice/create";
$headers= ["Authorization: ".$this->lava_apikey,];

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$paramList);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
$result=curl_exec($curl);
$response=json_decode(curl_exec($ch),true);
curl_close($ch);
$redirecturl=$response["url"];

echo"self.location='$redirecturl';";

fandor9
07.01.2022, 14:01
Так как вы делаете запрос с источника, который отличается от цели, из-за политики общего происхождения (https://habr.com/en/post/514684/) ("same-origin policy") то браузер не даёт читать/использовать данные которые получает в ответе. По идее API должен отдавать в ответах CORS (https://developer.mozilla.org/ru/docs/Web/HTTP/CORS) заголовки "Access-Control-Allow-Origin" со значением либо * (любой источник может читать/использовать информацию ответов) либо же со значением подходящее под источник "Access-Control-Allow-Origin: hxxps://test.ololo.ru/"