Apercu
TransactionGuard fournit un scoring de transactions en temps reel pour prevenir la fraude au paiement. Scorez les transactions en moins de 50ms et obtenez des decisions instantanees d’approbation/revision/refus.
Demarrage Rapide
const score = await txcloud . transactions . score ({
amount: 5000 ,
currency: 'MAD' ,
type: 'p2p_transfer' ,
sender: {
user_id: 'usr_abc123' ,
device_id: 'dev_xyz789' ,
ip_address: '102.45.67.89'
},
recipient: {
type: 'phone' ,
value: '+212612345678' ,
name: 'Mohammed El Amrani'
}
});
console . log ( 'Decision:' , score . decision ); // 'approve'
console . log ( 'Score de Risque:' , score . risk_score ); // 180
Logique de Decision
TransactionGuard retourne l’une des quatre decisions :
Decision Plage de Score Action approve0-300 Proceder avec la transaction review301-600 Mettre en file pour revision manuelle challenge601-800 Demander une authentification supplementaire decline801-1000 Bloquer la transaction
switch ( score . decision ) {
case 'approve' :
await processPayment ( transaction );
break ;
case 'review' :
await queueForReview ( transaction , score );
// Peut encore traiter avec delai
break ;
case 'challenge' :
await requestOTP ( user );
// Traiter apres verification OTP
break ;
case 'decline' :
await blockTransaction ( transaction );
await notifyUser ( 'Transaction refusee pour des raisons de securite' );
break ;
}
Reponse de Score
{
"id" : "trs_a1b2c3d4e5f6" ,
"created_at" : "2025-01-15T10:30:00Z" ,
"processing_time_ms" : 45 ,
"decision" : "approve" ,
"risk_score" : 180 ,
"risk_level" : "low" ,
"signals" : {
"positive" : [ "known_recipient" , "normal_amount" , "trusted_device" ],
"negative" : [],
"neutral" : [ "first_transfer_this_week" ]
},
"checks" : {
"velocity" : {
"passed" : true ,
"daily_count" : 2 ,
"daily_limit" : 10
},
"amount" : {
"passed" : true ,
"vs_average" : 1.2
},
"recipient" : {
"passed" : true ,
"is_known" : true ,
"trust_level" : "high"
},
"device" : {
"passed" : true ,
"is_trusted" : true
}
}
}
Types de Transaction
Type Description p2p_transferTransfert de personne a personne bill_paymentPaiement de facture/service public merchant_paymentPaiement a un commercant cash_withdrawalRetrait DAB/agent bank_transferVirement bancaire international_transferTransfert transfrontalier mobile_topupRecharge mobile/airtime
Profils de Risque Utilisateur
TransactionGuard construit des profils de risque a partir de l’historique des transactions :
// Obtenir le profil de transaction de l'utilisateur
const profile = await txcloud . transactions . users . getProfile ( userId );
console . log ( 'Niveau de Confiance:' , profile . trust_level );
console . log ( 'Total Transactions:' , profile . statistics . total_transactions );
console . log ( 'Montant Moyen:' , profile . statistics . average_amount );
// Le profil inclut les patterns
console . log ( 'Plage Montant Typique:' , profile . patterns . typical_amount_range );
console . log ( 'Destinataires Typiques:' , profile . patterns . typical_recipients );
console . log ( 'Horaires Typiques:' , profile . patterns . typical_times );
Reponse
{
"user_id" : "usr_abc123" ,
"trust_level" : "high" ,
"trust_score" : 850 ,
"statistics" : {
"total_transactions" : 156 ,
"total_amount" : 245000 ,
"average_amount" : 1571 ,
"max_amount" : 15000
},
"patterns" : {
"typical_amount_range" : [ 500 , 5000 ],
"typical_recipients" : 8 ,
"typical_frequency" : "weekly" ,
"typical_channels" : [ "mobile_app" ],
"typical_times" : [ "09:00-18:00" ]
},
"risk_factors" : {
"fraud_reports" : 0 ,
"disputes" : 0 ,
"chargebacks" : 0
}
}
Verification du Destinataire
Verifiez le risque du destinataire avant d’afficher la confirmation :
const recipientCheck = await txcloud . transactions . recipients . check ({
type: 'phone' ,
value: '+212612345678' ,
sender_user_id: userId
});
// Afficher un avertissement de risque si necessaire
if ( recipientCheck . risk_level === 'high' ) {
await showWarning ( 'Ce destinataire a ete signale. Procedez avec prudence.' );
}
// Afficher les infos de relation
if ( recipientCheck . relationship . is_known ) {
console . log ( `Vous avez envoye a ce destinataire ${ recipientCheck . relationship . times_sent } fois` );
}
Regles Personnalisees
Creez des regles specifiques aux transactions :
// Transfert international de haute valeur
await txcloud . transactions . rules . create ({
name: 'International Haute Valeur' ,
condition: "type = 'international_transfer' AND amount > 20000" ,
action: 'review' ,
score_adjustment: 300
});
// Nouveau destinataire gros montant
await txcloud . transactions . rules . create ({
name: 'Nouveau Destinataire Haute Valeur' ,
condition: "recipient.times_sent = 0 AND amount > 5000" ,
action: 'challenge' ,
score_adjustment: 200
});
// Horaire inhabituel
await txcloud . transactions . rules . create ({
name: 'Nuit Haute Valeur' ,
condition: "(time.hour >= 23 OR time.hour <= 5) AND amount > 5000" ,
action: 'review' ,
score_adjustment: 150
});
Boucle de Retour
Signalez les resultats des transactions pour ameliorer le scoring :
// Signaler une transaction completee
await txcloud . transactions . report ({
score_id: 'trs_a1b2c3d4e5f6' ,
outcome: 'completed' ,
fraud_reported: false
});
// Signaler une fraude
await txcloud . transactions . report ({
score_id: 'trs_xyz789' ,
outcome: 'fraud_confirmed' ,
fraud_reported: true ,
notes: 'Client a signale une transaction non autorisee'
});
Les retours reguliers ameliorent la precision du modele. Signalez tous les resultats, surtout les fraudes confirmees.
Analytics
Surveillez les patterns de transaction :
const analytics = await txcloud . transactions . analytics . summary ({
period: '30d'
});
console . log ( 'Total Transactions:' , analytics . volume . total_transactions );
console . log ( 'Approuvees:' , analytics . decisions . approved );
console . log ( 'Refusees:' , analytics . decisions . declined );
console . log ( 'Taux de Fraude:' , analytics . fraud . fraud_rate );
Exemple d’Integration
Flux de paiement complet avec TransactionGuard :
async function processPayment ( userId , amount , recipientPhone ) {
// 1. Scorer la transaction
const score = await txcloud . transactions . score ({
amount ,
currency: 'MAD' ,
type: 'p2p_transfer' ,
sender: { user_id: userId },
recipient: { type: 'phone' , value: recipientPhone }
});
// 2. Gerer la decision
if ( score . decision === 'decline' ) {
throw new Error ( 'Transaction refusee pour des raisons de securite' );
}
if ( score . decision === 'challenge' ) {
// Demander OTP
const otpVerified = await verifyOTP ( userId );
if ( ! otpVerified ) {
throw new Error ( 'Verification OTP echouee' );
}
}
if ( score . decision === 'review' ) {
// Mettre en file pour revision mais permettre de continuer
await queueForReview ( score . id );
}
// 3. Traiter le paiement
const payment = await executePayment ( userId , amount , recipientPhone );
// 4. Signaler le resultat
await txcloud . transactions . report ({
score_id: score . id ,
outcome: 'completed'
});
return payment ;
}
Bonnes Pratiques
Scorez les transactions avant d’afficher la confirmation pour detecter la fraude tot.
Incluez Toutes les Donnees Disponibles
Plus vous fournissez de contexte, meilleur est le scoring :
ID d’appareil
Adresse IP
Infos de session
Contexte utilisateur
Gerez Toutes les Decisions
Implementez des flux appropries pour les quatre decisions (approuver, reviser, challenger, refuser).
Signalez Tous les Resultats
Retournez les transactions completees ET les fraudes pour ameliorer le modele.
Prochaines Etapes