Home » Php » php – Paypal item description with the rest api sdk

php – Paypal item description with the rest api sdk

Posted by: admin July 12, 2020 Leave a comment

Questions:

I’m using https://github.com/paypal/rest-api-sdk-php

And i want to have a item description review to be displayed, here is the code:

  $amountDetails = new Details();
    $amountDetails->setSubtotal('7.41');
    $amountDetails->setTax('0.03');
    $amountDetails->setShipping('0.03');

    $amount = new Amount();
    $amount->setCurrency('USD');
    $amount->setTotal('7.47');
    $amount->setDetails($amountDetails);

    $transaction = new Transaction();
    $transaction->setAmount($amount);
    $transaction->setDescription('This is the payment transaction description.');




    $RedirectUrls = new RedirectUrls();
    $RedirectUrls ->setReturnUrl('http://localhost/mrSurvey/public/#/pricing');
    $RedirectUrls ->setCancelUrl('http://localhost/mrSurvey/public/#/pricing');

    $payment = new Payment();
    $payment->setIntent('sale');
    $payment->setPayer($payer);
    $payment->setTransactions(array($transaction));
    $payment->setRedirectUrls($RedirectUrls);

All i can see is the description, but i want to see item number and the subtotal, what am i missing?

Update:
So i read that i need to add a few things: so i did something like this:

 $item = new Item();
 $item->setQuantity('1');
 $item->setName('benny');
 $item->setPrice('7.41');
 $item->setCurrency('USD');
 $item->setSku('blah');


 $items = new ItemList();
 $items->addItem(array($item));

$transaction->setItemList($items);

$payment = new Payment();
$payment->setIntent('sale');
$payment->setPayer($payer);
$payment->setTransactions(array($transaction));
$payment->setRedirectUrls($RedirectUrls);

$response = $payment->create($apiContext)->toarray();

return Response::json($response);

Now the code above gives me 400 error… because of the added item stuff, any clues?

How to&Answers:

It would be appear that your on the right track from the update you got. But it would also seem you have a few issues also, then just the stated problem

try adding your code into a catch and echo out message from paypal

try{
  //your code here
}
catch(PayPal\Exception\PayPalConnectionException $e) {
  //This will show error from paypal
  $e->getData()
}

My guess cause I got similar error is your not doing the correct addition of your items (tax, shipping, subtotal, etc…) and so on. Try this sample @ https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/ExecutePayment.php and get it to work first, then modify code from sample, to sort your needs.

Below is some of my code modified and it works for me.

Note you got an item description and an transaction description

 //run x through loop with ++
 $x = 0;

 //for item 
 $items[$x] = new Item();
 $items->setName($item_name)
 ->setDescription($item_description)
 ->setCurrency($currency)
 ->setQuantity($item_quantity)
 ->setTax($item_tax)
 ->setPrice($item_price)
 ->setSku($item_sku);

  $itemList = new ItemList();
  $itemList->setItems($items);

  //for transaction
  $transaction = new Transaction();
  $transaction
  ->setAmount($amount)
  ->setItemList($itemList)
  ->setDescription($payment_description)
  ->setInvoiceNumber($invoice_number);

function getTotals($quantity, $tax, $price){
  $tax = $tax * $quantity;
  $subtotal = $price * $quantity;
  $total = $tax + $subtotal;
} 
total = getTotal($item_quantity, $item_tax, $item_price);

Answer:

I found the answer, we need more details for create a transaction, and you have to set correct number to subTotal(), total() etc…

Each price item * Quantity = Subtotal

Subtotal +- Tax, Shipping etc... = total

This is what I have :

        $sdkConfig = array(
            "mode" => "sandbox"
        );

        $cred = new OAuthTokenCredential($client_id, $secret, $sdkConfig);
        $apiContext = new ApiContext($cred, 'Request' . time());
        $apiContext->setConfig($sdkConfig);

        $payer = new Payer();
        $payer->setPaymentMethod("paypal");

        foreach ($cartHasItems as $key => $order) {
            $item[$key] = new PayPalItem();
            $item[$key]->setName($order->getItem()->getName())
                ->setCurrency('EUR')
                ->setQuantity($order->getQuantity())
                ->setPrice($order->getItem()->getPrice());
        }

        if($cart->getPromoCode()){
            $item[1] = new PayPalItem();
            $item[1]->setName('Promo code '.$cart->getPromoCode()->getCode())
                ->setCurrency('EUR')
                ->setQuantity(1)
                ->setPrice(-$this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'Promo'));
        }

        $itemList = new ItemList();
        $itemList->setItems($item);

        $details = new Details();
        $details->setTax($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'HT')*20/100)
                ->setSubtotal($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'HT'));

        $amount = new Amount();
        $amount->setCurrency("EUR")
            ->setTotal($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'All'))
            ->setDetails($details);

        $transaction = new Transaction();
        $transaction->setAmount($amount)
            ->setItemList($itemList)
            ->setDescription("Payment description")
            ->setInvoiceNumber(uniqid());

        $redirectUrls = new RedirectUrls();
        $redirectUrls->setReturnUrl($this->generateUrl('paypal_success', array(), UrlGeneratorInterface::ABSOLUTE_URL));
        $redirectUrls->setCancelUrl($this->generateUrl('order_validation', array('type' => 'paypal'), UrlGeneratorInterface::ABSOLUTE_URL));

        $payment = new Payment();
        $payment->setIntent("sale")
            ->setPayer($payer)
            ->setRedirectUrls($redirectUrls)
            ->setTransactions(array($transaction));

        $payment->create($apiContext);

Answer:

Add this

$transaction->setDescription("Payment description")