无法在标头中使用带有 JQuery 的 omnipay 重定向到贝宝

Posted

技术标签:

【中文标题】无法在标头中使用带有 JQuery 的 omnipay 重定向到贝宝【英文标题】:Cannot redirect to paypal using omnipay with JQuery in the header 【发布时间】:2015-03-04 15:00:15 【问题描述】:

我在 Laravel 4 中使用 omnipay 实施 Paypal Express。 状态码:当我的网站尝试重定向到贝宝时发现 302。

错误:

XMLHttpRequest 无法加载 https://www.sandbox.paypal.com/xxxxxxxx。请求的资源上不存在“Access-Control-Allow-> Origin”标头。 Origin 'http://www.example.com' 是 ??> 因此不允许访问。

实际上,我发现如果我在 purchase.blade.php 中删除以下 Jquery 标头,它将正常工作。我正在使用 Controller 提交对 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。 有什么想法或解决方法吗??

谢谢

【问题讨论】:

这可能是这里描述的类似问题并得到了很好的回答:***.com/questions/20035101/… 你能发布你正在执行的代码吗?您是否尝试将您的 jquery 脚本设置为 https 呢?您自己的服务器是在 HTTPS 还是 HTTP 上运行? 【参考方案1】:

可能有点晚了,但我最近遇到了类似的问题。我在前端使用 AngularJS,并使用服务调用我的 Omnipay 的 CodeIgniter api。

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
  );
);

希望它对那里的人有所帮助。

【讨论】:

以上是关于无法在标头中使用带有 JQuery 的 omnipay 重定向到贝宝的主要内容,如果未能解决你的问题,请参考以下文章

使用带有模式的 fetch API:'no-cors',无法设置请求标头

带有自定义标头的跨域 jquery ajax api 调用未命中服务器

使用jQuery数据表中的列过滤器下拉列表修复标头

带有域字段的 CORS cookie 仅在使用 jQuery AJAX 的 Firefox 中设置

带有 Chai 错误的 Express 单元测试 = 发送后无法设置标头

我无法在 Angular 4 上向 laravel api 发送带有标头的 http 请求