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

How to receive POST request in an AngularJS page?

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

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

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

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

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

  1. ngRoute 无法处理通过 POST 访问的 URLs,如果你在 index.html 上重写,你只是发布到 index.html 不是你的路线,当你配置了 /booking-success 并且你 POST 通过 cURL 在那个 url 你实际上发布到 index.html. angular 中的路由只是 "virtual" 不真实。像 cURL 或任何其他 HTTP 客户端这样的系统无法看到它,因此它们正在发布到 index.html.

  2. 从不处理来自 angular 内部 payment/booking/any 网关的回调 URLs。 Angular 是危险的,因为你必须确保回调过程将被执行。 Angular 不是容错的,如果有任何 javascript 错误,你的 angular 调用中的任何错误都会丢失所有回调数据,你真的完蛋了。

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

  1. 只有 angular 可以处理的部分是 redirect_url,通常 URL 在代理方成功 payment/action 后重定向用户。但与此同时,回调 URL 仍会在您的应用程序的较低级别上调用。重定向 URL 是通过 GET 在浏览器重定向中调用的,因此用户会正常看到它。

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