Non classé

Mettre en place un paiement stripe en PHP

La facilité d’intégration de Stripe

On entends beaucoup parler de vendre un saas, or vendre nécessite de mettre en place une solution de paiement. ET les intégrations sont plus ou moins facile, non seulement informatiquement, mais aussi l’obtention de la solution.

Je me souvenais qu’il fallait plusieurs semaines pour obtenir une solution de paiement de la banque, au début des années 2010. Il y avait certes Paypal, mais accepter la carte bancaire était mieux, et en plus plus on proposait de solutions de paiement plus on convertissait. Je me souviens aussi des moyens de paiement comme les virements bancaires et les chèques !

Puis est arrivé Stripe, dont l’intégration était 10 fois plus simple que Paypal. C’est ce que nous allons voir dans cette page. Regardez la vidéo pour plus de clarté et de facilité. Je vous mets en téléchargement les fichiers.

Mais il y a plus encore avec Stripe

Avec Stripe, c’est une protection de votre site avec les technique de geofencing, détection de cartes volée, gestion de dépassement ou insuffisance de cash dans le compte. Vous pouvez aussi faire du paiement récurrent (idéal pour les saas), et des solution de paiement en plusieurs fois (avec Alma), paiement en cryptomonnaie. Bref la société n’est pas devenue un décacorne pour rien.

Stripe est né avec le constat que les moyens de paiement de l’époque étaient trop compliqué à mettre en oeuvre, les fondateurs ont vu une opportunité à saisir.

Le fichier zip à télécharger : Stripe.php.zip

Votre session de formation annulée et vous cherchez une école qui accepte des entrées en continue?

vous vous êtes inscrit sur un parcours de formation type CDA ou DWWM ou Administrateur Devops, mais que faute de candidats, la session ne débutera pas. Je comprends votre frustration:

  • vous êtes déçu de ne pouvoir commencer une formation que vous désiriez depuis des lustres
  • vous avez perdu du temps à entamer des démarches
  • vous avez peut être perdu un peu d’argent également
  • vous vous retrouvez sans écoles de formation

Programmer de façon sécurisée

Dans la programmation web, il y a des précautions à prendre pour renforcer la sécurité de votre application.

Hasher les mots de passe

Filtrer les données envoyées par formulaire

Prévenir les injection SQL

Prévenir les attaques CSRF

Ne pas versionner les fichier .env

Surtout si vous avez des clé API, et que vos repository sont publiques !

Utiliser les cookie httpOnly

Un cookie httpOnly ne peut pas être volé.

Utiliser le UUID

Les UUID ne permettent pas de tester les combinaison comme les id numériques

Session de rattrapage d’examen DWWM ou CDA

A quel public s’adresse ces sessions de rattrapage?

Les sessions de rattrapage d’examen pour les titres professionnels DWWM (Développeur Web et Web Mobile) et CDA (Concepteur Développeur d’Applications) s’adressent avant tout aux candidats ayant déjà présenté l’examen une première fois, mais qui n’ont pas obtenu la validation complète du titre (validation partielle d’un bloc de compétence). Vous avez peut être manqué de chance ce jour car vous pensiez que votre présentation était bonne, en êtes vous sûr?

Les candidats conservent le droit de repasser les blocs de compétences non validés, dans un délai imparti par le ministère du Travail. Ces sessions sont donc une seconde chance précieuse pour finaliser leur projet professionnel et valider le titre visé.

Ainsi, un candidat ayant obtenu la validation d’un bloc sur deux (Le frontend) pour le DWWM peut choisir de ne repasser que le bloc manquant (le backend), sans avoir à reprendre l’ensemble des épreuves. Cette souplesse constitue un atout considérable du système de certification professionnelle français. Enfin, certains apprenants peuvent également se retrouver dans une situation où ils n’ont pas pu se présenter à l’examen initial à cause de circonstances personnelles ou administratives : pour eux, la session de rattrapage est souvent le seul moyen d’accéder à la certification sans devoir reprendre tout le parcours de formation.

