node.js - Stripe - 退款失败时访问退款对象
问题描述
我正在尝试对 Stripe 中退款失败的情况进行编码。
我想在我的数据库中记录退款失败。
我正在尝试在 .catch() 中执行此操作
但是,因为退款是在承诺中创建的,所以我无权访问 mongodb 文档 ID。(e 在捕获中未被识别)。
我必须使用承诺,因为发生了不止一次退款。
我已将 mongodb 文档 ID 保存在条带退款对象的元数据中。当退款失败时,我如何从 .catch 访问它?
let RefundPromises = refundRequests.map( (e, i) => {
return(
stripe.refunds.create({
amount: e.refundedPrice * 100,
payment_intent: e.paymentIntentID,
refund_application_fee: false,
metadata: {ticketID: e._id}
},{
stripe_account: seller.stripeAccountID //sellers stripe Account ID
})
)
})
Promise.all(RefundPromises).then(........).catch(err => {..........})
这是退款失败时的错误控制台日志
refundpromsies err { Error: No such paymentintent: pi_1G3TFtCFzSpFw85fXqfSqhqg
at Function.generate (/Users/colmfahey/Ticket Project/Backend/Tickets-v2-Backend/node_modules/stripe/lib/Error.js:52:16)
at IncomingMessage.res.once (/Users/colmfahey/Ticket Project/Backend/Tickets-v2-Backend/node_modules/stripe/lib/StripeResource.js:168:39)
at Object.onceWrapper (events.js:286:20)
at IncomingMessage.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
raw:
{ code: 'resource_missing',
doc_url: 'https://stripe.com/docs/error-codes/resource-missing',
message: 'No such paymentintent: pi_1G3TFtCFzSpFw85fXqfSqhqg',
param: 'id',
type: 'invalid_request_error',
headers:
{ server: 'nginx',
date: 'Wed, 22 Jan 2020 12:41:46 GMT',
'content-type': 'application/json',
'content-length': '248',
connection: 'keep-alive',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET, POST, HEAD, OPTIONS, DELETE',
'access-control-allow-origin': '*',
'access-control-expose-headers':
'Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required',
'access-control-max-age': '300',
'cache-control': 'no-cache, no-store',
'request-id': 'req_onxSN8hcBOhC3c',
'stripe-account': 'acct_1FJYzZLkWPLevtVY',
'stripe-version': '2018-05-21',
'strict-transport-security': 'max-age=31556926; includeSubDomains; preload' },
statusCode: 404,
requestId: 'req_onxSN8hcBOhC3c' },
rawType: 'invalid_request_error',
code: 'resource_missing',
param: 'id',
detail: undefined,
headers:
{ server: 'nginx',
date: 'Wed, 22 Jan 2020 12:41:46 GMT',
'content-type': 'application/json',
'content-length': '248',
connection: 'keep-alive',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET, POST, HEAD, OPTIONS, DELETE',
'access-control-allow-origin': '*',
'access-control-expose-headers':
'Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required',
'access-control-max-age': '300',
'cache-control': 'no-cache, no-store',
'request-id': 'req_onxSN8hcBOhC3c',
'stripe-account': 'acct_1FJYzZLkWPLevtVY',
'stripe-version': '2018-05-21',
'strict-transport-security': 'max-age=31556926; includeSubDomains; preload' },
requestId: 'req_onxSN8hcBOhC3c',
statusCode: 404,
charge: undefined,
decline_code: undefined,
payment_intent: undefined,
payment_method: undefined,
setup_intent: undefined,
source: undefined,
type: 'StripeInvalidRequestError' }
解决方案
现在你正在使用catch
on Promise.all
。您可以改为从stripe.refunds.create
自己的Promisecatch
中获取可以访问的每个 Promise e
,如下所示:
return(
stripe.refunds.create({
...
}).catch(err => {
console.log(e);
})
)
推荐阅读
- python - 检查是否已发送电子邮件并打开 .exe 的 Python 脚本
- crash - 致命错误:找不到“breakpad-main/src/client/linux/handler/minidump_descriptor.h”文件
- visual-studio-code - 使用 VS 代码命令行界面 (CLI) 打开 Raspberry Pi 网络附加存储 (NAS) 上的文件夹时权限被拒绝
- r - 使用 Rvest 搜索 Google 新闻获取关键字
- python - 对于 REST API,我可以使用 flask-login 提供的身份验证机制,还是必须明确使用基于令牌的身份验证,如 JWT?
- python - NoneType 对象不可调用(制作词法分析器)
- javascript - 有没有办法为我的命令添加全局冷却时间,这样当一个用户使用该命令时,所有用户都必须等待特定时间?
- ios - 测试飞行中的 IOS 应用程序崩溃(delphi10.4)
- c++ - C++ 升压系统::error_code 语言
- php - 无法使用 PHP 重命名文件