我们制作了一个 AngularJS 应用程序,用户打开一个 URL (xyz.com/booking) 填写表格,然后选择一些要购买的商品。
之后,用户单击“购买”按钮并离开该站点前往支付网关站点。付款成功后,支付网关通过在回调 URL (xyz.com/booking-success) 上发送 POST 请求来发回用户。
现在的问题是我为该回调 URL 配置的相应 Angular 页面未打开。我在 RouteProvider 中配置了 xyz.com/booking-success 页面,但这似乎不起作用。
但是,如果我直接通过浏览器打开页面 xyz.com/booking-success,它就会打开。
如何处理这种情况?任何帮助将不胜感激。
ngRoute
无法处理通过 POST 访问的 URL,如果您重写了 index.html,那么您只是发布到 index.html 而不是您的路由,当您配置了 /booking-success 并通过 cURL 在该 url 上发布时,它不起作用您实际上是在发布到index.html。角度路由只是“虚拟”而不是真实的。像 cURL 或任何其他 HTTP 客户端这样的系统无法看到它,因此它们将发布到 index.html。
切勿处理来自 Angular 内的付款/预订/任何网关的回调 URL。 Angular 是危险的,因为你必须确保回调过程将被执行。 Angular 不是容错的,如果出现任何 javascript 错误,或者 Angular 调用中的任何错误,您将丢失所有回调数据,并且您实际上就完蛋了。
回调必须是 REST API 的一部分,并且必须实现为返回 HTTP 状态代码 200,否则在任何其他 HTTP 代码的情况下,网关应该知道它们必须重试调用。 (例如,在没有 HTTP 200 代码的情况下,skrill.com 会重复回调 10 次)。实际上,AngularJS 每次都会响应 200,因为你的 Web 服务器将提供 index.html,它并不关心 javascript 代码内部发生了什么。
- 只有 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 时,您将通知您的前端(重定向用户或显示弹出窗口)。您还可以实现 socket.io 库,您可以处理轮询,并且当调用回调 URL 时您的通知将立即发出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)