Pour quand réserver la session de rattrapage?

En règle générale, un candidat dispose de cinq années à compter de la date du premier passage pour valider les blocs manquants et ainsi obtenir le titre complet. Dans les faits, à quoi sert d’attendre plusieurs années? les technologies évoluent vite en informatique, il est fortement recommandé de ne pas attendre trop longtemps, surtout lorsque les compétences acquises risquent de s’estomper avec le temps. Chez Formapedia, nous conseillons à nos apprenants de réserver leur session de rattrapage sous un mois à 3 mois, pour ne pas perdre Ce délai permet à la fois une révision ciblée et une montée en confiance progressive.

Chez Formapedia, nous accompagnons chaque candidat s’il le veut dans sa préparation, en lui proposant une date en fonction de son aptitude. Une fois la date fixée, nous organisons un accompagnement individualisé pour réviser les compétences ciblées, avec des simulations d’entretien professionnel, des corrections de livrables, et des retours personnalisés. Cette organisation rigoureuse optimise les chances de réussite et évite les mauvaises surprises de dernière minute.

Les avantages de planifier une session de rattrapage avec Formapedia

Choisir Formapedia pour planifier sa session de rattrapage, c’est bénéficier d’un encadrement professionnel, humain et pédagogique à chaque étape du processus. Contrairement à un simple passage en candidat libre, où le candidat est souvent seul face à ses doutes et ses lacunes, Formapedia propose un accompagnement complet pour identifier les points faibles, travailler les livrables, renforcer la présentation orale, et clarifier les attentes du jury. Nos formateurs sont eux-mêmes développeurs expérimentés, juré avec plusieurs année d’expérience, spécialisés en DWWM ou CDA, et connaissent parfaitement les référentiels, les attendus de l’examen et les erreurs les plus fréquentes à éviter, les poncifs et les question piège. Ce retour d’expérience est un levier précieux pour reprendre confiance et progresser efficacement.

En outre, nos sessions sont organisées dans un cadre bienveillant, mais rigoureux, avec des conditions proches de celles de l’examen officiel. Cela permet de réduire le stress, notamment pour les candidats qui ont vécu une première session difficile. Nous mettons également à disposition des ressources pédagogiques ciblées, des modèles de livrables, des grilles de notation commentées, ainsi que des sessions de coaching en visio. Cette approche individualisée, centrée sur la réussite de chacun, fait partie de notre ADN. Grâce à cet accompagnement, nos candidats au rattrapage affichent un taux de réussite bien supérieur à la moyenne nationale. Enfin, nous nous chargeons de l’ensemble des démarches administratives (convocations, inscriptions à la DREETS, organisation des jurys) afin que le candidat puisse se concentrer uniquement sur sa préparation.

Les modalités de passage d’examen de rattrapage

Le passage d’un examen de rattrapage pour le DWWM ou le CDA suit une procédure encadrée par les textes officiels du ministère du Travail. Il est impératif que le candidat repasse uniquement les blocs de compétences non validés. Cela signifie qu’il devra représenter un ou plusieurs livrables, actualisés et corrigés, en fonction des retours obtenus lors de la première session. Il devra également se présenter à un nouvel entretien technique et professionnel devant un jury agréé. Ce jury évalue la progression du candidat, la qualité de son projet, ses compétences techniques (HTML, CSS, JavaScript, PHP, MySQL, etc.), ainsi que sa posture professionnelle. La durée et la forme de l’épreuve peuvent légèrement varier selon les blocs à repasser, mais la rigueur de l’évaluation reste la même que lors de l’examen initial.

