异步付款时如何防止购物车被更改

2024-04-27

下面的步骤说明了我在 Stripe 的 PaymentIntent 流程中遇到的问题,但是您可以对我研究过的其他支付网关提出类似的方法,其中成功支付的最终通知是从支付网关异步发送到商家站点的。

  1. 客户将 10 件商品 A 添加到购物车,现在总计 100 美元
  2. 客户进入结账页面。服务器创建总计 100 美元的 Stripe PaymentIntent,并将“client_secret”发送到浏览器。
  3. 客户的浏览器显示结账页面,显示总计 100 美元,以及 Stripe 的付款表格。
  4. 客户打开一个新选项卡,并将 10 个商品 B 添加到购物车中,现在总计 200 美元。
  5. 客户返回结账选项卡,并通过 Stripe 完成 100 美元付款(该网站无法阻止这种情况发生 - 这一切都发生在客户端)
  6. Stripe 通过 Webhook 异步通知网站我们已收到 100 美元的付款。我们现在干什么?

付款总额不再与购物车总额相符。我们必须退还货款并取消订单吗?我们如何通知客户?我们可能已经向他们展示了“订单完成 - 谢谢”页面,因为在异步通知到达之前我们无法知道总数是错误的。客户可能已经离开我们的网站。我们如何处理他们的购物车?

-- 所有这一切的一些进一步背景:

每当我的客户想要在他们的网站上进行在线支付时,我总是会求助于 Stripe,因为 Stripe 的同步模型使我的代码变得又好又简单。客户输入他们的银行卡详细信息,Stripe 将返回代表付款的令牌,最后我的服务器端代码将检查所有详细信息是否正确,使用 Stripe 的 API 收款,并向客户返回一条“谢谢”消息。浏览器。

但现在 Stripe 似乎正在从这种模型转向异步模型(PaymentIntents),在这种模型中,您的服务器应该在履行订单之前侦听已完成付款的通知。用 Stripe 的术语来说,我们应该设置“webhooks”来监听“ payment_intent.succeeded”事件。

我过去使用过的所有其他支付网关也都有异步模型,从某种意义上说,您的网络服务器必须等待网关的某种回调通知我们付款,然后我们才能安全地开始处理订单。 PayPal 称之为“即时付款通知”,Worldpay 称之为“Order Webhooks”,Adflex 称之为“Server2ServerNotification”...等等。

我正在努力的地方是试图应对在结账开始和收到付款通知之间可能发生的事情。鉴于这些支付网关都使用这些异步模型,必须有一个简单的解决方案来解决这个(和类似的)问题,但我真的陷入困境 - 任何建议将不胜感激。


我认为您在这里缺少的要点是 PaymentIntent 金额是在服务器端设置的。这意味着当您的客户打开新选项卡并将更多商品添加到购物车时,您应该更新服务器上的 PaymentIntent https://stripe.com/docs/api/payment_intents/update以反映新的金额。然后,当他们切换回另一个选项卡并完成付款时,您的 PaymentIntent 中应该会反映总金额。

