Problema com CORS ao implementar checkout em api | Fórum | School of Net

Deseja poder participar de nosso fórum e tirar todas as suas dúvidas?
Clique aqui e assine nosso plano de acesso ilimitado. Saiba mais.

por Jeison

6 dias, 5 horas atrás Jeison

Problema com CORS ao implementar checkout em api

Boa tarde , estou com um problemão , eu consigo gerar todos os passos , mas na hora de transassionar ele me da um bloqueio de cors. Testei no postman e por lá o guzzle bate no pagseguro sem nenhum problema , obviamente me retorna erros 400 pq eu nao enviei os campos. O cors do laravel ta configurado globalmente e também puxo ele nos middlewares. Uma outra coisa é , somente da erro quando eu uso o guzzle com withBody:true , se eu passar para false ele não retorna erro de cors Segue o erro ``` Access to XMLHttpRequest at 'http://localhost:8000/api/anunciante/checkout' from origin 'http://127.0.0.1:555' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. meus_dados.html:835 {readyState: 0, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …} Cross-Origin Read Blocking (CORB) blocked cross-origin response http://localhost:8000/api/anunciante/checkout with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details. ``` pagseguro.php ``` <?php /** * Created by PhpStorm. * User: Jeison Pedroso * Date: 13/05/2019 * Time: 16:57 */ namespace App\Pagseguro; use GuzzleHttp\Client; class PagSeguro { const SESSION = 0; const SESSION_SANDBOX = 1; const CHECKOUT = 2; const CHECKOUT_SANDBOX = 3; private $requests = [ 0 => [ 'url' => 'https://ws.pagseguro.uol.com.br/v2/sessions', 'method' => 'POST', 'options' => [ 'withBody' => false ] ], 1 => [ 'url' => 'https://ws.sandbox.pagseguro.uol.com.br/v2/sessions', 'method' => 'POST', 'options' => [ 'withBody' => false ], ], 2 => [ 'url' => 'https://ws.pagseguro.uol.com.br/v2/transactions', 'method' => 'POST', 'options' => [ 'withBody' => true ], ], 3 => [ 'url' => 'https://ws.sandbox.pagseguro.uol.com.br/v2/transactions', 'method' => 'POST', 'options' => [ 'withBody' => true ], ] ]; public function request(int $url, array $data =[]){ $request = $this->requests[$url]; $url = $request['url']; if ($request['options']['withBody']){ $options['form_params'] = $data; }else { $url = $url . '?' . http_build_query($data); $options = []; } $cliente = new Client(); $response = $cliente->request($request['method'], $url); return $response->getBody(); } } ``` Cors.php ``` <?php return [ /* |-------------------------------------------------------------------------- | Laravel CORS |-------------------------------------------------------------------------- | | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*') | to accept any value. | */ 'supportsCredentials' => true, 'allowedOrigins' => ['*'],// ex: ['abc.com', 'api.abc.com'] 'allowedHeaders' => ['*'], 'allowedMethods' => ['*'],// ex: ['GET', 'POST', 'PUT', 'DELETE'] 'exposedHeaders' => [], 'maxAge' => 0, ]; ``` Ajax no front ``` //Pega dados do pagamento $('#pagar').on('click', function (e) { e.preventDefault(); var card = $('#card').val().toString().replace( /\s/g, '' ); number = parseInt(card); ano_mes = $('#mes_expira').val().split('/'); params = { cardNumber : card , cvv : $('#cvv').val(), expirationMonth: ano_mes[0] , expirationYear: ano_mes[1], brand :paymentData.brand }; pagSeguro.createCardToken(params).then(function (token) { parcelas = $('#parcela').val(); parcela = parcelas.split('-'); cpf = $('#cpf_pag').val().toString().replace( /\s/g, '' ); cpf_format = parseInt(cpf); phone = $('#telefone_pag').val().toString().replace( /\s/g, '' ); phone_format = parseInt(phone); dados = { creditCardToken : token, installmentQuantity: parcela['0'], installmentAmount: parcela['1'], creditCardHolderCPF : cpf_format, creditCardHolderName : $('#nome_titular').val(), creditCardHolderPhone: phone_format }; $.ajax({ headers: { 'Access-Control-Allow-Credentials' : true, 'Access-Control-Allow-Origin':'*', 'Access-Control-Allow-Methods':'POST', 'Access-Control-Allow-Headers':'application/json' }, type: "POST", url: URL_BASE+"/api/anunciante/checkout", context: this, data:dados, success: function(data) { console.log(data); }, error:function (err) { console.log(err); } }) }); }) ```

3 Respostas