PayPal Checkout onApprove функция - PullRequest
0 голосов
/ 08 марта 2020

Привет, ребята. Я использую PayPal API Checkout для осуществления платежей с моего сайта.

Это код, который я использую для захвата продуктов на стороне сервера, и он хорошо работает

<?php
require('../ini.php');

require 'vendor/autoload.php';
$ids = [
  'id' =>     getSetting('paypalLiveKey','return',$con),
  'secret' => getSetting('paypalSecretKey','return',$con)
];


$apiContext = new \PayPal\Rest\ApiContext(
  new \PayPal\Auth\OAuthTokenCredential(
    $ids['id'],
    $ids['secret']
  )
);


$redirectUrls = (new \PayPal\Api\RedirectUrls())
    ->setReturnUrl('/include/paypalPHP/payProducts.php')
    ->setCancelUrl('/checkout.php');


$list = new \PayPal\Api\ItemList();


$item = (new \PayPal\Api\Item())
    ->setName('title')
    ->setPrice('100')
    ->setCurrency('USD')
    ->setQuantity('1');

  $list->addItem($item);


$details = (new \PayPal\Api\Details())
    ->setSubtotal($total )
    ->setTax('0.00')
    ->setShipping('0.00')
    ->setShippingDiscount('0.00');

$amount = (new \PayPal\Api\Amount())
    ->setTotal('100')
    ->setCurrency("USD")
    ->setDetails($details);

$transaction = (new \PayPal\Api\Transaction())
    ->setItemList($list)
    ->setDescription('New Payment from ')
    ->setAmount($amount)
    ->setCustom('site');

$payer = (new \PayPal\Api\Payer())
    ->setPaymentMethod('paypal');

$payment = (new \PayPal\Api\Payment())
    ->setTransactions([$transaction])
    ->setIntent('sale')
    ->setRedirectUrls($redirectUrls)
    ->setPayer($payer);


try {
  $payment->Create($apiContext);
  // header("location: ".$payment->getApprovalLink());

  echo json_encode([
    'token' => $payment->getToken(),

  ]);
} catch (\PayPal\Exception\PayPalConnectionException $e){
  header('loaction: '.ERROR_PAGE);
  var_dump(json_decode($e->getData()));
}

. второй код, который я использую для совершения платежей

<?php
require('../ini.php');

require 'vendor/autoload.php';
$ids = [
  'id' =>     getSetting('paypalLiveKey','return',$con),
  'secret' => getSetting('paypalSecretKey','return',$con)
];

$apiContext = new \PayPal\Rest\ApiContext(
  new \PayPal\Auth\OAuthTokenCredential(
    $ids['id'],
    $ids['secret']
  )
);


$payment = \PayPal\Api\Payment::get($_POST['paymentID'],$apiContext);

$execution = (new \PayPal\Api\PaymentExecution())
        ->setPayerId($_POST['payerID'])
        ->setTransactions($payment->getTransactions());

try{
    $payment->execute($execution,$apiContext);

    // payment is done

    echo json_encode([
        'id' => $payment->getId()
      ]);

    var_dump($payment->getTransactions()[0]->getCustom());
    var_dump($payment);

}catch(\PayPal\Exeception\PayPalConnectionException $e){
    header('loaction: '.ERROR_PAGE);
    var_dump(json_decode($e->getData()));
}

код, который я использую на стороне клиента для получения этих кодов

paypal.Buttons({

    // Set up the transaction
    createOrder: function(data, actions) {
        return fetch('/include/paypalPHP/prepareProducts.php', {
            method: 'post',
            headers: {
            'content-type': 'application/json'
            },
        }).then(function(res) {
            return res.json();
        }).then(function(data) {
            return data.token;
        });
    },

    // Finalize the transaction
    onApprove: function(data, actions) {
        return fetch('/include/paypalPHP/payProducts.php', {
            method: 'post',
            headers: {
                'content-type': 'application/json'
            },
            body: JSON.stringify({
                paymentID: data.paymentID,
                payerID:   data.payerID
            })
        })
    }


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

теперь, если я нажимаю на кнопки PayPal, товар хорошо показал себя, но проблема в том, что когда он нажимает кнопку оплаты в окне PayPal, ничего не платится, я думаю, что проблема с onApprove функцией

любая помощь, пожалуйста

1 Ответ

0 голосов
/ 19 апреля 2020

проблема была в том, что setReturnUrl для некоторых, это не должна быть та же страница, что и в посте одобрения функции. поэтому вы должны изменить его на что-то другое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...