【问题标题】:Unable to deploy functions in firebase无法在 Firebase 中部署功能
【发布时间】:2021-03-27 22:35:15
【问题描述】:

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

安装了 razorpay 依赖项

我的 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 google-cloud-platform google-cloud-functions nuxt.js razorpay


【解决方案1】:

请注意,您需要将以下内容放入 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 的结帐模式,以接受用户的付款详细信息。
  • 在后端实现 Order API。
  • 获取授权付款。

请查看以下Medium tutorial 以获得更好的理解,并查看此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
    })
});

【讨论】:

  • 您是否导入了如下的cors? const cors = require('cors')({origin: true});
  • 是的,因为导入了 const cors = require('cors')({origin: true}); .你能帮我如何将cors添加到我的代码中吗?这是我的代码。
  • 您能分享一下它给您的关于 Cors 的错误吗?
  • payment:1 访问从原点 'localhost:3000' 在 'us-central1-my-project-name.cloudfunctions.net/createPayment' 获取已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否'访问-请求的资源上存在 Control-Allow-Origin 标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
  • 更新了下面的代码。再次出现同样的错误。 ------- 从源“localhost:3000”获取“us-central1-my-project-name.cloudfunctions.net/createPayment”的访问权限已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
【解决方案2】:
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' } })
    }
  })
})

【讨论】:

  • CORS错误终于通过将functions.https.onRequest改为functions.https.onCall解决了。
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多