您的客户可能仍然会看到结账流程中的金额与实际收取的金额不同,在这种情况下,我建议您考虑实施网络套接字 https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API确保他们始终看到购物车中的总金额。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步付款时如何防止购物车被更改 的相关文章

  • 成功购买后如何阻止 Stripe 覆盖客户端的会话 cookie

    环境 快速 快速会话 Stripe 在下面的简化示例中 当用户请求主页时express session为用户分配一个会话 cookie 刷新页面会保留与访问成功或失败路由相同的会话 ID 单击升级按钮会将客户端带到 Stripe 购物车屏幕
  • 类型错误:stripe.redirectToCheckout 不是 nuxt.js 中的函数

    我正在尝试集成条纹支付网关 我有一个用于前端的 nuxt js 和一个用于后端的 adonis js 我从前端调用 api 到后端来创建checkoutSession并返回sessionID 我能够创造checkoutSession并返回s
  • 购物车 $_SESSION 问题

    我正在开发一个基本的购物车 但是 SESSION 变量似乎未正确存储或访问 例如 如果您前往它将显示项目名称 但是在没有任何 GET 变量的情况下刷新 cart php 时 它不会返回任何内容 我究竟做错了什么
  • Chrome 如何检测信用卡字段?

    在某些表单中 Chrome 自动填充会提示信用卡自动填充 编辑 添加屏幕截图 这与浏览器自动完成不同 您之前不必以相同的形式输入该值 我应该如何编写 HTML 表单 以便浏览器将其检测为信用卡字段并触发此行为 与 Stripe 表单一起使用
  • magento:从前端添加产品

    任何人都可以帮助我了解如何从前端添加具有 Magento 中产品的大部分属性的产品吗 提前致谢 product Mage getModel catalog product product new Mage Catalog Model Pro
  • Stripe - 定期付款中包含的附加发票项目

    我在订阅中添加发票项目时遇到问题 目前我的头撞在墙上 我已经在 stripe 上创建了一个发票项目 并且我希望将发票项目包含在定期付款中 这是我的代码 它在第一张发票上添加发票项目 但不在下一张发票上添加发票项目 new customer
  • 如何在Opencart中添加子选项?

    我使用的是最新的3 0 2 0版本的opencart 对于选项 我想添加子选项 我也想像选项一样对子选项进行定价 从 2009 年及更早的时间起 有很多关于 opencart 的依赖选项的讨论 但它从未出现在核心版本中 为什么大家都说实现依
  • 在 woocommerce 结帐页面自定义字段中添加日期

    我正在尝试在 woocommerce 结帐页面中添加自定义选择选项 它正在添加额外的字段 但我想在选择选项的值中添加日期 有什么解决办法吗 这是我在主题 function php 中添加的代码 today new DateTime tomo
  • didCreatePaymentResult stripeID 是一个card_ token,似乎无法保存给客户

    我有一个 swift iOS 应用程序 它要求用户提供应用程序中付款和未来付款的付款详细信息 它使用带有 Apple Pay 的 stripe SDK 并且似乎都已正确设置 我有以下方法 func paymentContext paymen
  • Stripe Checkout Webhook 未传递客户电子邮件?

    我在测试模式下使用 Stripe 的 Checkout 我试图在 Stripe 中获取客户的 ID 以及他们在结账时提供的电子邮件来更新我的数据库 我为 checkout session completed 设置了一个 webhook 如果
  • Stripe 订阅取消和重新激活模型的最佳实践

    我正在开发一个应用程序 该应用程序有 Stripe 的每月订阅计划 我正在创建一个客户然后订阅供用户订阅 这对我来说效果很好 但我还没有弄清楚如何使用 Stripe 订阅创建取消流程 我使用了取消订阅按钮stripe subscriptio
  • 如何在 Vue.js 方法中使用外部 JavaScript 对象

    我正在尝试让 Stripe 与我的 Vue js 2 应用程序一起工作 出于 PCI DSS 原因 Stripe 要求其 Javascript总是从加载js stripe com https stripe com docs web setu
  • 出口交易需要客户名称和地址 - Stripe 错误

    我正在使用 stripe SDK 创建客户并使用 API 向客户收费 但出现错误 致命错误 未捕获 状态 400 请求 req ZyqUtykjUcOqrU 根据印度法规 出口交易需要客户名称和地址 更多信息请参见 https stripe
  • 您可以用 PHP 将送货地址传递给 Stripe Checkout 吗?

    我在用着Stripe 结帐 API https stripe com docs checkout integration builder指导网站用户付款 有没有办法将送货地址传递到托管结帐页面 以便从推荐人而不是 Stripe 本身收集该地
  • stripe 登录 zsh:未找到命令:stripe

    我正在跟进条纹文档 https stripe com docs stripe cli install当我去stripe login在步骤 2 中 我收到以下错误 zsh 找不到命令 条带 我已经执行了步骤 1 安装 stripe CLI 为
  • django-cart 还是 Satchmo?

    我正在寻找实现一个非常基本的购物车 Satchmo http www satchmoproject com 似乎安装了一个lot我不需要的应用程序和额外的东西 我听别人提到过Django 购物车 http code google com p
  • 自动 PayPal 付款

    我正在寻找一种方法来自动将钱从我的 PayPal 帐户发送到其他 PayPal 帐户 通过 PHP 这可能吗 就像是 recievers array email protected cdn cgi l email protection em
  • 适用于任何支付网关的购物车 API? (至少需要支付宝)

    我正在尝试找到一个基于 java 的 API 它至少包含处理信用卡交易或通过 PayPal 购买的详细信息 以及其他网关以 IPN 方式作为附加功能 即不需要产品 只需发票金额 作为一点简化 我认为我应该能够执行类似以下伪代码的操作 sho
  • WooCommerce - 在哪里可以编辑由挂钩生成的 HTML?

    我是 WooCommerce 新手 无论如何 我想创建自己的主题 所以我遵循指南并将核心模板文件复制到 mywordpresstheme woocommerce 一切都很好 我正在编辑模板 效果很好 然而 WooCommerce 中的挂钩和
  • Stripe 订阅 Webhook 缺少元数据和 client_reference_id

    我在将 stripe webhook 链接到客户时遇到问题 因为我通常使用 client reference id 或元数据字段 但是订阅 webhook 似乎没有这些字段 例如事件结帐 会话 完成确实包含 client reference

随机推荐