Stripe - доступ к объекту возврата при сбое возврата - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь закодировать, когда возврат денег в Stripe завершился неудачей.

Я хочу записать в своей базе данных, что возврат не удался.

Я пытаюсь сделать это в .catch ()

Однако, поскольку возмещение создается в обещании, у меня нет доступа к идентификатору документа mongodb. (e не распознается в улове).

Я должен использовать обещание, потому что происходит более одного возврата.

Я сохранил идентификатор документа mongodb в метаданных возврата с полосы объект. Как я могу получить к нему доступ из .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' }

1 Ответ

0 голосов
/ 22 января 2020

Прямо сейчас вы используете catch на Promise.all. Вместо этого вы можете дать каждому Promise от stripe.refunds.create свой собственный catch, который будет иметь доступ к e, например:

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