Невозможно перенаправить на PayPal с помощью omnipay с JQuery в заголовке

Я внедряю Paypal Express, используя omnipay в Laravel 4. Код состояния: 302 найден, когда мой сайт пытается перенаправить на PayPal.

Ошибка:

XMLHttpRequest не может загрузить https://www.sandbox.paypal.com/xxxxxxxx. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-> Origin». Происхождение 'http://www.example.com' равно ??>, поэтому доступ запрещен.

На самом деле я обнаружил, что если я удалю следующий заголовок Jquery в моем Purchase.blade.php, он будет работать нормально. Я использую контроллер для отправки вызова в PayPal (не вызов ajax).

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" />
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

Однако мне нужен Jquery. Любая идея или обходной путь??

Спасибо


person Thomas LAI    schedule 06.01.2015    source источник
comment
Вероятно, это аналогичная проблема, описанная здесь и хорошо решенная: stackoverflow.com/questions/20035101/   -  person Mike W    schedule 07.01.2015
comment
не могли бы вы опубликовать код, который вы выполняете? Вы уже пытались настроить свои сценарии jquery на https? Ваш собственный сервер работает на HTTPS или HTTP?   -  person danielwinter    schedule 08.01.2015


Ответы (1)


может быть немного, но поздно, но у меня похожая проблема в последнее время. Я использую AngularJS для своего внешнего интерфейса и использую службу для вызова API-интерфейса CodeIgniter для Omnipay.

Omnipay перенаправляет в песочницу, но вы хотите вернуть URL-адрес на свой JS или Jquery вместо немедленного перенаправления из CodeIgniter/Laravel/любого серверного фреймворка.

Решение: вместо:

  $response->redirect(), 

замените его на:

   $url = $response->getRedirectUrl();
   print_r($url);

Следовательно, URL-адрес возвращается как обратный вызов вашему Javascript, и в вашем контроллере Javascript (я использую Angular JS) вы можете загрузить его в window.location.

 angular.module('gateway',[])
 .controller('payCtrl', function ($scope,payService,$window){
 $scope.paymentParams={};  //payment params from your form
payService.makePayment($scope.paymentParams) //send payment details to server
  .success (function (data){
   $window.location=data; // the data will be "https://www.paypal.com etc etc, which you will pass to the $window service to redirect to the location. 

  })
  .error (function (err){
   //handle error
  });
});

Надеюсь, это поможет кому-то там.

person user3480964    schedule 23.06.2015