Bonjour,
J'ai mis en place un systeme de payement via paypal en suivent le tutoriel de @Grafikart !

Avec 1 seul produit tous fonctionne, mais quand je mais quand j'ajoute plusieurs différent sa ne fonctionne plus et sa me mais un message comme celui-ci :

Fatal error: Uncaught PayPal\Exception\PayPalConnectionException: Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment. in /public/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php:202 Stack trace: #0 /public/vendor/paypal/rest-api-sdk-php/lib/PayPal/Transport/PayPalRestCall.php(78): PayPal\Core\PayPalHttpConnection->execute('{"transactions"...') #1 /public/vendor/paypal/rest-api-sdk-php/lib/PayPal/Common/PayPalResourceModel.php(104): PayPal\Transport\PayPalRestCall->execute(Array, '/v1/payments/pa...', 'POST', '{"transactions"...', Array) #2 /public/vendor/paypal/rest-api-sdk-php/lib/PayPal/Api/Payment.php(576): PayPal\Common\PayPalResourceModel::executeCall('/v1/payments/pa...', 'POST', '{"transactions"...', NULL, Object(PayPal\Rest\ApiContext), Object(PayPal\Transport\PayPalRestCall)) #3 /public/cores/Payment.php(81): PayPal\Api\Paymen in /public/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php on line 202

J'ai remarquer que dans le ItemList() il y a que le dernier qui s'ajoute...

$_SESSION[$this->getTrade()->getSessionName()]['products'] Affiche se tableau :

    array(2) {
      [0]=>
      object(stdClass)#67 (4) {
        ["product_id"]=>
        string(1) "1"
        ["product_name"]=>
        string(16) "LG TV 01456F8 4k"
        ["product_price"]=>
        string(3) "899"
        ["product_statut"]=>
        string(1) "0"
      }
      [1]=>
      object(stdClass)#60 (4) {
        ["product_id"]=>
        string(1) "2"
        ["product_name"]=>
        string(30) "Samsung TV 047356F8 4k SmartTV"
        ["product_price"]=>
        string(4) "1250"
        ["product_statut"]=>
        string(1) "0"
      }
    }

la boucle ressemble à sa :

        $list = new ItemList();
        foreach($_SESSION[$this->getTrade()->getSessionName()]['products'] as $product):
            $item = (new Item())
                ->setName($product->product_id)
                ->setPrice($product->product_price)
                ->setCurrency(Json::get('modules', 'trade', 'currency'))
                ->setQuantity($_SESSION[$this->getTrade()->getSessionName()]['quantity'][$product->product_id]);
            return $list->addItem($item);
        endforeach;

et la liste des items retourne se tableau :

object(PayPal\Api\ItemList)#59 (1) {
  ["_propMap":"PayPal\Common\PayPalModel":private]=>
  array(1) {
    ["items"]=>
    array(1) {
      [0]=>
      object(PayPal\Api\Item)#60 (1) {
        ["_propMap":"PayPal\Common\PayPalModel":private]=>
        array(4) {
          ["name"]=>
          string(1) "1"
          ["price"]=>
          string(3) "899"
          ["currency"]=>
          string(3) "EUR"
          ["quantity"]=>
          int(1)
        }
      }
    }
  }
}

Il manque donc 1 articles dans l'itemListe !
Je ne vois donc pas comment réctifier se souci !! :/

Si jamais c'est déjà arriver à quelqu'un...
Merci pour votre aide ! ^^

3 réponses


Flo.S
Réponse acceptée

Hello,

Déjà si je compare au tuto, dans le tuto il est noté ceci :

foreach ($basket->getProducts() as $product) {
            $item = (new \PayPal\Api\Item())
                ->setName($product->getName())
                ->setPrice($product->getPrice())
                ->setCurrency('EUR')
                ->setQuantity(1);
            $list->addItem($item);
        }

Or, dans ton code, je voie ceci :

foreach($_SESSION[$this->getTrade()->getSessionName()]['products'] as $product):
            $item = (new Item())
                ->setName($product->product_id)
                ->setPrice($product->product_price)
                ->setCurrency(Json::get('modules', 'trade', 'currency'))
                ->setQuantity($_SESSION[$this->getTrade()->getSessionName()]['quantity'][$product->product_id]);
            return $list->addItem($item);
        endforeach;

Puis quand, on peut placer un return dans un foreach ? Return renvoie une valeur lors de l'appel d'une fonction (http://php.net/manual/fr/function.return.php), ton erreur est surement lié du coup.

Alexe
Auteur

Bien vu ! effectivement le Return n'etait pas à sa place !! mais vu qu'elle etait dans une fonction séparé et je l'appelais comme ceci : $this->item(); je pensais pas quand plaçant le return sa allais me faire des erreurs quand il y aurais plusieurs articles dans le panier !!
Pour le coup j'ai du changer ma fason de faire ma classe pour que sa puissent fonctionner correctement !

du coup il me reste plus cas faire les enregistrement des commande dans la base de donnée et c'est fini !! ^^

Merci pour ton aide !

Avec plaisir :D