Paypal Express Checkout : Ajoute de plusieurs produits

Par Alexe, il y a 8 ans


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, il y a 8 ans

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, il y a 8 ans

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 !

Flo.S, il y a 8 ans

Avec plaisir :D