SDK ReferenceFunctions
Collect Payments
Generate checkout links to collect payments from users
Overview
The collectPayment method generates a checkout link for users to complete their payment. This integrates with your configured payment provider (e.g., LemonSqueezy) to handle the payment flow.
Basic Usage
import { scrawn } from "@scrawn/core";
const biller = scrawn({
apiKey: process.env.SCRAWN_KEY as `scrn_${string}`,
baseURL: process.env.SCRAWN_BASE_URL || "http://localhost:8069",
});
// Generate checkout link
const checkoutLink = await biller.collectPayment("user-123");
// Redirect user to payment page
res.redirect(checkoutLink);In simple terms: Give me a payment link for user user-123 where they can go and pay all their outstanding amount (which is being tracked by scrawn).
Parameters
userId (required)
- Type:
string - Description: The unique identifier of the user to collect payment from
- Validation: Must be a non-empty string
Response
- Type:
Promise<string> - Returns: A checkout URL where the user can complete their payment
Examples
Express.js Endpoint
import express from "express";
import { scrawn } from "@scrawn/core";
const app = express();
app.use(express.json());
const biller = scrawn({
apiKey: process.env.SCRAWN_KEY as `scrn_${string}`,
baseURL: process.env.SCRAWN_BASE_URL || "http://localhost:8069",
});
app.post("/api/collect-payment", async (req, res) => {
try {
const { userId } = req.body;
if (!userId) {
return res.status(400).json({ error: "userId is required" });
}
const checkoutLink = await biller.collectPayment(userId);
res.redirect(checkoutLink);
} catch (error) {
console.error("Failed to collect payment:", error);
res.status(500).json({ error: "Failed to create checkout link" });
}
});Error Handling
try {
const checkoutLink = await biller.collectPayment(userId);
console.log("Checkout link created:", checkoutLink);
} catch (error) {
console.error('Error creating checkout link:', error);
// Handle error appropriately
}Best Practices
1. Validate User ID
Always validate the user ID before generating a checkout link:
if (!userId || typeof userId !== 'string' || userId.trim().length === 0) {
return res.status(400).json({ error: 'Valid userId is required' });
}
const checkoutLink = await biller.collectPayment(userId);2. Exclude from Tracking
Make sure to exclude the payment endpoint from usage tracking middleware:
app.use(biller.middlewareEventConsumer({
extractor: (req) => ({
userId: req.user.id,
debit: 10,
}),
blacklist: ['/api/collect-payment'], // Don't charge for payment collection
}));