Javascript PayPal智能支付按钮:错误:JSON.parse:JSON数据第1行第1列出现意外字符

Javascript PayPal智能支付按钮:错误:JSON.parse:JSON数据第1行第1列出现意外字符,javascript,php,json,parsing,paypal,Javascript,Php,Json,Parsing,Paypal,我已经试着解决这个问题两天了 我想从PayPal实现智能支付按钮,严格遵循解释的每一步,但仍然会出现以下错误: Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data 用于按钮渲染的Myjavascript: paypal.Buttons({ createOrder: function() { return fetch('vendor/paypal/paypa

我已经试着解决这个问题两天了

我想从PayPal实现智能支付按钮,严格遵循解释的每一步,但仍然会出现以下错误:

Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data
用于按钮渲染的Myjavascript

paypal.Buttons({
        createOrder: function() {
            return fetch('vendor/paypal/paypal-checkout-sdk/samples/CaptureIntentExamples/CreateOrder.php', {
                method: 'post',
                headers: {
                    'content-type': 'application/json'
                }
            }).then(function(res) {
                return res.json();
            }).then(function(data) {
                return data.orderID; // Use the same key name for order ID on the client and server
            });
        },
        onApprove: function(data, actions) {
            // This function captures the funds from the transaction.
            return actions.order.capture().then(function(details) {
                // This function shows a transaction success message to your buyer.
                alert('Transaction completed by ' + details.payer.name.given_name);
            });
        },
        onError: function(err) {
            alert(err);
        }
    }).render('#paypal-button-container');
namespace Sample\CaptureIntentExamples;

require __DIR__ . '/../../../../autoload.php';


use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

class CreateOrder
{

    /**
     * Setting up the JSON request body for creating the Order. The Intent in the
     * request body should be set as "CAPTURE" for capture intent flow.
     * 
     */
    private static function buildRequestBody()
    {
        return array(
            'intent' => 'CAPTURE',
            'application_context' =>
                array(
                    'return_url' => 'https://example.com/return',
                    'cancel_url' => 'https://example.com/cancel'
                ),
            'purchase_units' =>
                array(
                    0 =>
                        array(
                            'amount' =>
                                array(
                                    'currency_code' => 'USD',
                                    'value' => '220.00'
                                )
                        )
                )
        );
    }

    /**
     * This is the sample function which can be sued to create an order. It uses the
     * JSON body returned by buildRequestBody() to create an new Order.
     */
    public static function createOrder($debug=false)
    {
        $request = new OrdersCreateRequest();
        $request->headers["prefer"] = "return=representation";
        $request->body = self::buildRequestBody();

        $client = PayPalClient::client();
        $response = $client->execute($request);
        if ($debug)
        {
            print "Status Code: {$response->statusCode}\n";
            print "Status: {$response->result->status}\n";
            print "Order ID: {$response->result->id}\n";
            print "Intent: {$response->result->intent}\n";
            print "Links:\n";
            foreach($response->result->links as $link)
            {
                print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
            }
            // To toggle printing the whole response body comment/uncomment below line
            echo json_encode($response->result, JSON_PRETTY_PRINT), "\n";
        }


        return $response;
    }
}

if (!count(debug_backtrace()))
{
    CreateOrder::createOrder(true);
}
MyCreateOrder.php

paypal.Buttons({
        createOrder: function() {
            return fetch('vendor/paypal/paypal-checkout-sdk/samples/CaptureIntentExamples/CreateOrder.php', {
                method: 'post',
                headers: {
                    'content-type': 'application/json'
                }
            }).then(function(res) {
                return res.json();
            }).then(function(data) {
                return data.orderID; // Use the same key name for order ID on the client and server
            });
        },
        onApprove: function(data, actions) {
            // This function captures the funds from the transaction.
            return actions.order.capture().then(function(details) {
                // This function shows a transaction success message to your buyer.
                alert('Transaction completed by ' + details.payer.name.given_name);
            });
        },
        onError: function(err) {
            alert(err);
        }
    }).render('#paypal-button-container');
namespace Sample\CaptureIntentExamples;

require __DIR__ . '/../../../../autoload.php';


use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

class CreateOrder
{

    /**
     * Setting up the JSON request body for creating the Order. The Intent in the
     * request body should be set as "CAPTURE" for capture intent flow.
     * 
     */
    private static function buildRequestBody()
    {
        return array(
            'intent' => 'CAPTURE',
            'application_context' =>
                array(
                    'return_url' => 'https://example.com/return',
                    'cancel_url' => 'https://example.com/cancel'
                ),
            'purchase_units' =>
                array(
                    0 =>
                        array(
                            'amount' =>
                                array(
                                    'currency_code' => 'USD',
                                    'value' => '220.00'
                                )
                        )
                )
        );
    }

    /**
     * This is the sample function which can be sued to create an order. It uses the
     * JSON body returned by buildRequestBody() to create an new Order.
     */
    public static function createOrder($debug=false)
    {
        $request = new OrdersCreateRequest();
        $request->headers["prefer"] = "return=representation";
        $request->body = self::buildRequestBody();

        $client = PayPalClient::client();
        $response = $client->execute($request);
        if ($debug)
        {
            print "Status Code: {$response->statusCode}\n";
            print "Status: {$response->result->status}\n";
            print "Order ID: {$response->result->id}\n";
            print "Intent: {$response->result->intent}\n";
            print "Links:\n";
            foreach($response->result->links as $link)
            {
                print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
            }
            // To toggle printing the whole response body comment/uncomment below line
            echo json_encode($response->result, JSON_PRETTY_PRINT), "\n";
        }


        return $response;
    }
}

if (!count(debug_backtrace()))
{
    CreateOrder::createOrder(true);
}
基本上都是从PayPal漫游中复制的。 如果我直接访问CreateOrder.php,它正在创建一个订单,我可以看到没有错误的响应

Status Code: 201 Status: CREATED [...]

我所做的是删除以txt格式打印响应的代码部分。这就是为什么会出现JSON语法错误

public static function createOrder($debug=false)
  {
    $request = new OrdersCreateRequest();
    $request->prefer('return=representation');
    $request->body = self::buildRequestBody();
   // 3. Call PayPal to set up a transaction
    $client = PayPalClient::client();
    $response = $client->execute($request);

      // To print the whole response body, uncomment the following line
      echo json_encode($response->result, JSON_PRETTY_PRINT);

    // 4. Return a successful response to the client.
    return $response;
  }

顺便说一句,这个答案非常有用:

如果您在Chrome中检查响应,它可能会在控制台中告诉您
“SyntaxError:JSON中意外的标记S
,这是响应的第一个字母:'状态代码…'。”。我现在也有同样的问题。它试图接收一个JSON文件,它接收的只是响应:
Status code:201 Status:CREATED Order ID: