Gra*_*ace 0 node.js stripe-payments firebase reactjs google-cloud-functions
我尝试替换:
const stripe =const stripe=require("stripe")('sk_test_51KMbN...');
Run Code Online (Sandbox Code Playgroud)
到
const stripe = require("stripe")(functions.config().stripe.secret);
Run Code Online (Sandbox Code Playgroud)
但是当我运行 firebase 模拟器时,我遇到了一个错误:
错误:无法从源加载函数定义:无法从函数源生成清单:TypeError:无法读取未定义的属性(读取“秘密”)
我已经将其设置如下:
firebase functions:config:set stripe.secret=< SECRET KEY>
Run Code Online (Sandbox Code Playgroud)
我可以通过运行看到它:
firebase functions:config:get
Run Code Online (Sandbox Code Playgroud)
我在functions/index.js中的代码是
const functions = require("firebase-functions");
const express=require("express");
const cors=require("cors");
require('dotenv').config({ path: './.env' });
//API
const stripe = require("stripe")(functions.config().stripe.secret);
//App config
const app=express();
var admin = require("firebase-admin");
var serviceAccount = require("./serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
//middlewares
app.use(cors({origin: true}));
app.use(express.json());
async function createCheckoutSession(req, res) {
const domainUrl = process.env.WEB_APP_URL;
const { line_items, customer_email } = req.body;
if (!line_items || !customer_email) {
return res.status(400).json({ error: 'missing required session parameters' });
}
let session;
try {
session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
mode: 'payment',
line_items,
customer_email,
success_url: `${domainUrl}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${domainUrl}/canceled`,
shipping_address_collection: { allowed_countries: ['GB', 'US'] }
});
res.status(200).json({ sessionId: session.id, });
} catch (error) {
console.log(error);
res.status(400).json({ error: 'an error occured, unable to create session'});
}}
app.get('/',(req, res)=>res.send('Hello World!'));
app.post('/create-checkout-session', createCheckoutSession);
exports.api=functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
当我定义时代码没有问题:
const stripe =const stripe=require("stripe")('sk_test_51KMbNcJ....');
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它无法读取未定义的“functions.config().stripe.secret”的属性
如果像我一样,您在尝试在本地运行函数时遇到此错误,那么这是因为functions.config()仅在Cloud Functions运行时中可用。
如果您尝试在部署之前测试函数,请参阅以下文档链接,了解如何执行此操作:在本地运行函数。具体来说,这部分很有趣:
如果您使用自定义函数配置变量,请在运行 firebaseserve 之前在项目的函数目录中运行以下命令。
firebase functions:config:get > .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用的是 Windows PowerShell,请将上述命令替换为:
firebase functions:config:get | ac .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |