未调用 Firebase 函数
Firebase functions not being invoked
我正在尝试使用 Firebase 在我的网络应用程序上集成 Stripe 支付。我已经从此处的存储库中克隆了代码:https://github.com/firebase/functions-samples/tree/master/stripe and have followed the documentation here: https://firebase.google.com/docs/use-cases/payments
通过阅读文档,我假设当客户通过 firebase 身份验证登录时,他们的详细信息将添加到 firestore 中的 stripe_customer 集合中。我意识到情况并非如此,并手动添加了一个用户来测试保存卡功能。然后我收到以下错误:“stripe.confirmCardSetup intent secret 的值无效:值应为 client_secret 字符串。您指定:undefined”
我有一个 firebase 的 blaze 计划并已配置。按照文档中的步骤,我认为这是可行的。对不起,这个问题太模糊了,但似乎在每个角落我都遇到了另一个问题。有什么非常明显的东西我错过了阻止这段代码工作吗?我正在尝试为朋友的生意实现这个作为一个帮助,并且我对 Firebase 感到非常困惑。我正在 Angularjs 编码。非常感谢对此的任何帮助!
这是创建客户的函数代码
exports.createStripeCustomer = functions.auth.user().onCreate(async (user) => {
const customer = await stripe.customers.create({ email: user.email });
const intent = await stripe.setupIntents.create({
customer: customer.id,
});
await admin.firestore().collection('stripe_customers').doc(user.uid).set({
customer_id: customer.id,
setup_secret: intent.client_secret,
});
return;
});
这是在控制器中调用的代码:
const firebaseUI = new firebaseui.auth.AuthUI(firebase.auth());
const firebaseUiConfig = {
callbacks: {
signInSuccessWithAuthResult: function (authResult, redirectUrl) {
// User successfully signed in.
// Return type determines whether we continue the redirect automatically
// or whether we leave that to developer to handle.
return true;
},
uiShown: () => {
document.getElementById('loader').style.display = 'none';
},
},
signInFlow: 'popup',
signInSuccessUrl: '/checkout.html',
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
firebase.auth.EmailAuthProvider.PROVIDER_ID,
],
credentialHelper: firebaseui.auth.CredentialHelper.NONE,
// Your terms of service url.
tosUrl: 'https://example.com/terms',
// Your privacy policy url.
privacyPolicyUrl: 'https://example.com/privacy',
};
firebase.auth().onAuthStateChanged((firebaseUser) => {
if (firebaseUser) {
currentUser = firebaseUser;
firebase
.firestore()
.collection('stripe_customers')
.doc(currentUser.uid)
.onSnapshot((snapshot) => {
if (snapshot.data()) {
customerData = snapshot.data();
startDataListeners();
document.getElementById('loader').style.display = 'none';
document.getElementById('content').style.display = 'block';
} else {
console.warn(
`No Stripe customer found in Firestore for user: ${currentUser.uid}`
);
}
});
} else {
document.getElementById('content').style.display = 'none';
firebaseUI.start('#firebaseui-auth-container', firebaseUiConfig);
}
});
您提供的错误(如下)意味着您配置中的密钥没有被提取到您的代码中。如果您在本地 运行 进行此设置,则每次更改 functions:config 值时都需要 运行 以下内容。
firebase functions:config:get > .runtimeconfig.json
查看 doc's 如何在本地 运行 您的函数:
错误
"Invalid value for stripe.confirmCardSetup intent secret: value should
be a client_secret string. You specified: undefined"
我正在尝试使用 Firebase 在我的网络应用程序上集成 Stripe 支付。我已经从此处的存储库中克隆了代码:https://github.com/firebase/functions-samples/tree/master/stripe and have followed the documentation here: https://firebase.google.com/docs/use-cases/payments
通过阅读文档,我假设当客户通过 firebase 身份验证登录时,他们的详细信息将添加到 firestore 中的 stripe_customer 集合中。我意识到情况并非如此,并手动添加了一个用户来测试保存卡功能。然后我收到以下错误:“stripe.confirmCardSetup intent secret 的值无效:值应为 client_secret 字符串。您指定:undefined”
我有一个 firebase 的 blaze 计划并已配置。按照文档中的步骤,我认为这是可行的。对不起,这个问题太模糊了,但似乎在每个角落我都遇到了另一个问题。有什么非常明显的东西我错过了阻止这段代码工作吗?我正在尝试为朋友的生意实现这个作为一个帮助,并且我对 Firebase 感到非常困惑。我正在 Angularjs 编码。非常感谢对此的任何帮助!
这是创建客户的函数代码
exports.createStripeCustomer = functions.auth.user().onCreate(async (user) => {
const customer = await stripe.customers.create({ email: user.email });
const intent = await stripe.setupIntents.create({
customer: customer.id,
});
await admin.firestore().collection('stripe_customers').doc(user.uid).set({
customer_id: customer.id,
setup_secret: intent.client_secret,
});
return;
});
这是在控制器中调用的代码:
const firebaseUI = new firebaseui.auth.AuthUI(firebase.auth());
const firebaseUiConfig = {
callbacks: {
signInSuccessWithAuthResult: function (authResult, redirectUrl) {
// User successfully signed in.
// Return type determines whether we continue the redirect automatically
// or whether we leave that to developer to handle.
return true;
},
uiShown: () => {
document.getElementById('loader').style.display = 'none';
},
},
signInFlow: 'popup',
signInSuccessUrl: '/checkout.html',
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
firebase.auth.EmailAuthProvider.PROVIDER_ID,
],
credentialHelper: firebaseui.auth.CredentialHelper.NONE,
// Your terms of service url.
tosUrl: 'https://example.com/terms',
// Your privacy policy url.
privacyPolicyUrl: 'https://example.com/privacy',
};
firebase.auth().onAuthStateChanged((firebaseUser) => {
if (firebaseUser) {
currentUser = firebaseUser;
firebase
.firestore()
.collection('stripe_customers')
.doc(currentUser.uid)
.onSnapshot((snapshot) => {
if (snapshot.data()) {
customerData = snapshot.data();
startDataListeners();
document.getElementById('loader').style.display = 'none';
document.getElementById('content').style.display = 'block';
} else {
console.warn(
`No Stripe customer found in Firestore for user: ${currentUser.uid}`
);
}
});
} else {
document.getElementById('content').style.display = 'none';
firebaseUI.start('#firebaseui-auth-container', firebaseUiConfig);
}
});
您提供的错误(如下)意味着您配置中的密钥没有被提取到您的代码中。如果您在本地 运行 进行此设置,则每次更改 functions:config 值时都需要 运行 以下内容。
firebase functions:config:get > .runtimeconfig.json
查看 doc's 如何在本地 运行 您的函数:
错误
"Invalid value for stripe.confirmCardSetup intent secret: value should be a client_secret string. You specified: undefined"