IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Redirection après validation paiement


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut Redirection après validation paiement
    Bonjour à tous,

    J'essaye en vain d'effectuer une redirection après une validation de paiement.
    La validation fait appel à un callback de type POST.
    La page de paiement génère un QR code qui sera scanné à l'aide de son smartphone.

    J'arrive bien à traiter l'url de callback et générer un enregistrement en BDD.
    Par contre il m'est impossible de rediriger la validation du paiement vers la page d'origine.

    Dans la méthode "verifyPayment" de mon controlleur j'effectue une redirection vers la page d'origine "payment".
    Sur "papier" tout semble correct, je n'ai pas d'erreur dans la console, mais la page ne se redirige pas.

    Savez-vous me dire comment m'y prendre ?
    Merci pour l'aide

    voici ma page html "payment"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <!-- Alert Content -->
    		@if ($message = Session::get('success'))
     
    <div class="alert alert-success">
     
      <p>{{ $message }}</p>
     
    </div>
     
    @endif
     
    <div id="results">
    	<img src="{{ $customizedQRLink }}">
    </div>
    le fichier route (web.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Route::get('/api/payconiq-webhook',[PaymentController::class, 'requestPayment'])->name('payment');
    Route::post('/api/payconiq-webhook',[PaymentController::class, 'verifyPayment'])->name('verify');
    Mon controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    namespace App\Http\Controllers;
     
    use Illuminate\Http\Request;
    use Optios\Payconiq\PayconiqApiClient;
    use Optios\Payconiq\Request\RequestPayment;
    use Optios\Payconiq\PayconiqQrCodeGenerator;
    use Optios\Payconiq\PayconiqCallbackSignatureVerifier;
    use App\Models\Transactions;
     
     
     
    class PaymentController extends Controller
    {
        public function requestPayment()
        {
        	$apiKey = env('PAYCONIQ_KEY');
    		$client = new PayconiqApiClient($apiKey, null, false);
     
    		$requestPayment = new RequestPayment(
    		    100 // = € 1
    		);
    		$requestPayment->setCallbackUrl('https://machin.ngrok-free.app/api/payconiq-webhook');
    		$requestPayment->setReference('ref123456');
    		$requestPayment->setPosId('POS00001');
     
    		$payment = $client->requestPayment($requestPayment);
     
    		$qrLink = $payment->getQrLink();
    		$customizedQRLink  = PayconiqQrCodeGenerator::customizePaymentQrLink(
    		    $qrLink,
    		    PayconiqQrCodeGenerator::FORMAT_PNG,
    		    PayconiqQrCodeGenerator::SIZE_SMALL,
    		    PayconiqQrCodeGenerator::COLOR_BLACK
    		);
    		//var_dump($customizedQRLink);
     
     
    		return view('payment',compact('customizedQRLink'));
     
     
    	}
     
    	public function verifyPayment(Request $request)
    	{
     
    		$paymentProfileId = env('PAYCONIQ_PROFIL_ID'); //your payconiq payment profile id
     
    		// When Payconiq sends a POST to your webhook endpoint (callbackUrl), take the signature from the request header
     
    		$signature = $request->header('signature');
     
    		//var_dump($signature);
     
    		//POST body (payload)
    $paymentId = null; 
    	$status = null; 
     
    		$payload = $request->getContent();
    		var_dump($payload);
     
    		if (!empty($payload)) {
        $payloadData = json_decode($payload);
     
     
     
        if ($payloadData !== null) {
            // Accéder aux valeurs du payload
            $paymentId = $payloadData->paymentId;
            //$transferAmount = $payloadData->transferAmount;
           // $reference = $payloadData->reference;
            $status = $payloadData->status;
     
            // ... autres traitements avec les données du payload ...
        } else {
            // Le décodage JSON a échoué
            // Gérer l'erreur ou renvoyer une réponse appropriée
        }
    } else {
        // Le contenu de la demande est vide
        // Gérer l'erreur ou renvoyer une réponse appropriée
    }
     
            $transaction = Transactions::create([
            				'value' => $paymentId
            				]);
     
     
           // $response = array('status' => $status);
     
    // Renvoyer la réponse au format JSON
    //header('Content-Type: application/json');
    //echo json_encode($response);
     
    		/*$payconiqCallbackSignatureVerifier = new PayconiqCallbackSignatureVerifier($paymentProfileId, null, null, false);
     
    		echo $payconiqCallbackSignatureVerifier->isValid($signature, $payload) ? 'valid' : 'invalid';
     
    		var_dump($payconiqCallbackSignatureVerifier->loadAndVerifyJWS($signature, $payload));
    		*/
     
     
    		 return redirect()->route('payment')->with('success', 'Transaction success');
     
    	}
     
     
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Comme les redirections se font via un header, il ne faut pas que des données soient envoyées vers le browser avant le redirect.
    Or, je vois un var_dump, mais il peut y avoir autre chose qui écrit des données parasites.
    C'est bête mais c'est souvent ça la raison.

    Les developers tools de votre navigateur devraient permettre d'examiner les requêtes.

  3. #3
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Merci pour ta réponse.

    J'ai corrigé en désactivant les éventuels var_dump()/echo mais je n'ai pas d'amélioration.
    La requête ne redirige pas la page.

    La page reste en GET aucune requête POST n'est générée au niveau des outils d'analyse du navigateur (Firefox)

    Nom : Capture.JPG
Affichages : 67
Taille : 15,7 Ko

    Par contre, la console NGROK enregistre bien la requête d'affichage de la page de paiement en GET et la réponse du callback en POST mais visiblement le navigateur ne voit rien.
    Nom : Capture2.JPG
Affichages : 65
Taille : 19,0 Ko

    Je ne vois pas où est le problème

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Mais en fait cette fonction verifyPayment est une fonction de callback, elle reçoit juste la réponse de Payconiq n'est-ce pas ?
    Logiquement, elle n'est nullement appelée par le navigateur du client, et n'a pas vocation à l'être.
    Alors, il me semble que la redirection n'a rien à faire là et sera inopérante. C'est effectivement l'endroit où il faut enregistrer les résultats de la transaction, mais ça s'arrête là.

    Je n'ai jamais implémenté cette solution de paiement, mais pour avoir travaillé avec d'autres solutions dans le passé, je pense que vous devez fournir au prestataire l'URL vers laquelle le client devrait être redirigé après le paiement. C'est donc eux qui vont rediriger le client là où vous le souhaitez, au terme du processus.

    Voir la doc ici: https://developer.payconiq.com/onlin...eate-payment88
    Jai pas lu en détail, mais manifestement, le paramètre à rajouter dans votre requête de paiement serait donc: ReturnUrl.

    Checkout web page is redirecting consumer back to merchant's web shop using returnUrl, provided by the merchant during payment creation.
    After payment is completed, consumer is automatically redirected back to merchant's web shop using returnUrl, provided by merchant during payment creation.
    returnUrl
    [String, optional]
    Maximum Length: 2048 chars A field set by the calling party used to redirect consumer back after payment is completed on checkout web page hosted by Payconiq. This field is mandatory if merchant wants to use checkout web page flow.
    La fonction callback reste d'application, elle sera appelée avant même que le client soit redirigé, ou même s'il ferme la page entre-temps.

  5. #5
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Et bien je dois dire que je n'ai pas vu directement ce paramètre essentiel (ReturnUrl) dans la doc.
    Je te remercie d'avoir attiré mon attention à ce sujet.

    Je vais tester cela au plus vite...

Discussions similaires

  1. [SP-2010] redirection après validation formulaire.
    Par doctori dans le forum SharePoint
    Réponses: 15
    Dernier message: 20/07/2011, 14h37
  2. Redirection après validation erreurs
    Par xtope dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2009, 15h53
  3. redirection après validation formulaire
    Par princesse95 dans le forum Langage
    Réponses: 15
    Dernier message: 19/02/2009, 22h52
  4. [Mail] Redirection après validation
    Par Strix dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 14h26
  5. Redirection après validation d'un captcha
    Par GarGamel55 dans le forum Langage
    Réponses: 4
    Dernier message: 08/09/2006, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo