Aller au contenu principal

Webhook après validation d'un certificat

Marche à suivre

Pour configurer votre webhook, veuillez suivre les instructions ci-dessous :

  1. Envoyer l'URL de l'endpoint : Veuillez nous fournir une URL de votre endpoint capable de recevoir des requêtes POST.
  2. Envoyer les informations d'authentification : Vous devez nous fournir soit un authToken de type Bearer, soit une combinaison de apiKey et apiSecretKey soit un identifiant et mot de passe pour auhtentification Basic. Ces informations seront utilisées pour sécuriser les communications entre nos systèmes.
  3. Concevoir la réception du token : Assurez-vous que votre endpoint est capable de recevoir le token d'authentification dans l'en-tête de la requête. Le authToken sera envoyé dans l'en-tête Authorization sous la forme Bearer <authToken>. Si vous utilisez une combinaison de apiKey et apiSecretKey, les en-têtes et la signature de la requête seront structurés comme suit :
  • Pour le Bearer Token :
Authorization: Bearer <authToken>
Content-Type: application/json

  • Pour l'authentification avec apiKey et apiSecretKey :

Une signature HMAC-SHA256 sera utilisée avec les données de la requête pour sécuriser l'authentification. Voici un exemple de génération de la signature et des en-têtes de la requête :

const data = JSON.stringify(requestBody);  // requestBody est le contenu de la requête
const signature = this.encryptionService.encryptHmacSha256(data, this.credentials.apiSecretKey);

const headers = {
Authorization: 'HMAC-SHA256 ' + this.credentials.apiKey + ':' + signature,
'X-Api-Key': this.credentials.apiKey,
'Content-Type': 'application/json',
};

Et voici l'exemple des en-têtes HTTP que vous devez implémenter sur votre endpoint :

Authorization: HMAC-SHA256 <apiKey>:<signature>
X-Api-Key: <your_api_key>
Content-Type: application/json

DTO

Le DTO ShareCasesWithMetaDatasDto est conçu pour représenter une structure de données qui contient les informations détaillées sur un certificat particulier et une liste d'éléments associés à ce certificat. Voici les composants principaux de ce DTO :

  • cfRef (String): Une référence unique pour le certificat, servant d'identifiant.
  • reportId (String): L'identifiant du rapport associé au certificat.
  • caseUrl (URL): L'URL vers un fichier PDF streamable lié au certificat.
  • createdAt (ISO8601): La date et l'heure de création du cas, formatée selon la norme ISO8601.
  • items (Array of BaseItemDto): Une liste d'éléments associés au certificat, où chaque élément est représenté par une instance de BaseItemDto.

Chaque BaseItemDto dans la liste items contient les informations suivantes :

  • createdAt (ISO8601): La date et l'heure de création de l'élément.
  • cfRef (String): Une référence unique pour l'élément.
  • description (String): Une description de l'élément.
  • geolocLatitude et geolocLongitude (String): Les coordonnées géographiques de l'élément.
  • data (String): Le contenu de l'élément si ce dernier est de type DATE_FIELD, EMAIL, NUMBER_FIELD, TEXT_FIELD ou TIME, le titre de l'image si ce dernier est de type PHOTOGRAPHY
  • imageUrl (URL, optionnel): L'URL vers une image PNG/JPG streamable associée à l'élément.
  • StepAction enum: Le type d'élément, spécifié par une énumération StepAction qui inclut des valeurs comme DATE_FIELD, EMAIL, NUMBER_FIELD, PHOTOGRAPHY, TEXT_FIELD, TIME.

class ItemDto {
@IsISO8601()
createdAt: Date;
@IsString()
cfRef: string;
@IsString()
description: string;
@IsString()
geolocLatitude: string;
@IsString()
geolocLongitude: string;
@IsOptional()
@IsUrl()
imageUrl?: string; // url to get streamableFile
@IsEnum(StepAction)
stepAction: StepAction;
}

export class CaseForApiResponseDto {
@IsString()
cfRef: string;
@IsISO8601()
createdAt: Date;
@IsString()
reportId: string;
@IsString()
frame: string;
@IsBoolean()
closed: boolean;
@IsUrl()
caseUrl: string;
@IsArray()
@Type(() => ItemDto)
items: ItemDto[];
}
enum StepAction {
DateField = 'DATE_FIELD',
Email = 'EMAIL',
NumberField = 'NUMBER_FIELD',
Photography = 'PHOTOGRAPHY',
Video = 'VIDEO',
TextField = 'TEXT_FIELD',
Time = 'TIME',
Select = 'SELECT',
Singature = 'SIGNATURE'
}