首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条带webhook失败- Webhook错误: 504

条带webhook失败- Webhook错误: 504
EN

Stack Overflow用户
提问于 2021-10-09 07:20:14
回答 1查看 69关注 0票数 1

条带webhook失败了,我认为是因为条带没有收到来自我的webhook api端点的“成功”响应。

错误是:

代码语言:javascript
复制
Test webhook error: 504

An error occurred with your deployment

FUNCTION_INVOCATION_TIMEOUT

我使用Nextjs及其在pages/ api /createOrder文件夹结构中的构建来创建api。这是我的createOrder webhook的样子:

代码语言:javascript
复制
import { buffer } from "micro"
const AWS = require("aws-sdk")

AWS.config.update({
  accessKeyId: process.env.MY_AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.MY_AWS_SECRET_ACCESS_KEY,
  region: process.env.MY_AWS_REGION,
  endpoint: process.env.MY_AWS_ENDPOINT,
})

// Establish Stripe connection
const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY)
const endpointSecret = process.env.STRIPE_CREATE_ORDER_SIGNING_SECRET

const createOrder = async session => {
  console.log("create order - session.id: ", session.id)
  console.log(
    "create order - session.metadata.userID: ",
    session.metadata.userID
  )
  console.log(
    "create order - session.amount_total / 100: ",
    session.amount_total / 100
  )

  const docClient = new AWS.DynamoDB.DocumentClient()
  let date = new Date()

  // create Order
  let orderParams = {
    TableName: process.env.ORDER_TABLE_NAME,
    Item: {
      id: session.id,
      userID: session.metadata.userID,
      amount: session.amount_total / 100,
      adID: session.metadata.adID,

      createdAt: date.toISOString(),
      updatedAt: date.toISOString(),
    },
  }
  docClient.put(orderParams, function (err, data) {
    if (err) {
      console.log("Order put err - " + JSON.stringify(err, null, 2))
    } else {
      console.log("Order put Success - " + JSON.stringify(data, null, 2))
    }
  })

  // create - TTL
  const ninetyDays = 1000 * 60 * 60 * 24 * 90
  const currTime = Date.now()
  const ttlSeconds = Math.ceil((ninetyDays + currTime) / 1000)

  // update Ad
  let adParams = {
    TableName: process.env.AD_TABLE_NAME,
    Key: { id: session.metadata.adID },
    UpdateExpression: "set paid = :paid, expdate = :expdate",
    ExpressionAttributeValues: {
      ":paid": true,
      ":expdate": ttlSeconds,
    },
    ReturnValues: "UPDATED_NEW",
  }
  docClient.update(adParams, function (err, data) {
    if (err) {
      console.log("UPDATE Ad err - " + JSON.stringify(err, null, 2))
    } else {
      console.log("UPDATE Ad Success - " + JSON.stringify(data, null, 2))
    }
  })
}

export default async (req, res) => {
  if (req.method === "POST") {
    const requestBuffer = await buffer(req)
    const payload = requestBuffer.toString()
    const sig = req.headers["stripe-signature"]

    let event

    // Verify that the EVENT posted came from stripe
    try {
      event = stripe.webhooks.constructEvent(payload, sig, endpointSecret)
    } catch (err) {
      console.log("ERROR", err.message)
      return res.status(400).send(`Webhook create Order error: ${err.message}`)
    }

    // Handle the checkout.session.completed event
    if (event.type === "checkout.session.completed") {
      const session = event.data.object

      // Fulfill update Ad -> paid = true and ttl - expdate
      return createOrder(session)
        .then(() => res.status(200))
        .catch(err =>
          res.status(400).send(`Create Order Error - ${err.message}`)
        )
    }
  }

  // Notify Stripe that req reached api
  res.status(200).json({ received: true })
}

export const config = {
  api: {
    bodyParser: false,
    externalResolver: true,
  },
}

我找到了几个解决方案,如何告诉Stripe接收到webhook调用,但它们都不起作用。现在我使用的是:

代码语言:javascript
复制
res.status(200).json({ received: true })

也许问题出在别的地方?我想指出的是,订单被创建了,广告也被更新了-所以webhook可以正常工作,只是它失败了。

EN

回答 1

Stack Overflow用户

发布于 2021-10-24 18:24:34

经过两个月的调试,我找到了一个解决方案。

我认为问题在于AWS似乎太慢了。我添加了setTimeout来通知条纹连接成功,现在它可以工作了!

代码语言:javascript
复制
setTimeout(() => {
    // 3. Notify Stripe that event recieved.
    res.json({ received: true })
}, 2000)

如果some1有更好的解决方案,请告诉我们:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69504577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档