无法在 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错误,请确认以下内容:
- 导入 Cors
const cors = require('cors')({origin: true});
- 调用每个函数顶部的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' } })
}
})
})
我正在尝试将 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错误,请确认以下内容:
- 导入 Cors
const cors = require('cors')({origin: true});
- 调用每个函数顶部的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' } })
}
})
})