Кнопки интеллектуального платежа PayPal: ошибка: JSON .parse: неожиданный символ в строке 1 столбца 1 данных JSON - PullRequest
2 голосов
/ 23 февраля 2020

Я пытался разобраться с этой проблемой уже 2 дня.

Я хочу внедрить Smart Pay Buttons из PayPal, буквально внимательно следил за каждым шагом объяснения, но все еще получал следующую ошибку:

Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Мой javascript для рендеринга кнопок :

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');

Мой CreateOrder. php:

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 [...]
...