Salut à toutes et à tous!

J'ai un problème pour communiqué avec Paypal après avoir suivi le tuto "Créer un système d'abonnement".
Quand je valide mon formulaire, je me retrouve avec les erreurs suivantes :

\app\Controller\OrdersController.php (line 65)
array(
'TIMESTAMP' => '2013-05-28T03:43:50Z',
'CORRELATIONID' => 'c48866e6b8a08',
'ACK' => 'Failure',
'VERSION' => '87',
'BUILD' => '5908853',
'L_ERRORCODE0' => '10002',
'L_SHORTMESSAGE0' => 'Security error',
'L_LONGMESSAGE0' => 'Security header is not valid',
'L_SEVERITYCODE0' => 'Error'
)

Je n'arrive pas à passer cette étape pour recevoir le header de paypal.

<?php
class OrdersController extends AppController{
    function order(){
        if (!empty($this->request->data)) {
            // debug($this->request->data); die();
            $country = $this->request->data'Pays'];
            $totalItem = $this->request->data'Order']'pink']+$this->request->data'Order']'green']+$this->request->data'Order']'white']+$this->request->data'Order']'blue'];
            $pu = $this->request->data'Order']'Prix Unitaire'];
            $shipping = number_format($this->request->data'Order']'Envoi'],2);
            $total = number_format($this->request->data'Order']'Montant Total'],2);
            // $total = "100";
            $custom = "action=order&country=$country&item=$totalItem&pu=$pu&shipping=$shipping&amount=$total";
            /*
            ** TEST reception données paypal
            */
            $request = array(
                'METHOD' => 'BMCreateButton',
                'VERSION' => '87',
                'USER' => Configure::read('Paypal.USER'),
                'PWD' => Configure::read('Paypal.PWD'),
                'SIGNATURE' => Configure::read('Paypal.SIGNATURE'),
                'BUTTONCODE' => 'HOSTED',
                'BUTTONTYPE' => 'BUYNOW',
                'BUTTONSUBTYPE' => 'PRODUCTS',
                'L_BUTTONVAR0' => 'business='.Configure::read('Paypal.mail'),
                'L_BUTTONVAR1' => "item_name=Jouet x$totalItem au prix unitaire de $pu",
                'L_BUTTONVAR2' => "currency_code=CAD",
                'L_BUTTONVAR3' => "shipping=$shipping",
                'L_BUTTONVAR4' => "amount=$total",
                'L_BUTTONVAR5' => "no_note=1",
                'L_BUTTONVAR6' => "notify_url=".Router::url('/paypal/notify',true),
                'L_BUTTONVAR7' => "return=".Router::url('/paypal/success',true),
                'L_BUTTONVAR8' => "cancel=".Router::url('/paypal/cancel',true),
                'L_BUTTONVAR9' => "custom=$custom"
                );
            $request = http_build_query($request);
            // debug($request); die();
            $curlOptions = array(
                CURLOPT_URL => "https://api-3t.".Configure::read('Paypal.sandbox')."paypal.com/nvp",
                CURLOPT_VERBOSE => 1,
                CURLOPT_SSL_VERIFYPEER => true,
                CURLOPT_SSL_VERIFYHOST => 1,
                // Certificat : http://curl.haxx.se/ca/cacert.pem
                CURLOPT_CAINFO => APP.'Vendor'.DS.'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);
                debug($responseArray); die();
            }
        }
    }
}

Merci d'avance pour votre aide!

2 réponses


LivinInChina
Auteur
Réponse acceptée

Merci Hotgear, je viens de regarder le post et mes codes API ont l'air bon.

Je viens de tomber sur ce sujet qui m'a permis de remettre en question mon système :
http://stackoverflow.com/questions/12313347/paypalapi-error-on-prestashop

En réalité dans mon bootstrap j'ai fais une condition comme dans le tuto :

if ($_SERVER'SERVER_NAME'] == '000.000.0.000') {
    //code
}

Et je ne vois pas pourquoi mais il prenait le chemin du else donc ça ne fonctionnait pas, j'ai fais ça en manuel et tout fonctionne!