无法在 firebase 中部署函数

Unable to deploy functions in firebase

我正在尝试将 Razorpay 集成到我的 nuxt 应用程序中。 为此,我使用 npm i razorpay

安装了 razorpay dependency

我的 index.js 文件以

开头
const functions = require('firebase-functions')

const Razorpay = require('razorpay')

const admin = require('firebase-admin')

const crypto = require('crypto')

但是在编写函数(基本的 helloWorld 函数)并部署它后,出现无法部署函数的错误。 但是当我在下面评论时,helloWorld 函数部署成功。

//const Razorpay = require('razorpay')

我再次取消注释上面的行,它仍然给我无法部署的错误。

版本信息

节点 v12.18.3

Firebase v8.16.2

我的依赖关系

"dependencies": {
    "@nuxtjs/axios": "^5.12.2",
    "@nuxtjs/pwa": "^3.0.2",
    "cookieparser": "^0.1.0",
    "core-js": "^3.6.5",
    "firebase": "^8.2.0",
    "js-cookie": "^2.2.1",
    "jwt-decode": "^3.1.2",
    "nuxt": "^2.14.6",
    "nuxt-buefy": "^0.4.3",
    "razorpay": "^2.0.6",
    "uuid": "^8.3.2",
    "vuexfire": "^3.2.5"
  },

请注意,您需要将以下内容放入 Firebase Cloud Function 中以集成 Razorpray:

const Razorpay = require("razorpay");
var key_id = "YOUR_RAZORPAY_KEY_ID";
var key_secret = "YOUR_RAZORPAY_KEY_SECRET";

var instance = new Razorpay({
  key_id: key_id,
  key_secret: key_secret
});

您需要按照以下步骤进行集成:

  • 注册 razorpay 并从 Razorpray
  • 获取您的 Key_Id 和 Key_Secret
  • 在前端集成 razorpay 的结帐模式以接受用户的付款详细信息。
  • 在后端执行订单 API。
  • 捕获授权付款。

请查看以下 Medium tutorial for better understanding and this GitHub Repository 代码示例。

********** 更新 **********

关于Cors错误,请确认以下内容:

  1. 导入 Cors
const cors = require('cors')({origin: true});

  1. 调用每个函数顶部的cors模块如下:
exports.createPayment = functions.https.onRequest(async (req, res) => {
    cors(req, res, () => {
        // your function body here - use the provided req and res from cors
    })
});
const functions = require('firebase-functions')
const Razorpay = require('razorpay')
const admin = require('firebase-admin')
const crypto = require('crypto')
const cors = require('cors')({ origin: true })
admin.initializeApp()


//Function to Create Payment
exports.createPayment = functions.https.onRequest(async (req, res) => {
  cors(req, res, () => {
    admin
      .firestore()
      .collection('payments')
      .add(req.body.data)
      .then((payment) => {
        var instance = new Razorpay({
          key_id: 'rzp_test_my_key',
          key_secret: 'my_secret_key',
        })

        var options = {
          amount: req.body.data.amount * 100,
          currency: 'INR',
          receipt: payment.id,
          payment_capture: 1,
        }
        instance.orders.create(options, function (err, order) {
          res.status(201).send({ data: order })
        })
      })
  })
})

// Function to Verify Payment

exports.verifyPayment = functions.https.onRequest(async (req, res) => {
  cors(req, res, () => {
    const order = req.body.data

    const text = order.razorpay_order_id + '|' + order.razorpay_payment_id
    var signature = crypto
      .createHmac('sha256', secret_key)
      .update(text)
      .digest('hex')

    if (signature === order.razorpay_signature) {
      res.status(201).send({ data: { message: 'Successfull Payment' } })
    } else {
      res.status(400).send({ data: { message: 'Signature mismatch' } })
    }
  })
})