Использование обещаний в функции asyn c - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь прослушать звонок от Stripe, а затем выполнить некоторые действия, такие как отправка электронного письма. Мой сайт находится на Netlify, и я адаптировал некоторый код, который я нашел в учебнике :

Это работает локально, но не тогда, когда я запускаю его как функцию Netlify (в основном лямбда). По сути, часть из client.getSpace .., похоже, не работает вообще. Я подозреваю, что это как-то связано с использованием этих обещаний .then в функции asyn c, но я не уверен.

require('dotenv').config();
     const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
    
     const contentful = require('contentful-management');
     const client = contentful.createClient({
      accessToken: 
    process.env.CONTENTFUL_CONTENT_MANAGEMENT_ACCESS_TOKEN
    });
    
    var postmark = require("postmark");
    var serverToken = process.env.POSTMARK_SERVER_TOKEN;
    var postmark_client = new postmark.ServerClient(serverToken);
    
    exports.handler = async ({ body, headers }) => {
    try {
      const stripeEvent = stripe.webhooks.constructEvent(
        body,
        headers['stripe-signature'],
        process.env.STRIPE_WEBHOOK_SECRET
      );
    
      if (stripeEvent.type === 'checkout.session.completed') {
      	console.log('confirm checkout session completed');
        const eventObject = stripeEvent.data.object;
        const entryId = eventObject.client_reference_id;
        let email = "";
        let secret = "";
    
      client.getSpace(process.env.WEBSITE_CONTENTFUL_SPACE_ID)
      	.then(space => space.getEnvironment('master'))
          .then(environment => environment.getEntry(entryId))
          .then(entry => {
          	entry.fields.paymentStatus['en-GB'] = 'Paid';
          	email = entry.fields.email['en-GB'];
          	return entry.update();
          })
          .then(entry => entry.publish())
      	.then(entry => postmark_client.sendEmailWithTemplate({
              "From": "x@test.com",
              "To": email,
              "TemplateId": 12345678,
              "TemplateModel": {
                  "abc": "xyz"
               }
            }))
          .catch(console.error)
    
      }
    
      return {
        statusCode: 200,
        body: JSON.stringify({ received: true }),
      };
      } catch (err) {
      console.log(`Stripe webhook failed with ${err}`);
    
      return {
        statusCode: 400,
        body: `Webhook Error: ${err.message}`,
      };
    }
    };
...