Bonjour,

Après de multiples recherche je viens vers vous car je n'arrive pas à resoudre mon problème. J'ai suivi le tutoriel de Grafikart sur PayPal CheckOut. Mon code :

                $api_keys = [
                    'id' => 'ID',
                    'secret' => 'SECRET'
                ];

                $apiContext = new \PayPal\Rest\ApiContext(
                    new \PayPal\Auth\OAuthTokenCredential(
                        $api_keys['id'],
                        $api_keys['secret']
                    )
                );

                $list = new \PayPal\Api\ItemList();

                $item = (new \PayPal\Api\Item())
                    ->setName('Tarif '.$tarif)
                    ->setPrice($price)
                    ->setCurrency('EUR')
                    ->setQuantity(1)
                    ->setDescription('...');

                $list->addItem($item);

                $details = (new \PayPal\Api\Details())
                    ->setSubtotal($price)
                    ->setTax(0);

                $amount = (new \PayPal\Api\Amount())
                    ->setTotal($price)
                    ->setCurrency("EUR")
                    ->setDetails($details);

                $transaction = (new \PayPal\Api\Transaction())
                    ->setItemList($list)
                    ->setDescription('Achat sur code39.fr')
                    ->setAmount($amount);

                $payment = new \PayPal\Api\Payment();
                $payment->setTransactions($transaction);
                $payment->setIntent('sale');

                $redirectUrls = (new \PayPal\Api\RedirectUrls())
                    ->setReturnUrl('http://localhost/pay.php')
                    ->setCancelUrl('http://localhost/calendrier-des-villes/');

                $payment->setRedirectUrls($redirectUrls);
                $payment->setPayer((new \PayPal\Api\Payer())->setPaymentMethod('paypal'));

                try {
                    $payment->create($apiContext);
                    echo $payment->getApprovalLink();
                } catch(\PayPal\Exception\PayPalConnectionException $e) {
                    echo "<pre>";
                    var_dump($e->getMessage());
                }

Mais au lancement du code du code j'obtiens une erreur (Les variables $tarifs et $price sont définient plus tôt) :

string(93) "Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment."

La transaction ressemble à ça :

{
   "transactions":{
      "item_list":{
         "items":[
            {
               "name":"Tarif 4 joueurs",
               "price":"56",
               "currency":"EUR",
               "quantity":1
            }
         ]
      },
      "description":"Achat sur code39.fr",
      "amount":{
         "total":"56",
         "currency":"EUR",
         "details":{
            "subtotal":"56",
            "tax":"0"
         }
      }
   },
   "intent":"sale",
   "redirect_urls":{
      "return_url":"http://localhost/pay.php",
      "cancel_url":"http://localhost/calendrier-des-villes/"
   },
   "payer":{
      "payment_method":"paypal"
   }
}

Merci de votre aide :)

7 réponses


T'as pas de shipping ?

Non je n'en ai pas !

dans ce cas essaye de le forcer à 0

je regarde l'erreur 400 et c'est souvent un pb de total mal calculé

Rien ne change, toujours la même erreur...

le système sandbox est merdique, parfois il faut attendre et ça remarche

Ok, je vais attendre un ou deux jours, et je verrai bien :) Merci

Nan, c'est bien un problème dans mon code car quand je fait avec l'exemple de paypal, ça fonctionne :

{
  "intent": "sale",
  "experience_profile_id":"experience_profile_id",
  "redirect_urls":
  {
    "return_url": "https://example.com",
    "cancel_url": "https://example.com"
  },
  "payer":
  {
    "payment_method": "paypal"
  },
  "transactions": [
  {
    "amount":
    {
      "total": "4.00",
      "currency": "USD",
      "details":
      {
        "subtotal": "2.00",
        "shipping": "1.00",
        "tax": "2.00",
        "shipping_discount": "-1.00"
      }
    },
    "item_list":
    {
      "items": [
      {
        "quantity": "1",
        "name": "item 1",
        "price": "1",
        "currency": "USD",
        "description": "item 1 description",
        "tax": "1"
      },
      {
        "quantity": "1",
        "name": "item 2",
        "price": "1",
        "currency": "USD",
        "description": "item 2 description",
        "tax": "1"
      }]
    },
    "description": "The payment transaction description.",
    "invoice_number": "merchant invoice",
    "custom": "merchant custom data"
  }]
}

Mais je vois pas ou j'ai oublier un truc ^^