首页 > 解决方案 > 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' }

标签: node.jsmongodbstripe-payments

解决方案


现在你正在使用catchon Promise.all。您可以改为从stripe.refunds.create自己的Promisecatch中获取可以访问的每个 Promise e,如下所示:

return(
  stripe.refunds.create({
    ...
  }).catch(err => {
    console.log(e);
  })
)

推荐阅读