如何在AngularJS中处理来自PayPal In-Context的响应而不是NodeJS
在通过PayPal-rest-sdk检查使用PayPal In-Context后,我无法从服务器端NodeJS代码获得响应。
我有一个在HTML中定义的贝宝forms,并有目的地没有定义的行动。 我只定义了id和方法(get)。 在我的Angular代码中,我定义了单击PayPalbutton时的操作:
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代码中,成功签出后,而不是return res.end();
如果成功或res.sendStatus(400, 'bad paypal payment');
如果失败了,我想把这个状态转交给Angular,并在那里处理。
重申:我不想在NodeJS中定义后PayPal In-Context路由,我想在Angular中做。
我需要这样做,因为我正在使用Onsen UI ,并使用分隔符在页面之间导航。
有没有人成功做到这一点?
在尝试第一个答案之后更新
我曾尝试过,但尝试实施伊利亚天空的答案后,结果是贝宝在上下文签出无法正确执行。 该脚本正确运行(由terminal输出确定),但In-Context窗口加载“?” 作为参数,然后立即closures自己。 这里是我如何更新我的代码截图。 注释掉的代码是我能够成功结帐时所拥有的,但无法正确redirect:
我认为这是PayPal的问题,我不知道如何解决。
这就是为什么我想知道是否可以在Angular中侦听redirect,然后在确定某个redirect时加载另一个页面。
我在我的Angular控制器中尝试了这个,但它只在加载初始页面时才执行:
我可能是错的,但从我的理解你想要做的是:
- 发送数据到服务器(到
https://10.0.0.25:8001/checkout/...
) - 在服务器上做一些事情,并给予回应(
res.send
等) - 在客户端处理响应
对?
要做到这一点,最简单的解决scheme就是发送一个ajax请求到服务器,然后处理响应。
这意味着不用改变action属性就可以直接通过js发出请求。 使用$http
服务完成的angular度。
$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>
我鼓励大家查看这个链接 。
其中一位PayPal开发者发布了一个样本Kraken with PayPal In-Context Checkout的Angular示例。