Nick: fix auto charge failing when payment is through Link

This commit is contained in:
Nicolas 2024-10-26 03:59:15 -03:00
parent 20e5348e9a
commit 801f0f773e
2 changed files with 19 additions and 5 deletions

View File

@ -113,15 +113,24 @@ export async function autoCharge(
// Reset ACUC cache to reflect the new credit balance // Reset ACUC cache to reflect the new credit balance
const cacheKeyACUC = `acuc_${chunk.api_key}`; const cacheKeyACUC = `acuc_${chunk.api_key}`;
await deleteKey(cacheKeyACUC); await deleteKey(cacheKeyACUC);
if (process.env.SLACK_ADMIN_WEBHOOK_URL ) {
if (process.env.SLACK_ADMIN_WEBHOOK_URL) {
const webhookCooldownKey = `webhook_cooldown_${chunk.team_id}`;
const isInCooldown = await getValue(webhookCooldownKey);
if (!isInCooldown) {
sendSlackWebhook( sendSlackWebhook(
`Auto-recharge successful: Team ${chunk.team_id}. ${AUTO_RECHARGE_CREDITS} credits added. Payment status: ${paymentStatus.return_status}. User was notified via email.`, `Auto-recharge: Team ${chunk.team_id}. ${AUTO_RECHARGE_CREDITS} credits added. Payment status: ${paymentStatus.return_status}.`,
false, false,
process.env.SLACK_ADMIN_WEBHOOK_URL process.env.SLACK_ADMIN_WEBHOOK_URL
).catch((error) => { ).catch((error) => {
Logger.debug(`Error sending slack notification: ${error}`); Logger.debug(`Error sending slack notification: ${error}`);
}); });
// Set cooldown for 1 hour
await setValue(webhookCooldownKey, 'true', 60 * 60);
} }
}
return { return {
success: true, success: true,
message: "Auto-recharge successful", message: "Auto-recharge successful",

View File

@ -7,7 +7,7 @@ async function getCustomerDefaultPaymentMethod(customerId: string) {
const paymentMethods = await stripe.customers.listPaymentMethods(customerId, { const paymentMethods = await stripe.customers.listPaymentMethods(customerId, {
limit: 3, limit: 3,
}); });
return paymentMethods.data[0]?.id; return paymentMethods.data[0] ?? null;
} }
type ReturnStatus = "succeeded" | "requires_action" | "failed"; type ReturnStatus = "succeeded" | "requires_action" | "failed";
@ -16,13 +16,18 @@ export async function createPaymentIntent(
customer_id: string customer_id: string
): Promise<{ return_status: ReturnStatus; charge_id: string }> { ): Promise<{ return_status: ReturnStatus; charge_id: string }> {
try { try {
const defaultPaymentMethod = await getCustomerDefaultPaymentMethod(customer_id);
if (!defaultPaymentMethod) {
Logger.error(`No default payment method found for customer: ${customer_id}`);
return { return_status: "failed", charge_id: "" };
}
const paymentIntent = await stripe.paymentIntents.create({ const paymentIntent = await stripe.paymentIntents.create({
amount: 1100, amount: 1100,
currency: "usd", currency: "usd",
customer: customer_id, customer: customer_id,
description: "Firecrawl: Auto re-charge of 1000 credits", description: "Firecrawl: Auto re-charge of 1000 credits",
payment_method_types: ["card"], payment_method_types: [defaultPaymentMethod?.type ?? "card"],
payment_method: await getCustomerDefaultPaymentMethod(customer_id), payment_method: defaultPaymentMethod?.id,
off_session: true, off_session: true,
confirm: true, confirm: true,
}); });