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
mais le verifier à false
http://stackoverflow.com/questions/15135834/php-curl-curlopt-ssl-verifypeer-ignored
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. :(
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 ?