【问题标题】:Amazon Pay: Complete Checkout Session is successful but not confirming transactionAmazon Pay:完成结帐会话成功但未确认交易
【发布时间】:2023-04-11 10:42:02
【问题描述】:

对于我的 Amazon Pay 与 NodeJs 开发工具包的集成,在我到达 completeCheckoutSession 之前,一切似乎都运行良好。当我调用 completeCheckoutSession 时,调用成功并且似乎可以正常工作,但我从未收到确认电子邮件,说明订单已处理并且在卖家中心查看“付款状态”仍标记为“打开”。此外,我在 24 小时后收到一封电子邮件,指出订单已被取消。

这是我使用 NodeJs SDK 调用 completeCheckoutSession 的代码:

const testPayClient = new Client.WebStoreClient(config)
const checkoutSessionId = requestBody.checkoutSessionId
const purchasePrice = requestBody.productInfo.price

const payload = {
    chargeAmount: {
        amount: `${purchasePrice}`,
        currencyCode: 'USD'
    }
}
    
let apiResponse = await testPayClient.completeCheckoutSession(checkoutSessionId, payload)

price 和 checkoutSessionId 均来自前端,我已验证 checkoutSessionId 与传递给 getCheckoutSession 和 updateCheckoutSession 的相同。

这是我控制台日志 apiResponse.data 时返回的数据对象。为简洁起见,我删除了空值。此外,如果我要记录整个“apiResponse”对象,我收到的状态码是 200。

{
    checkoutSessionId: "not sure I should expose this, but it's here.",
    statusDetails: {
        state: 'Completed',
        lastUpdatedTimestamp: '20211124T141939Z'
    },
    chargePermissionId: 'S01-9642704-9639513',
    creationTimestamp: '20211124T141931Z',
}

关于“状态:‘已完成’”,docs 请注意以下几点:

如果事务处理成功,在您调用 Complete Checkout Session 后,Checkout Session 会进入 Completed 状态。

我是否在此调用中遗漏了什么,或者我的实现没有将 PaymentStatus 从“Open”移动到“Succeeded”这样的东西?我还想指出,我是在沙盒模式下进行的。

提前感谢您提供的任何指导。

【问题讨论】:

  • 您在创建结帐会话时为paymentIntent 设置了什么?看起来它不是'Authorize'甚至'AuthorizeWithCapture'。此外,对返回的 chargePermission 的 GET 调用会返回什么?这可能对这件事很有帮助。
  • 顺便说一句:恭喜您在过去三周的项目中取得进展????
  • @marcus.kreusch 我将 paymentIntent 设置为“确认”。我应该改用 Authorize 还是 AuthorizeWithCapture ?谢谢!一切似乎都融合在一起了。
  • 将 paymentIntent 设置为“AuthorizeWithCapture”似乎可以解决问题。我会做一些测试来验证这个处理是否正确并用它来回答我的问题。感谢您的帮助!
  • 我添加了一个带有更多解释的答案。我很高兴,我们能够解决这个问题。

标签: node.js amazon-pay


【解决方案1】:

这个问题是关于结帐会话的paymentIntent。根据docs,它必须设置为以下值之一:

确认:创建收费权限以在以后授权和获取资金

授权:立即授权资金并在以后捕获

AuthorizeWithCapture:立即授权并获取资金

当设置为Confirm 时,您必须手动创建一个 Charge 以防止您当前遇到的到期。使用Confirm 的用例很少。事实上,直到现在我还没有在现实生活中见过。

Authorize 是合适的,如果您想最大限度地控制时间点以捕获数量。它还允许异步流程,通过让 Amazon Pay 在 24 小时内做出决定,增加了成功授权的机会。

AuthorizeWithCapture 是最简单和最安全的。它负责一切,包括捕获。如果结帐会话成功完成,您将始终获得完整的付款。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多