Étape 1 : Créer un projet Worker
Si vous n’avez pas encore de projet Workers, créez-en un :npm create cloudflare@latest -- firma-signing
Sélectionnez “Hello World” Worker lorsque vous y êtes invité, puis choisissez JavaScript ou TypeScript. Une fois l’échafaudage terminé :Étape 2 : Stocker votre clé API en tant que secret
Ajoutez votre clé API Firma en tant que secret chiffré. Wrangler vous invitera à coller la valeur :wrangler secret put FIRMA_API_KEY
Ne codez jamais en dur votre clé API dans les fichiers source. Les secrets sont chiffrés au repos et injectés dans la liaison env de votre Worker au moment de l’exécution.Étape 3 : Créer un Worker pour envoyer des demandes de signature
Remplacez le contenu de src/index.js (ou src/index.ts si vous avez choisi TypeScript) par ce qui suit. Ce Worker accepte une requête POST avec les informations du signataire, appelle le point de terminaison Firma create-and-send, et renvoie l’identifiant de la demande de signature.const FIRMA_API = "https://api.firma.dev/functions/v1/signing-request-api";
export default {
async fetch(request, env) {
if (request.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
},
});
}
if (request.method !== "POST") {
return Response.json({ error: "Method not allowed" }, { status: 405 });
}
const { name, template_id, signer_email, signer_first_name, signer_last_name } =
await request.json();
const response = await fetch(
`${FIRMA_API}/signing-requests/create-and-send`,
{
method: "POST",
headers: {
Authorization: env.FIRMA_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
name,
template_id,
recipients: [
{
first_name: signer_first_name,
last_name: signer_last_name,
email: signer_email,
designation: "Signer",
order: 1,
},
],
}),
}
);
const data = await response.json();
if (!response.ok) {
return Response.json({ error: data }, { status: response.status });
}
return Response.json({
signing_request_id: data.id,
status: "sent",
});
},
};
Le point de terminaison create-and-send crée la demande de signature et l’envoie aux destinataires en un seul appel. Si vous devez examiner ou modifier la demande avant l’envoi, utilisez POST /signing-requests pour créer un brouillon, puis POST /signing-requests/{id}/send séparément.
Étape 4 : Déployer
Wrangler affichera l’URL de votre Worker (quelque chose comme https://firma-signing.<your-subdomain>.workers.dev). Votre frontend peut désormais envoyer les informations du signataire à cette URL via POST.Gestion des webhooks
Pour suivre le moment où les documents sont signés, créez un second Worker qui reçoit les événements webhook de Firma. Dans le tableau de bord Firma, sous Paramètres → Webhooks, enregistrez un webhook pointant vers l’URL de ce Worker.export default {
async fetch(request, env) {
if (request.method !== "POST") {
return new Response("Method not allowed", { status: 405 });
}
const payload = await request.json();
const { type, data } = payload;
if (type === "signing_request.completed") {
const signingRequestId = data.signing_request.id;
console.log(`Signing request ${signingRequestId} completed`);
}
if (type === "signing_request.recipient.signed") {
const recipientEmail = data.recipient?.email;
console.log(`${recipientEmail} signed the document`);
}
return Response.json({ received: true });
},
};
Pour un usage en production, vérifiez toujours la signature du webhook à l’aide de votre secret de signature de webhook Firma. Consultez le guide des webhooks pour les détails d’implémentation. Étape 1 : Configurer votre projet Pages
Si vous avez déjà un projet Cloudflare Pages, passez à l’étape suivante. Sinon, créez-en un :mkdir firma-app && cd firma-app
npm init -y
mkdir public functions
echo "<h1>Firma App</h1>" > public/index.html
Les Pages Functions résident dans le répertoire /functions. Chaque fichier correspond automatiquement à un chemin d’URL, donc functions/api/send-signing-request.js devient /api/send-signing-request.Étape 2 : Stocker votre clé API en tant que secret
Ajoutez votre clé API Firma en tant que secret Pages chiffré :wrangler pages secret put FIRMA_API_KEY --project-name your-project-name
Vous pouvez aussi aller dans Cloudflare tableau de bord → Pages → votre projet → Settings → Environment variables et ajouter FIRMA_API_KEY comme variable chiffrée.Étape 3 : Créer une Pages Function pour envoyer des demandes de signature
Créez un nouveau fichier à functions/api/send-signing-request.js :const FIRMA_API = "https://api.firma.dev/functions/v1/signing-request-api";
export async function onRequestPost(context) {
const { name, template_id, signer_email, signer_first_name, signer_last_name } =
await context.request.json();
const response = await fetch(
`${FIRMA_API}/signing-requests/create-and-send`,
{
method: "POST",
headers: {
Authorization: context.env.FIRMA_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
name,
template_id,
recipients: [
{
first_name: signer_first_name,
last_name: signer_last_name,
email: signer_email,
designation: "Signer",
order: 1,
},
],
}),
}
);
const data = await response.json();
if (!response.ok) {
return Response.json({ error: data }, { status: response.status });
}
return Response.json({
signing_request_id: data.id,
status: "sent",
});
}
Les Pages Functions exportent des gestionnaires nommés par méthode HTTP : onRequestPost, onRequestGet, etc. Si vous devez gérer plusieurs méthodes, exportez onRequest et vérifiez context.request.method à l’intérieur.
Étape 4 : Déployer
Si votre projet Pages est connecté à un dépôt Git, poussez vos modifications et Cloudflare déploiera automatiquement. Pour les déploiements manuels :wrangler pages deploy public --project-name your-project-name
Votre fonction est désormais en ligne à https://your-project.pages.dev/api/send-signing-request.Gestion des webhooks
Créez une seconde Pages Function à functions/api/firma-webhook.js pour gérer les événements webhook Firma entrants. Enregistrez cette URL dans le tableau de bord Firma, sous Paramètres → Webhooks.export async function onRequestPost(context) {
const payload = await context.request.json();
const { type, data } = payload;
if (type === "signing_request.completed") {
const signingRequestId = data.signing_request.id;
console.log(`Signing request ${signingRequestId} completed`);
}
if (type === "signing_request.recipient.signed") {
const recipientEmail = data.recipient?.email;
console.log(`${recipientEmail} signed the document`);
}
return Response.json({ received: true });
}
Pour un usage en production, vérifiez toujours la signature du webhook à l’aide de votre secret de signature de webhook Firma. Consultez le guide des webhooks pour les détails d’implémentation.