alut, alors j'ai suivit le tutoriel pour intégrer Paypal a CakePHP 2 (https://www.grafikart.fr/tutoriels/cakephp/abonnement-premium-paypal-293) en le rendant compatible avec CakePHP 3 mais je rencontre un problème. Quand je suis en local tout fonctionne niquel (sauf le ping de paypal pour dire que le paiement a été effectuer mais ca je pence que c'est normal car je suis en local). Par contre quand j'heberge mon projet cher mon hébergeur qui est 1&1 quand je souhaite effectuer le paiement
le 'curl_error()' me renvoir une erreur qui est : 'error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure'

Apres ce tuto date un peu et je me dit qu'il n'est peut etre plus d'actualiter ? J'ai entendu dire que Paypal était passer en SHA-256 et en regardant le fichier cacert.pem que grafikart fait télécharger est en SHA-1. Cependant cela fonctionne quand même en local. Je me demande donc si le probleme vient de l'hebergeur ou pas ?

Edit : Je vient de faire une verification des versions des curl en utilisant la fonction 'curl_version()' et je voit que sur mon serveur Wamp j'ai une de SSL plus récente que sur 1&1 .
OpenSSL/1.0.1g sur Wamp
OpenSSL/0.9.8o sur 1&1

9 réponses


Quelle verifier ? le HOST et le PEER ?

Essaie les deux

J'ai esseyer et ca ne fonctionne pas
Voici le code que j'ai pour envoyer le paiement Paypal :

$uid = $this->Auth->user('id');
        $custom = "action=subscribe&uid=$uid&duration=1";
        $request = [
            'METHOD'        => 'BMCreateButton',
            'VERSION'       => '87',
            'USER'          => Configure::read('Paypal.USER'),
            'PWD'           => Configure::read('Paypal.PWD'),
            'SIGNATURE'     => Configure::read('Paypal.SIGNATURE'),
            'BUTTONCODE'    => 'HOSTED',
            'BUTTONTYPE'    => 'BUYNOW',
            'BUTTONSUBTYPE' => 'SERVICES',
            'L_BUTTONVAR0'  => 'business='.Configure::read('Paypal.mail'),
            'L_BUTTONVAR1'  => 'item_name=Membres bienfaiteurs 1ans',
            'L_BUTTONVAR2'  => 'amount='.Configure::read('Tarif'),
            'L_BUTTONVAR3'  => 'currency_code=EUR',
            'L_BUTTONVAR4'  => 'no_note=1',
            'L_BUTTONVAR5'  => 'notify_url='.Router::url('/paypal/notify', true),
            'L_BUTTONVAR6'  => 'return='.Router::url('/paypal/success', true),
            'L_BUTTONVAR7'  => 'cancel='.Router::url('/paypal/cancel', true),
            'L_BUTTONVAR8'  => 'custom='.$custom,
        ];

        $request = http_build_query($request);

        $curlOptions = [
            CURLOPT_URL => "https://api-3t.".Configure::read('Paypal.sandbox')."paypal.com/nvp",
            CURLOPT_VERBOSE => 1,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_CAINFO => ROOT.DS.'vendor/cacert.pem',
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_POSTFIELDS => $request
        ];

        $ch = curl_init();
        curl_setopt_array($ch, $curlOptions);
        $response = curl_exec($ch);

        if (curl_errno($ch)) {
            debug(curl_error($ch)); die();
        } else {
            curl_close($ch);
            parse_str($response, $responseArray);
            $this->redirect($responseArray['EMAILLINK']);
        }

J'ai aussi esseyer de supprimer le CURLOPT_CAINFO vue que le VERYPEER et a false normalement il n'y a plus besoin du certificat SSL mais ca ne fonctionne pas. :(

et ça te sort toujours la meme erreur ?

Ouai toujours la meme erreur

Ok essaie de changer la version SSL pour voir ?

curl_setopt($curl, CURLOPT_SSLVERSION, 4);

Peut importe la version que je met j'ai toujours la même erreur sauf quand je le met a 2 j'ai une autre erreur : 'Unknown SSL protocol error in connection to api-3t.sandbox.paypal.com:443 '

Jai contacter 1&1 et il m'ont dit que ca devait venir d'un problème a cause de SSLV3 qui est obsolète, n'y a t-il pas un autre endroit ou je pourrait trouver un certificat plus récent ?