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 ! ^^
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.
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 !