Search code examples
phparrayslaravelpaypalpayment

Cannot use object of type PayPal\Api\Amount as array


I have an error: "Cannot use object of type PayPal\Api\Amount as array", I kinda confused what's the first thing to fix. Here are the errors:

E:\laragon\www\thepaymentss\app\Http\Controllers\PaypalController.php

    if (empty(Input::get('PayerID')) || empty(Input::get('token'))) {
        \Session::put('error','Payment failed');
        return Redirect::route('paywithpaypal');
    }
    $payment = Payment::get($payment_id, $this->_api_context);
    /** PaymentExecution object includes information necessary **/
    /** to execute a PayPal account payment. **/
    /** The payer_id is added to the request query parameters **/
    /** when the user is redirected from paypal back to your site **/
    $execution = new PaymentExecution();
    $execution->setPayerId(Input::get('PayerID'));
    /**Execute the payment **/
    $result = $payment->execute($execution, $this->_api_context);
    /** dd($result);exit; /** DEBUG RESULT, remove it later **/
    if ($result->getState() == 'approved') { 
        // dd($result);

        $transactions=new Transactions();
        // $transactions->id=$result->id;
        $transactions->amount=$result->transactions[0]->amount[0]->total;
        $transactions->sender=$result->payer[0]->payer_info[0]->email;
        $transactions->type=$result->payer[0]->payment_method;
        $transactions->currency=$result->transactions[0]->amount[0]->currency;
        $transactions->description=$result->transactions[0]->description;
        $transactions->fee='0';
        $transactions->client_id=1;
        $transactions->status=$result->state;
        $transactions->receiver=$result->transactions[0]->payee[0]->email;

        $transactions->Save();



        /** it's all right **/
        /** Here Write your database logic like that insert record or value in database if you want **/

        \Session::put('success','Payment success');
        return Redirect::route('paywithpaypal');
    }
        \Session::put('error','Payment failed');

The error of "Cannot use object of type PayPal\Api\Amount as array" is at line

$transactions->amount=$result->transactions[0]->amount[0]->total;

Here's the code of Paypal/Api/Amount:

    <?php

namespace PayPal\Api;

use PayPal\Common\PayPalModel;
use PayPal\Converter\FormatConverter;
use PayPal\Validation\NumericValidator;

/**
 * Class Amount
 *
 * payment amount with break-ups.
 *
 * @package PayPal\Api
 *
 * @property string currency
 * @property string total
 * @property \PayPal\Api\Details details
 */
class Amount extends PayPalModel
{
    /**
     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/). PayPal does not support all currencies.
     *
     * @param string $currency
     * 
     * @return $this
     */
    public function setCurrency($currency)
    {
        $this->currency = $currency;
        return $this;
    }

    /**
     * 3-letter [currency code](https://developer.paypal.com/docs/integration/direct/rest_api_payment_country_currency_support/). PayPal does not support all currencies.
     *
     * @return string
     */
    public function getCurrency()
    {
        return $this->currency;
    }

    /**
     * Total amount charged from the payer to the payee. In case of a refund, this is the refunded amount to the original payer from the payee. 10 characters max with support for 2 decimal places.
     *
     * @param string|double $total
     * 
     * @return $this
     */
    public function setTotal($total)
    {
        NumericValidator::validate($total, "Total");
        $total = FormatConverter::formatToPrice($total, $this->getCurrency());
        $this->total = $total;
        return $this;
    }

    /**
     * Total amount charged from the payer to the payee. In case of a refund, this is the refunded amount to the original payer from the payee. 10 characters max with support for 2 decimal places.
     *
     * @return string
     */
    public function getTotal()
    {
        return $this->total;
    }

    /**
     * Additional details of the payment amount.
     *
     * @param \PayPal\Api\Details $details
     * 
     * @return $this
     */
    public function setDetails($details)
    {
        $this->details = $details;
        return $this;
    }

    /**
     * Additional details of the payment amount.
     *
     * @return \PayPal\Api\Details
     */
    public function getDetails()
    {
        return $this->details;
    }

}

Can someone explain and help me why isn't it working?


Solution

  • $transactions->amount=$result->transactions[0]->amount[0]->total;
    

    As the error message says, you can't use that "amount" as an array. It's not an array, it's an object. So:

    $transactions->amount=$result->transactions[0]->amount->total;