繁体   English   中英

如何在AngularJS页面中接收POST请求?

[英]How to receive POST request in an AngularJS page?

我们制作了一个AngularJS应用程序,用户打开一个URL(xyz.com/booking)填写表格,然后选择一些商品进行购买。

之后,用户点击“购买”按钮,离开支付网关站点的站点。 成功付款后,Payment Gateway通过在回拨URL(xyz.com/booking-success)上发送POST请求来回送用户。

现在问题是我为该回调URL配置的相应Angular页面没有打开。 我在RouteProvider中配置了xyz.com/booking-success页面,但这似乎没有用。

但是,如果我直接通过浏览器打开页面xyz.com/booking-success,它将被打开。

如何处理这种情况? 任何帮助将不胜感激。

  1. ngRoute无法处理通过POST访问的URL,如果你在index.html上重写,你只是发布到index.html而不是你的路由,当你配置/预订成功并且你通过那个网址发布时,它不起作用cURL您实际上是发布到index.html。 角度路由只是“虚拟”而不是真实的。 像cURL或任何其他HTTP客户端这样的系统无法看到它,因此它们会发布到index.html。

  2. 永远不要处理来自付款/预订/角度内任何网关的回调网址。 Angular很危险,因为您必须确保将执行回调过程。 Angular不是容错的,如果有任何javascript错误,你的角度调用中的任何错误都会丢失所有的回调数据,而你实际上是搞砸了。

回调必须是REST API的一部分,并且必须实现以返回HTTP状态代码200,否则在任何其他HTTP代码的情况下,网关应该知道它们必须重试调用。 (例如,skrill.com在没有HTTP 200代码的情况下重复10次回调)。 实际上,AngularJS每次都会响应200,因为您的Web服务器将提供index.html,它不关心javascript代码中发生了什么。

  1. 只有1个可以通过angular处理的部分是redirect_url ,通常是用户在代理端成功付款/操作后重定向的URL。 但与此同时,仍然会在应用程序的较低级别调用回调URL。 重定向URL通过浏览器重定向内的GET调用,因此用户将正常看到它。

每个“普通”网关都有callback_url (您的API的低级别通知,操作成功, redirect_url ,重定向回您的网站xyz.com/booking-success)。 但他们应该分开。 如果您的网关没有重定向,则您无法选择,只能在新窗口中打开整个预订。 并在调用回调后以某种方式通知您的前端。 这可以通过间隔轮询来完成。 例如,10秒,它将检索您将在回调代码中设置的booking_id实际状态(列is_processed (true|false) 。当状态从false更改为true时,您将通知您的前端(重定向用户或show popup)您还可以实现socket.io库,您可以处理轮询,并且在调用回调URL时您的通知将立即生效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM