如何在 AngularJS 而不是 NodeJS 中处理来自 PayPal In-Context 的响应

How to handle the response from PayPal In-Context in AngularJS instead of NodeJS

在通过 paypal-rest-sdk 使用 PayPal In-Context 结账后,我无法从服务器端 NodeJS 代码获得响应。

我在 html 中定义了一个 PayPal 表单,但故意没有定义操作。我只定义了id和方法(get)。在我的 Angular 代码中,我定义了单击 PayPal 按钮时的操作:

var payPalForm = document.getElementById('payPalForm');

payPalForm.addEventListener("click", function(e) {

  payPalForm.setAttribute('action', "https://10.0.0.25:8001/checkout/" +
    $scope.user._id + "/" + $scope.viewEvent._id.valueOf() + "/" + 
    $scope.viewEvent.eventName + "/" + $scope.viewEvent.price);

});

通过这样做,我能够通过 PayPal In-Context 成功结账。

在我的 NodeJS 代码中,在成功结帐后,我想将状态传递回 Angular,而不是 return res.end(); 如果成功或 res.sendStatus(400, 'bad paypal payment'); 如果失败它在那里。

重申一下:我不想在 NodeJS 中定义 post PayPal In-Context 路由,我想在 Angular 中定义它。

我需要这样做,因为我正在使用 Onsen UI, and am using a splitter 在页面之间导航。

有人成功过吗?

尝试第一个答案后更新

我以前试过这个,但在尝试实施 Ilia Sky 的回答后,结果是 PayPal In-Context 结账没有正确执行。脚本运行正确(由终端中的输出确定),但上下文 window 加载“?”作为参数,然后立即自行关闭。这是有关我如何更新代码的屏幕截图。注释掉的代码是我能够成功结帐但无法正确重定向时所拥有的代码:

我认为这是 PayPal 的问题,我不确定如何解决。

这就是为什么我想知道我是否可以在 Angular 中监听重定向,然后在识别到某个重定向时加载不同的页面。

我在我的 Angular 控制器中试过这个,但它只在初始页面加载时执行:

我可能是错的,但据我了解你想做的是:

  1. 向服务器发送数据(到https://10.0.0.25:8001/checkout/...
  2. 在服务器上做一些事情并给出响应(res.send 等)
  3. 处理客户端的响应

对吗?

要做到这一点,最简单的解决方案就是向服务器发送 ajax 请求,然后处理响应。

这意味着您可以直接通过 js 发出请求,而不是更改 action 属性。使用 angular 可以使用 $http 服务完成。

$http.post('https://10.0...').then(successCallback, errorCallback);

success|errorCallback 中,您可以做任何您想做的事情,例如在拆分器中加载页面或任何您想要做的事情:)

要更改尝试提交表单时发生的情况,您可以查看 ng-submit

要获得 $http,您只需将其添加到控制器的参数列表中即可。

例子

app.controller('ExampleController', function($scope, $http) {
  $scope.submit = function() {
    $http.post('your/long/url').then(function(response) {
      mySplitter.content.load('success-page.html');
    }, function(response) {
      mySplitter.content.load('error-page.html');  
    });
  };
}]);

<form ng-submit="submit()" ng-controller="ExampleController">
  ...
</form>

我鼓励大家看看这个 link

一位 PayPal 开发人员发布了一个带有 Angular PayPal In-Context Checkout 示例的示例 Kraken。