我正在尝试侦听一个条纹网络钩子调用,然后执行一些操作,如发送电子邮件。我的网站在Netlify上,我改编了一些我在tutorial中找到的代码:
这在本地有效,但当我将其作为Netlify函数(基本上是lambda)运行时就不起作用了。基本上,"client.getSpace..“中的那部分看起来根本不能运行。我怀疑这与在异步函数中使用这些.then承诺有关,但我不确定。
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}`,
};
}
};
发布于 2021-01-10 22:31:13
对于你和任何遇到这个问题的人来说,这都是值得的。我在Vercel上使用NextJS时也遇到了类似的问题。到目前为止,我使用async/await重写了.then语法,这个问题似乎已经解决了。我不是专家,但我想在这种情况下你应该从替换
client.getSpace(process.env.WEBSITE_CONTENTFUL_SPACE_ID)
.then(space => space.getEnvironment('master'))使用类似于
const send = await client.getSpace(process.env.WEBSITE_CONTENTFUL_SPACE_ID)
const getEnvironment = await space.getEnvironment('master')以此类推。我不确定您将如何重写其他所有内容,或者这是否会有帮助,但它让我回到了正轨。
https://stackoverflow.com/questions/61498727
复制相似问题