Paypal PHP REST service - "access token does not have required scope"

paypal, php, rest

Solution

In your Paypal developer account, under My Apps > [Your App], make sure the feature you are trying to use is enabled in the APP SETTINGS section.

Problem

I'm coding in PHP using the Paypal REST SDK. I've set up my Sandbox account to use AUD. I worked this out after realising that my initial transactions were in USD and the transactions were getting held. Using my revised code I'm trying to create payment - I assume I'll get back a URL which will allow me to redirect the user to approve the payment. I'm getting a message which says: Exception: Got Http response code 403 when accessing https://api.sandbox.paypal.com/v1/payments/payment. Retried 0 times. string(215) "{"name":"REQUIRED_SCOPE_MISSING","message":"Access token does not have required scope","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#REQUIRED_SCOPE_MISSING","debug_id":"34683601f5dcd"}" My code is: $apiContext = new ApiContext(new OAuthTokenCredential( 'xxxxxx', 'xxxxxx')); ``` //### FundingInstrument // A resource representing a Payer's funding instrument. // For direct credit card payments, set the CreditCard // field on this object. $fi = new FundingInstrument(); $creditCardToken = new CreditCardToken(); $creditCardToken->setCreditCardId($creditcard->cardToken); $fi->setCreditCardToken($creditCardToken); // ### Payer // A resource representing a Payer that funds a payment // For direct credit card payments, set payment method // to 'credit_card' and add an array of funding instruments. $payer = new Payer(); $payer->setPaymentMethod("credit_card") ->setFundingInstruments(array($fi)); // ### Itemized information // (Optional) Lets you specify item wise // information $paymentItems=Yii::app()->session['paymentitems']; $items=array(); $total=0; foreach ($paymentItems as $item) { $pp_item = new Item(); $pp_item->setName("Donation to ".$item->organisation->organisationName) ->setCurrency('AUD') ->setQuantity(1) ->setPrice($item->amount); array_push($items,$pp_item); $total+=(float)$item->amount; } $itemList = new ItemList(); $itemList->setItems($items); // ### Amount // Lets you specify a payment amount. // You can also specify additional details // such as shipping, tax. $amount = new Amount(); $amount->setCurrency("AUD") ->setTotal($total); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who // is fulfilling it. $transaction = new Transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription("Payment description"); // ### Payment // A Payment Resource; create one using // the above types and intent set to sale 'sale' $payment = new Payment(); $payment->setIntent("sale") ->setPayer($payer) ->setTransactions(array($transaction)); // ### Create Payment // Create a payment by calling the payment->create() method // with a valid ApiContext (See bootstrap.php for more on `ApiContext`) href // The return object contains the state. try { $response=$payment->create($apiContext); var_dump($response); //$this->redirect($response->links[0]->href); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ``` Any thoughts as to what this message means. It would seem that direct credit card payments are not supported by Paypal in Australia, but I don't think that's the problem.

Original source