" ce que je vais"
je vais vérifie si l'utilisateur connecté a payé son abonnement

if (user->status === payment.ok) {
return encode_json(['status' => payment.ok]);
} else {
$this->redirect('payment.html.twig');
}

mais le problème est que si l'utilisateur n'a pas encore payé, on aura une rédirection au lieu du json. et je vais faire une redirection en ajax (si ce faisable)

code js

const buy = document.querySelector("#buy")
if (buy !== null) {
await fetch(form.getAttribute('url'), {
method: 'GET'
}).then((status => {
if (status.ok) {
const response = status.json()
if (response.status) {
createToast('success', 'vous êtes à jour.')
} else {
// redirection
}
}
}))
}

Aucune réponse


Hello :)

Alors le problème c'est que tu vérifie si il y a une réponse payement ET si le payement est OK, en vrai tu devrais vérifier si le payement est OK unisuement, et seulement après avoir lancé ton système de payement

const buy = document.querySelector("#buy")
    if (buy !== null) {
        let response = await fetch(form.getAttribute('url'), {
            method: 'GET'
        }).then(response => response.json()) // D'abord tu places le response.json() dans une variable
            .catch(error => console.error(error.getMessage)) // Si le fetch a planté

        // Et Ensuite tu travailles avec ton json
        response.status.ok.then(() => createToast('success', 'vous êtes à jour.'))
        response.status.revoked.then(() => /* redirection */) // J'ai mis revoked au hasard mais en gros tu check la reponse du payement qui n'est pas passé
    }
}

En gros faudrait un truc comme ça, Tu dois exportes ton fetch dans une fonction et retourner direct le json dans une variable, si tu fais des vérifs dans un .then tu n'aura pas ton json mais une pending promise, en gros l'argument status ne sera pas un json mais une pending (une configuration de la function await en cours qui n'est pas encore lancée)