Интеграция PayPal Smart Payment Buttons с серверным REST API - PullRequest
2 голосов
/ 22 апреля 2020

Я знаю, что есть несколько вопросов, касающихся интеграции PayPal, но я пытаюсь внедрить PayPal Express Оформление заказа с помощью смарт-кнопок и REST API, но безуспешно.

Я хочу сделать следующее:

  1. Создание авторизации платежа (с payid и orderid)

  2. Отправьте это payid клиенту (javascript) для быть утвержденным.

  3. Перенаправить после оплаты на страницу подтверждения.

Я уже создал Авторизацию Платежа с кодом ниже:

<?php

// 1. Autoload the SDK Package. This will include all the files and classes to your autoloader
// Used for composer based installation
require __DIR__  . '/PayPal-PHP-SDK/autoload.php';
// Use below for direct download installation
// require __DIR__  . '/PayPal-PHP-SDK/autoload.php';


// After Step 1
$apiContext = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential(
            'client id',     // ClientID
            'cliente secret'      // ClientSecret
        )
);

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

$amount = new \PayPal\Api\Amount();
$amount->setTotal('1.00');
$amount->setCurrency('USD');

$transaction = new \PayPal\Api\Transaction();
$transaction->setAmount($amount);

$redirectUrls = new \PayPal\Api\RedirectUrls();
$redirectUrls->setReturnUrl("https://example.com/your_redirect_url.html")
    ->setCancelUrl("https://example.com/your_cancel_url.html");

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


    // After Step 3
try {
    $payment->create($apiContext);
    echo $payment;

    echo "\n\nRedirect user to approval_url: " . $payment->getApprovalLink() . "\n";
      echo $data= json_encode($payment->id, JSON_PRETTY_PRINT), "\n";
    echo "</br>";echo "</br>";
    echo $data= $payment->id;
}
catch (\PayPal\Exception\PayPalConnectionException $ex) {
    // This will print the detailed information on the exception.
    //REALLY HELPFUL FOR DEBUGGING
    echo json_encode($ex->getData()->id, JSON_PRETTY_PRINT), "\n";
    echo "</br>";echo "</br>";
    echo $ex->getData()->id;
}
?>

Мои настройки следующие (Пожалуйста, исправьте, если это не так):

  1. Пользователь выбирает элемент и отправляет форму.

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

  3. Пользователь должен быть перенаправлен на последнюю страницу с умными кнопками, чтобы Заполните платеж.

  4. Пользователь должен быть перенаправлен на страницу подтверждения, подтверждающую успешность его платежа.

Проблема в том, что я ' Я застрял на шаге 2, потому что после того, как я сгенерирую Авторизацию Платежа, я не знаю, как передать этот идентификатор (и другие необходимые параметры) клиенту, на этой новой странице, которая должна показывать Кнопки Smart Payment для завершения сделка.

Я следую инструкциям в документации PayPal, но не могу понять.

JavaScript делает вызовы на мой сервер, чтобы получить payid, это работает , но он генерирует новый payid и новый Платежное поручение, я хочу использовать тот, который был создан ранее, когда пользователь отправил форму, а затем каким-то образом передать ее на последнюю страницу с помощью смарт-кнопок для завершения транзакции и перенаправить на страницу подтверждения.

Мой Javascript:

<script>
   paypal.Button.render({  
      onApprove: function(data) {
      return fetch('/my-server/get-paypal-transaction', {
        headers: {
          'content-type': 'application/json'
        },
        body: JSON.stringify({
          orderID: data.orderID
        })
      }).then(function(res) {
        return res.json();
      }).then(function(details) {
        alert('Transaction approved by ' + details.payer_given_name);

    }, '#paypal-button');
</script>

Проблема в том, что он генерирует новую orderID, новую транзакцию, и я хочу получить транзакцию это было сгенерировано, когда пользователь отправил форму на шаге 2, но я не знаю, что мне делать.

В конечном итоге мне нужно:

  1. Получить Авторизация платежа и передача ее Клиенту (последняя страница с кнопками)

  2. Перенаправление пользователей после завершения оплаты.

1 Ответ

3 голосов
/ 22 апреля 2020

Вы ищете этот интерфейс: https://developer.paypal.com/demo/checkout/# / pattern / server

Для вашего бэкэнда вы должны использовать последний v2 / orders SDK: https://github.com/paypal/Checkout-PHP-SDK

(Ваш v1 / платежный бэкэнд будет работать, но этот SDK устарел и нет причин использовать его для новой интеграции)

...