Bonjour,

J'essaye de mettre en place une solution de paiement via Stripe.

Après avoir regardé la vidéo du tutoriel présente sur ce site j'ai téléchargé les sources pour avoir une base.
Cependant j'ai rencontré plusieurs erreurs, en partie liées à ma version de php (je suis sous wamp server 2.5).

Le soucis est que actuellement j'ai un problème avec la partie concernant l'utilisation de Curl.

Dans le tutoriel une fonction "api" est crée et renvois des données, cependant je rencontre des erreurs avec cette fonction.

Voici le code en question:

    public function api($endpoint, $data = null) {
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => "https://api.stripe.com/v1/$endpoint",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_USERPWD => $this->api_key,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC
        ]);
        if ($data != null) {
           curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        }
        $response = json_decode(curl_exec($ch));
        curl_close($ch);
        if (property_exists($response, 'error')) {
            throw new Exception($response->error->message);
        }
        return $response;
    }

Actuellement j'obtiens comme erreurs:

" Warning: First parameter must either be an object or the name of an existing class in C:\wamp\www\stripeTuto\Stripe.php on line 33"

Ainsi que: "Notice: Trying to get property of non-object in C:\wamp\www\stripeTuto\payment.php on line 19" (due à la valeur vide renvoyée par la fonction je pense.

Et si je retire la condition ligne 33 j'obtiens juste le second message.

La fonction en question est:

       if (property_exists($response, 'error')) {
            throw new Exception($response->error->message);
        }

Merci à vous pour votre aide.

edit:

Après mise à jour de mon wamp server pour utiliser php 7 j'ai toujours des erreurs, j'ai pourtant repris le code de base du projet.

7 réponses


Bonjour, j'ai le meme problème si quelqu'ul a une solution ...

Finalement je me suis débrouillé autrement, j'ai suivi les explications sur la doc stripe et j'ai réussi à faire ce que je voulais, mais ça ne règle pas le problème en lui même.

J'ai uilisé leur formulaire "checkout" et j'ai téléchargé les fichiers de l'api: https://stripe.com/docs/checkout/tutorial

Merci de t'as réponse, j'ai essayer aussi cette solution, je n'es plus les erreurs mais j'ai un problème de TLS.
Il me demande de passer en 1.2 et je ne comprends pas, faut-il prendre le SSL avec son hebergement ?

Pour le TLS 1.2 j'ai déjà eu le soucis avec une autre solution de paiement, il faut changer la configuration de ton hébergement.
Si tu es chez ovh tu peux trouver les infos sur cette page: https://docs.ovh.com/fr/fr/web/hosting/modifier-lenvironnement-dexecution-de-mon-hebergement-web/

Super merci ca marche, je me suis mis sur "jessie.386".

Bonjour,
j'ai le même problème, en ayant suivi ce tuto.
Le paiement fonctionne avec les "keys" test mais pas avec les "keys" live de Stripe.
il semble que c'est bien ce bout de code qui pose problème.

if (property_exists($response, 'error')) {
            throw new Exception($response->error->message);
        }

s'il vous plaît si une personne trouve une solution autre que celle proposé au-dessus je suis preneur car je suis bien embêté aujourd'hui avec un client.
je vous remercie par avance.
Bien cordialement.

Solution trouvé à tester et confirmer!
faire un try catch dans le fichier d'appel de la class Strip comme ceci:

try{
        $stripe =  new Stripe('sk_live_XXXXXXXXXXXXXXXXXXXXXX');
        $customer = $stripe->api('customers', ['source' => $token, 'description' => $name, 'email' => $email]);

        $charge = $stripe->api('charges', [
        'amount' => $amount,
        'currency' => 'eur',
        'customer' => $customer->id
        ]);
}catch (Exception $e) {
        $errorMessage = $e->getMessage();
        echo "<br><div id='alert' class='alert alert-danger'><button type='button' class='close' data-dismiss='alert'>&times;</button>Erreur!       ".$errorMessage." </div>";
     }