Входящий запрос JSON не отображает запрос API "

Я получаю сообщение об ошибке при попытке создать платеж, ошибка, которую я получаю:

-url: " https://api.sandbox.paypal.com/v1/payments/payment" -data: "{" name ":" MALFORMED_REQUEST "," message ":" Входящий запрос JSON не сопоставить API request "," information_link ":" https://developer.paypal.com/webapps/developer/doc▶ "#message:" Получил код ответа Http 400 при доступе https://api.sandbox.paypal.com/v1/payments/payment.

Я пытаюсь создать такие платежи, добавив его в список, а затем добавив его в транзакцию

    // type of paypal payment (redirect)
    $payer = PayPal::Payer();
    $payer->setPaymentMethod('paypal');

    // iniate the item
    $item = Paypal::item();

    // iniate the ammount
    $amount = PayPal:: Amount();

    switch($type)
    {            
        case 'job':
            $item
                ->setName('Job advertisement on '. Config('app.name'))
                ->setDescription('Job advertisement on '. Config('app.name'))
                ->setCurrency('GBP')
                ->setQuantity(1)
                ->setTax(0.2)
                ->setPrice(Config('settings.job_price'));

            $details = Paypal::Details();
            $details->setShipping(1.2)
                ->setTax(1.3)
                ->setSubtotal(17.50);

            $amount->setCurrency('GBP')
                ->setDetails($details)
                ->setTotal(Config('settings.job_price'));
        break;
        case 'course':   
            $item
                ->setName('Course advertisement on '. Config('app.name'))
                ->setDescription('Course advertisement on '. Config('app.name'))
                ->setCurrency('GBP')
                ->setQuantity(1)
                ->setTax(0.2)
                ->setPrice(Config('settings.course_price'));

            $details = Paypal::Details();
            $details->setShipping(1.2)
                ->setTax(1.3)
                ->setSubtotal(17.50);

            $amount->setCurrency('GBP')
                ->setDetails($details)
                ->setTotal(Config('settings.course_price'));
        break;
    }

    // geerate the item list
    $itemList = Paypal::itemList();
    $itemList->setItems($item);

    // now create the transactions
    $transaction = Paypal::transaction();
    $transaction
        ->setAmount($amount)
        ->setItemList($itemList)
        ->setDescription("Payment description")
        ->setInvoiceNumber(uniqid());

    // setup the redirect uri's'
    $redirectUrls = PayPal:: RedirectUrls();
    $redirectUrls
        ->setReturnUrl(route('payment.complete'))
        ->setCancelUrl(route('payment.cancelled'));

    // set up the person information
    $payment = PayPal::Payment();
    $payment
        ->setIntent('authorize')
        ->setPayer($payer)
        ->setRedirectUrls($redirectUrls)
        ->setTransactions([$transaction]);
    print_r($payment);
    try{
        dd($payment->create($this->_apiContext));
        $response = $payment->create($this->_apiContext);
    } catch (\PayPal\Exception\PayPalConnectionException $ex) {
       dd($ex);
    } catch (Exception $ex) {
        die($ex);
    }
    $redirectUrl = $response->links[1]->href;

    // redirect to paypal for payment
    return Redirect::to( $redirectUrl );

Передаваемые данные:

PayPal\Api\Payment Object ( 
    [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
        [intent] => authorize [payer] => PayPal\Api\Payer Object ( 
            [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                [payment_method] => paypal 
            ) 
        ) 
        [redirect_urls] => PayPal\Api\RedirectUrls Object ( 
            [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                [return_url] => http://localhost/payment/payment-done 
                [cancel_url] => http://localhost/payment/payment-cancelled 
            ) 
        ) 
        [transactions] => Array ( 
            [0] => PayPal\Api\Transaction Object ( 
                [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                    [amount] => PayPal\Api\Amount Object ( 
                        [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                            [currency] => GBP 
                            [details] => PayPal\Api\Details Object ( 
                                [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                                    [shipping] => 1.20 
                                    [tax] => 1.30 
                                    [subtotal] => 17.50 
                                ) 
                            ) 
                            [total] => 125 
                        ) 
                    ) 
                    [item_list] => PayPal\Api\ItemList Object ( 
                        [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                            [items] => PayPal\Api\Item Object ( 
                                [_propMap:PayPal\Common\PayPalModel:private] => Array ( 
                                    [name] => Job advertisement on Laravel 
                                    [description] => Job advertisement on Laravel 
                                    [currency] => GBP 
                                    [quantity] => 1 
                                    [tax] => 0.20 
                                    [price] => 125 
                                ) 
                            ) 
                        ) 
                    ) 
                    [description] => Payment description 
                    [invoice_number] => 599cd8d03b626 
                ) 
            ) 
        ) 
    ) 
)

Как я могу это исправить?

Ответы

Ответ 1

Достаточно положить

$payment->setIntent('authorize')

Вместо

$payment->setIntent('sale')

и исключить выполнение

 $execution = new PaymentExecution(); $result = $payment->execute($execution, $apiContext);

Затем, после

$payment->create

Я использовал "href" из

$payment->links

сделать перенаправление. Все прошло отлично.

Входящий запрос JSON не отображается на запрос API

Ответ 2

Изменить ниже код

$transaction- > setAmount (Config ( 'settings.job_price'))

to

$amount =   new Amount();
$amount->setCurrency('USD')  // set to your currency
        ->setTotal($total);

$transaction->setAmount($amount)

Я думаю, что параметр setAmount должен быть членом класса Amount.

Ответ 3

Подробнее об этой проблеме...

Посетите Paypal Git, где эта проблема была сообщена и исправлена.