如何在 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 控制器中试过这个,但它只在初始页面加载时执行:
我可能是错的,但据我了解你想做的是:
- 向服务器发送数据(到
https://10.0.0.25:8001/checkout/...
)
- 在服务器上做一些事情并给出响应(
res.send
等)
- 处理客户端的响应
对吗?
要做到这一点,最简单的解决方案就是向服务器发送 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。
在通过 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 控制器中试过这个,但它只在初始页面加载时执行:
我可能是错的,但据我了解你想做的是:
- 向服务器发送数据(到
https://10.0.0.25:8001/checkout/...
) - 在服务器上做一些事情并给出响应(
res.send
等) - 处理客户端的响应
对吗?
要做到这一点,最简单的解决方案就是向服务器发送 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。