Chez Formapedia, nous prenons en charge l’ensemble des formalités liées à l’organisation de cette session : convocation, planification, mise à disposition d’un jury agréé, préparation technique des salles ou des visios, vérification des documents officiels, etc. Le jour J, le candidat est accueilli dans des conditions professionnelles optimales, avec un matériel informatique conforme et une assistance logistique si nécessaire. Pour les candidats à distance, un système de visio sécurisé est mis en place, en conformité avec les exigences de la DREETS. Les jurys sont sensibilisés aux enjeux spécifiques d’un rattrapage : ils évaluent la progression, l’amélioration des livrables, et la capacité du candidat à intégrer les retours précédents. Cette évaluation bienveillante mais exigeante permet de valider objectivement les compétences restantes.

Si vous êtes en attente de l’obtention du titre pour passer en master ou en alternance, n’attendez plus et assurez vous votre avenir. Nous avons à plusieurs reprise sauvé l’année scolaire de plusieurs apprenants ! Témoignage sur demande.

Formulaire de demande (ou appelez nous)

[ninja_form id=1]

Introduction au scripting shell+

Eléments d’un script shell

Un script shell est un fichier texte rendu exécutable en ligne de commande. La première ligne du fichier contient une ligne spéciale appelée shebang #!, suivi du chemin absolu vers l’interpréteur shell, qui peut être bash sh ou zsh, voire même un interpréteur python

#!/bin/bash

#!/bin/zsh

#!/usr/bin/python

Si vous omettez le shebang, alors c’est le shell courant qui est utilisé, mais dans ce cas il n’y aucune garantie que le script est compatible avec votre shell courant, donc il est très conseillé de le spécifier.

Les variables

Une variable est en majuscule et en snake case

#!/bin/bash
MY_SHELL="bash"
NOM_SERVEUR=$(hostname)   // ou NOM_SERVEUR=`hostname`  ancienne syntaxe
echo "J'aime mon $MY_SHELL shell."

echo "J'aime mon ${MY_SHELL}ing shell." // la syntaxe avec accolade permet de concaténer

Généralement les nom de variable valide suivent la m^me règle que dans les langages de programmation

Contrôle d’exécution

Les tests (équivalent de if else)

Syntaxe :
[ condition-a-tester]
exemple :
[-e /etc/passwd]   // teste si le fichier /etc/passwd existe
Autres exemples :
-d NOM_FICHIER True si fichier est un répertoire
-e NOM_FICHIER True si le fichier existe
-f NOM_FICHIER True si le fichier existe et est un fichier ordi
-r NOM_FICHIER True si le fichier readable par moi
-s NOM_FICHIER True si le fichier existe et est non vide
-w NOM_FICHIER True si le fichier est writable par moi
-x NOM_FICHIER True si le fichier est exécutable par moi

-z STRING True si string est vide
-n STRING True si string est non vide
STRING1 = STRING2 égalité
STRING1 != STRING2 inégalité   # attention un seul signe égal !!

#Tests arithmétiques
arg1 -eq arg2  True si arg1 est égal à arg2
arg1 -ne arg2  True si arg1 est égal à arg2
arg1 -lt arg2  True si arg1 est less than à arg2
arg1 -le arg2  True si arg1 est less or equal à arg2
arg1 -gt arg2  True si arg1 est greater than à arg2
arg1 -ge arg2  True si arg1 est gretaer or equal à arg2

Branchement conditionnel

Syntaxe générale:
if [ condition-est-vraie ]
then
    commande 1
    commande 2
    commande 3
fi

# exemple :
#!/bin/bash
AGE=34
if [ "$AGE" -eq 18 ]; // ici il faut entourer AGE de guillements et préfixer AGE d'un signe dollar
then
        echo "vous avez ${AGE} vous êtes une personne mineure"
else
        echo "vous avez ${AGE} vous êtes une personne majeure"
fi


# multiple condition avec elif

#!/bin/bash

AGE=20

if [ "$AGE" -lt 18 ]; then
    echo "Vous êtes mineur."
elif [ "$AGE" -eq 18 ]; then
    echo "Vous avez exactement 18 ans."
else
    echo "Vous êtes majeur."
fi


# ET et OU

#!/bin/bash

AGE=20
CITOYEN="oui"

