Amazon Pay:完成结账会话成功但未确认交易
Amazon Pay: Complete Checkout Session is successful but not confirming transaction
对于我的 Amazon Pay 与 NodeJs SDK 的集成,在我完成 CheckoutSession 之前一切似乎都运行良好。当我调用 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',
}
关于“状态:'Completed'”,docs 注意以下几点:
The Checkout Session moves to the Completed state after you call Complete Checkout Session if transaction processing was successful.
关于此调用我是否遗漏了什么或做错了什么我的实现没有将 PaymentStatus 从“打开”移动到类似于“成功”的东西?我还想指出,我是在沙盒模式下完成这一切的。
提前感谢您提供的任何指导。
此问题与结帐会话的 paymentIntent
有关。根据 docs,它必须设置为以下值之一:
确认:创建一个Charge Permission以便稍后授权和获取资金
授权:立即授权资金,稍后获取
AuthorizeWithCapture:立即授权并获取资金
当设置为 Confirm
时,您必须手动创建一个 Charge 以防止您当前遇到的过期。使用 Confirm
的用例很少。其实到现在为止我还没有在现实生活中见过。
Authorize
是合适的,如果你想最大程度地控制时间点的捕获量。它还允许异步流程,通过给 Amazon Pay 最多 24 小时的决定时间来增加成功授权的机会。
AuthorizeWithCapture
是最简单最安全的。它会处理包括捕获在内的所有事情。如果结帐会话成功完成,您将始终获得完整的付款。
对于我的 Amazon Pay 与 NodeJs SDK 的集成,在我完成 CheckoutSession 之前一切似乎都运行良好。当我调用 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',
}
关于“状态:'Completed'”,docs 注意以下几点:
The Checkout Session moves to the Completed state after you call Complete Checkout Session if transaction processing was successful.
关于此调用我是否遗漏了什么或做错了什么我的实现没有将 PaymentStatus 从“打开”移动到类似于“成功”的东西?我还想指出,我是在沙盒模式下完成这一切的。
提前感谢您提供的任何指导。
此问题与结帐会话的 paymentIntent
有关。根据 docs,它必须设置为以下值之一:
确认:创建一个Charge Permission以便稍后授权和获取资金
授权:立即授权资金,稍后获取
AuthorizeWithCapture:立即授权并获取资金
当设置为 Confirm
时,您必须手动创建一个 Charge 以防止您当前遇到的过期。使用 Confirm
的用例很少。其实到现在为止我还没有在现实生活中见过。
Authorize
是合适的,如果你想最大程度地控制时间点的捕获量。它还允许异步流程,通过给 Amazon Pay 最多 24 小时的决定时间来增加成功授权的机会。
AuthorizeWithCapture
是最简单最安全的。它会处理包括捕获在内的所有事情。如果结帐会话成功完成,您将始终获得完整的付款。