Stripe 能否在确认付款调用(如果成功)和他们发送给我的 webhook 之间更改付款意向状态?
Can Stripe change the payment intent status between the confirm payment call, if successful, and the webhook they send me?
我有一个社交应用程序,我的客户将在其中使用信用卡(Visa、Master、Amex、Discover)进行单次购买 (credits/tokens/likes)。购买完成后,我在 Stripe 结果的“状态”中收到“成功”,然后客户将获得 10、20、50、100 等代币到他们的个人资料中,现在可以用于“喜欢”某人。
仅供参考 - 如果用户保存了一张卡并选择了该卡,则该 Stripe 卡号和客户号用于支付意图,否则我将收集该卡详细信息,并将其传递给“confirmpayment()”。
QUESTION - 一旦我调用 Stripe“confirmpayment()”客户端,并返回结果,显示状态(成功、失败、未完成等)是有可能在结果中收到“成功”状态,然后在稍后通过 Stripe 的 webhook 收到“成功”以外的其他状态?
仅供参考 - 我已经经历了几乎所有 test card 场景来测试这种情况,但它似乎不会发生?似乎付款在 confirmpayment() 调用中要么成功要么失败。我还通过从 Stripe 获取 paymentIntent 来仔细检查服务器端的状态结果。只是为了确保用户(客户端)没有在代码中更改它 (JS/Typescript)。
关注 - 客户完成购买,确认付款结果显示“成功”状态,此时他们的“代币”被添加到他们的个人资料中,然后他们继续使用它们向另一个用户发送“喜欢”。然后我得到 Stripe webhook 回来显示不同的状态“失败”或“不完整”。但此时,“代币”将被使用,基于“代币”金额的货币金额将从我的 Connect 账户中转移,原始购买的资金将被发送到预期接收者的 connect 账户。如果发生这种情况,我预见到要将所有这些都推翻是极其困难的,并且扭转它会让人非常头疼。
替代工作流程 - 我可以在服务器端创建一个处于待定状态的“支付”实体,并等到我收到 Stripe webhook,然后再向其中添加任何“令牌”用户 account/profile。这将确保没有出错的可能性,但它会让用户等到 webhook 进入,然后他们才会在他们的支付页面上看到“成功”状态,并且将无法使用该购买的任何“令牌”直到我得到 webhook。我想给他们一个更即时的体验。
如有任何帮助或建议,我们将不胜感激。
您在 Promise confirmCardPayment()
解决后得到的结果将与您在 webhook 事件中得到的状态相同,因此 succeeded
PaymentIntent 永远不会转换回 requires_payment_method
或 requires_action
,因为 succeeded
是生命周期的结束状态。
请记住,webhook 事件可能会乱序,因此从技术上讲,您可以获得 payment_intent.requires_action
after 您的 payment_intent.succeeded
事件(如果它们发生很快。
最好的办法是从 API(事件发生后)获取 PaymentIntent,以获得 PaymentIntent 的“真实”状态。
我有一个社交应用程序,我的客户将在其中使用信用卡(Visa、Master、Amex、Discover)进行单次购买 (credits/tokens/likes)。购买完成后,我在 Stripe 结果的“状态”中收到“成功”,然后客户将获得 10、20、50、100 等代币到他们的个人资料中,现在可以用于“喜欢”某人。
仅供参考 - 如果用户保存了一张卡并选择了该卡,则该 Stripe 卡号和客户号用于支付意图,否则我将收集该卡详细信息,并将其传递给“confirmpayment()”。
QUESTION - 一旦我调用 Stripe“confirmpayment()”客户端,并返回结果,显示状态(成功、失败、未完成等)是有可能在结果中收到“成功”状态,然后在稍后通过 Stripe 的 webhook 收到“成功”以外的其他状态?
仅供参考 - 我已经经历了几乎所有 test card 场景来测试这种情况,但它似乎不会发生?似乎付款在 confirmpayment() 调用中要么成功要么失败。我还通过从 Stripe 获取 paymentIntent 来仔细检查服务器端的状态结果。只是为了确保用户(客户端)没有在代码中更改它 (JS/Typescript)。
关注 - 客户完成购买,确认付款结果显示“成功”状态,此时他们的“代币”被添加到他们的个人资料中,然后他们继续使用它们向另一个用户发送“喜欢”。然后我得到 Stripe webhook 回来显示不同的状态“失败”或“不完整”。但此时,“代币”将被使用,基于“代币”金额的货币金额将从我的 Connect 账户中转移,原始购买的资金将被发送到预期接收者的 connect 账户。如果发生这种情况,我预见到要将所有这些都推翻是极其困难的,并且扭转它会让人非常头疼。
替代工作流程 - 我可以在服务器端创建一个处于待定状态的“支付”实体,并等到我收到 Stripe webhook,然后再向其中添加任何“令牌”用户 account/profile。这将确保没有出错的可能性,但它会让用户等到 webhook 进入,然后他们才会在他们的支付页面上看到“成功”状态,并且将无法使用该购买的任何“令牌”直到我得到 webhook。我想给他们一个更即时的体验。
如有任何帮助或建议,我们将不胜感激。
您在 Promise confirmCardPayment()
解决后得到的结果将与您在 webhook 事件中得到的状态相同,因此 succeeded
PaymentIntent 永远不会转换回 requires_payment_method
或 requires_action
,因为 succeeded
是生命周期的结束状态。
请记住,webhook 事件可能会乱序,因此从技术上讲,您可以获得 payment_intent.requires_action
after 您的 payment_intent.succeeded
事件(如果它们发生很快。
最好的办法是从 API(事件发生后)获取 PaymentIntent,以获得 PaymentIntent 的“真实”状态。