if [ "$AGE" -ge 18 ] && [ "$CITOYEN" = "oui" ]; then
    echo "Vous pouvez voter."
else
    echo "Vous ne pouvez pas voter."
fi


# avec CASE

#!/bin/bash

JOUR="samedi"

case "$JOUR" in
    "lundi"|"mardi"|"mercredi"|"jeudi"|"vendredi")
        echo "C'est un jour de travail."
        ;;
    "samedi"|"dimanche")
        echo "C'est le week-end !"
        ;;
    *)
        echo "Jour inconnu."
        ;;
esac

On va pousser le script un peu plus loin avec la récupération dynamique du jour, ainsi on n’a plus besoin de coder en dur.

Mais auparavant on va installer pour nous assurer sur le locale franançais est installé

locale

LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

si vous ne voyez pas ça c'est que ce n'est pas installé. Faites la commande suivante :

Linux installer le locale français

Si vous êtes sous wsl, il se peut que vous soyez toujours dans le système anglais, nous allons installer le locale français.

sudo locale-gen fr_FR.UTF-8
sudo update-locale LANG=fr_FR.UTF-8
sudo reboot
# ou redémarrer votre shell (dans le cas de wsl également)
# et refaite locale
locale


Après faites la commande date 
$ date
sam. 08 mars 2025 16:17:23 CET
Pour avoir le jour 
$ date +%A
samedi
# voilà vous avez tout pour recorriger le programme

Nouveau script avec le jour de semaine dynamique :

#!/bin/bash

JOUR=$(date +%A)

case "$JOUR" in
    "lundi"|"mardi"|"mercredi"|"jeudi"|"vendredi")
        echo "C'est un jour de travail."
        ;;
    "samedi"|"dimanche")
        echo "C'est le week-end !"
        ;;
    *)
        echo "Jour inconnu."
        ;;
esac

Les boucles en shellscript

Boucle for

Sans doute le plus facile

#syntaxe générale
for VARNAME in ITEM1 ITEM2
do
   command 1
   command 2
done

# exemple

#!/bin/bash
for COULEUR in rouge vert bleu
do
        echo  "COULEUR: $COULEUR"
done

# variante

#!/bin/bash
for COULEUR in rouge vert bleu
do
        echo  "COULEUR: $COULEUR"
done

Générer une séquence pour la boucle for

#générer avec seq (séquence)

#!/bin/bash
for i in $(seq 1 10)
do
        echo $i
done

Exemple plus élaboré de script shell très utile

Supposons que nous voulions renommer des fichier images avec le nom du fichier avec la date du jour au formation numérique

Pour ce faire nous allons dans notre répertoire télécharger avec wget ou curl des images prise sur internet

wget -O image1.jpg http://source.com/imagealeatoire.jpg
l'argument -O permet de renommer le fichier sauvé
#!/bin/bash
# on liste les fichiers images avec la commande ls et on  mets le résultat dans une variables
IMAGES=$(ls *jpg)
DATE=$(date +%F)
for IMAGE in $IMAGES
do 
   echo "renommage de ${IMAGE} en ${IMAGE}-${DATE}"
   mv ${IMAGE} ${IMAGE}-${DATE}
done 

