'How to solve SyntaxError: Unexpected token < in JSON at position 0 in Paypal checkout in Laravel

I am doing Paypal integration in Laravel. I have used composer require srmklive/paypal to install the srmklive/paypal package in this project.

When I press the PayPal button, I get this error:

enter image description here

Here is my code:

code from blade file:

paypal.Buttons({
        createOrder: function(data, actions) {
            return fetch('api/paypal/order/create/', {
                method: 'post',
                body:JSON.stringify({
                  "value":100
                })
            }).then(function(res) {
                return res.json();
            }).then(function(orderData) {
                return orderData.id;
            });
        },

        onApprove: function(data, actions) {
            return fetch('/api/paypal/order/capture/', {
                method: 'post',
                body: JSON.stringify({
                  orderID: data.orderID
                })
            }).then(function(res) {
                return res.json();
            }).then(function(orderData) {
                var errorDetail = Array.isArray(orderData.details) && orderData.details[0];

                if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
                    return actions.restart(); 
                }

                if (errorDetail) {
                    var msg = 'Sorry, your transaction could not be processed.';
                    return alert(msg); // Show a failure message (try to avoid alerts in production environments)
                }
            });
        }

    }).render('#paypal-button-container');

code from paymentController:

class PaymentController extends Controller
{
   public function create(Request $request){
       $data = json_decode($request->getContent(), true);
       $provider = \PayPal::setProvider();
       $provider->setApiCredentials(config('paypal'));
       $token = $provider->getAccessToken();
       $provider->setAccessToken($token);

       $price = Plan::getSubscriptionPrice($data['value']);
       $description = Plan::getSubscriptionDescription($data['value']);


       $order = $provider->createOrder([
           "intent" => "CAPTURE",
           "purchase_units" => [
               [
                   "amount" => [
                       "currency_code" => "USD",
                       "value" => $price
                   ],
                   "description" => $description
               ]
           ]
       ]);
       return response()->json($order);
   }

   public function capture(Request $request) {
        $data = json_decode($request->getContent(), true);
        $orderId = $data['orderID'];

        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $result = $provider->capturePaymentOrder($orderId);
        return response()->json($result);
   }
}

How can I solve this error?



Solution 1:[1]

The route api/paypal/order/create/ is returning/outputting text that is not JSON, such as an HTML error page or something else that begins with an HTML tag.

The route must only output JSON, and must contain a valid id from the PayPal API.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Preston PHX