Ребят, никак не могу передать заголовок 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: <div class="dimmer active" style="min-height: 400px;"> <div class="loader"></div> <div class="dimmer-content"> <center><h2><?php echo lang('please_do_not_refresh_this_page'); ?></h2></center> <form method="get" action="https://api.lava.ru/invoice/create" name="f1" id="payment_method_form"> <?php foreach($paramList as $name => $value) { echo '<input type="hidden" name="' . $name .'" value="' . $value . '">'; } ?> <script type="text/javascript"> $(function() { document.getElementById("payment_method_form").submit(); }); </script> </form> </div> </div> Как же мне сюда можно внедрить передачу заголовка? Крутил и туда, и сюда, и curl пихал, но не получается никак.
Вам надо как минимум исправить код для заголовка, там не хватает слова Bearer перед самим JWT токен. PHP: $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9";$headers = ["Authorization: Bearer ".$jwt,]; что-бы передавать заголовки, можете использовать Жабускрипт и: Fetch или же XMLHttpRequest и setRequestHeader('Authorization','Bearer '+ JWToken);
Взял с документации https://docs.lava.ru/primery-raboty-s-api/php Вместо: HTML: <div class="dimmer active" style="min-height: 400px;"> <div class="loader"></div> <div class="dimmer-content"> <center><h2><?php echo lang('please_do_not_refresh_this_page'); ?></h2></center> <form method="get" action="https://api.lava.ru/invoice/create" name="f1" id="payment_method_form"> <?php foreach($paramList as $name => $value) { echo '<input type="hidden" name="' . $name .'" value="' . $value . '">'; } ?> <script type="text/javascript"> $(function() { document.getElementById("payment_method_form").submit(); }); </script> </form> </div> </div> пишу: HTML: <div class="dimmer active" style="min-height: 400px;"> <div class="loader"></div> <div class="dimmer-content"> <center><h2><?php echo lang('please_do_not_refresh_this_page'); ?></h2></center> <form method="get" action="https://api.lava.ru/invoice/create" name="f1" id="payment_method_form"> <?php foreach($paramList as $name => $value) { echo '<input type="hidden" name="' . $name .'" value="' . $value . '">'; } ?> <script type="text/javascript"> 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); </script> </form> </div> </div> Получаю в консоле ошибки: undefined Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://api.lava.ru/invoice/create. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»). Код состояния: 200. Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://api.lava.ru/invoice/create. (Причина: не удалось выполнить запрос CORS). Код состояния: (null). Куда стоит копать дальше?
Сделал все таки с помощью 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 "<script>self.location='$redirecturl';</script>";
Так как вы делаете запрос с источника, который отличается от цели, из-за политики общего происхождения ("same-origin policy") то браузер не даёт читать/использовать данные которые получает в ответе. По идее API должен отдавать в ответах CORS заголовки "Access-Control-Allow-Origin" со значением либо * (любой источник может читать/использовать информацию ответов) либо же со значением подходящее под источник "Access-Control-Allow-Origin: hxxps://test.ololo.ru/"