Le script marche mais n’est pas optimale car la date se rajoute à l’extension et nom au nom de fichier. Essayez de résoudre ce problème. (indice utiliser la fonction $(basename “$path”)

# solution

#!/bin/bash
IMAGES=$(ls *jpg)
DATE=$(date +%F)
for IMAGE in $IMAGES
do
        FILENAME="${IMAGE%.*}"
        EXT="${IMAGE##*.}"
        echo "renommage de $IMAGE en ${FILENAME}-${DATE}.${EXT}"
        mv ${IMAGE} ${FILENAME}-${DATE}.${EXT}
done

Boucle while





Paramètres positionnels

Quand vous exécutez un script vous pouvez passer des paramètres

$monscript.sh param1 param2 param3

Dans votre script vous pouvez y faire référence avec $1, $2 etc $0 représente le script lui-même.

#exemple de script pour archiver une utilisateur
echo "Executing script : $0"
echo "Archiving user : $1"
#lock the account
passwd -l $1

# create the archive of the home directory
tar cf /archvies/$[1}.tar.gz /home/${1}

#accès à tous les paramètres positionnels
for USER in $@   # suppose que tous les arguments sont des users
...

Lire les entrées claviers

#!/bin/bash
read -p "Entrez un nom utilisateur:  " USER
echo "Archivage de l'utilisateur: $USER"
...

Exercice : pratiquer le script d’archivage avec l’entrée au clavier, et au passage d’arguments multiples

Les fonctions

#!/bin/bash

greet_user(){
echo -n "Entre ton prénom "
read nom
echo "Bonjour $nom ! Comment vas tu $1?"

greet_user "$1"



#Exécuter le script 
$ ./greet.sh gros

Mettez en place une authentification JSON dans Symfony

Dans le parcours sur symfony, je n’ai pas parlé de l’authentification via webservice. On va aborder cet aspect dans cet article.

Se connecter via un webservice est intéressant à savoir si on veut développer un front indépendant de type ReactJs ou AngularJS , ou même une application mobile, votre symfony servant de backend. D’abord il faut ajouter quelques ligne dans votre security.yaml:

security.yaml

# config/packages/security.yaml
security:
    # ...

    firewalls:
        main:
            anonymous: lazy
            json_login:
                check_path: /jsonlogin
                username_path: security.credentials.email
                password_path: security.credentials.password
SecurityController : ajoutez ce code dans le controller

    /**
     * @Route("/jsonlogin", name="jsonlogin", methods={"POST"})
     */
    public function jsonlogin(Request $request): Response
    {
        $user = $this->getUser();

        return $this->json([
            'email' => $user->getEmail(),
            'roles' => $user->getRoles(),
        ]);
    }

Utiliser POSTMAN pour envoyer une requête de type POST et dont le content type est application/json vers la route jsonlogin

POSTMAN

Vous devez envoyer un Json, tel que dans l’image. (pas en tant que variable POST)

Le serveur va vous répondre avec un PHPSESSION_ID en retour. Pourquoi pas un Json Web Token? parce que basiquement c’est ce qui se passe. Mais le fonctionnement du PHPSESSION_ID est similaire, vous devez le renvoyer pour accéder à des partie du site web qui ncessitent un authentification.

Une fois la requêtes POST envoyée, si tout se passe bien, on reçoit comme prévu la réponse ci-dessus (voir le code controller plus haut). Et l’image ci-dessous nous montre le PHPSESSION_ID qu’on doit récupérer et sauver pour les reuq^tes subséquentes.

Pour sauver le Cookie (PHPSESSION_ID) cliquez dans POSTMAN le lien Cookie

Une modale va apparaître, vous devez entre le nom de domaine pour ce cookie

Une fois le domaine entré l ePHPSESSION_ID s’affiche

Vous êtes prêt pour faire une requête authentifiée !

Requête vers la page d’ajout de produit

Grâce à notre cookie sauvegardé, on aaccès à al page d’ajout de produit qui a besoin d’être authentifié

Requête GET vers la même page mais en ayant effacé les cookies

Regardez le code HTML, c’est celui de la page de login !

J’espère que ce petit tuto vous a plu et vous a permis de mieux comprendre le mécanisme d’authentification HTTP.

Note concernant la structure du json d’authentification

Dans le security yaml vous donnez un indice à Symfony sur la structure du json envoyé, par défaut la strucutre est:

#structure de base
{
    "email": "admin@gmail.com",
    "password": "123"
}

dans notre cas :
{
    "security": {
        "credentials": {
            "email": "admin@gmail.com",
            "password": "123"
        }
    }
}


# security.yaml
...
            json_login:
                check_path: /jsonlogin
                username_path: security.credentials.email
                password_path: security.credentials.password
...