Ссылка одобрения Sandbox PayPal ведет на панель инструментов вместо оплаты после входа в систему - PullRequest
1 голос
/ 02 февраля 2020

Я использую PayPal REST API в режиме песочницы для тестирования платежей.

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

Затем PayPal запрашивает учетные данные, которые я вставляю в качестве покупателя тестовой среды. Но после входа в систему PayPal не перенаправляет меня, чтобы завершить утверждение платежа, а вместо этого прямо в сводку моей учетной записи, откуда я не могу подтвердить платеж. Однако, если пользователь уже вошел в систему, подтверждение платежа происходит, как и ожидалось.

Это проблема с тем, как была создана ссылка, или это ошибка?

Этот код используется для создания ссылки

<?php
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Rest\ApiContext;

class PaypalFactory
{
private const CLIENT_ID = 'yyy';
private const CLIENT_SECRET = 'xxx';

private function __construct()
{
}

public static final function getContext()
{
    return new ApiContext(
        new OAuthTokenCredential(
            self::CLIENT_ID,
            self::CLIENT_SECRET
        )
    );
}

public static final function createPaymentLink(
    int $orderId,
    string $currency,
    float $totalPrice,
    float $deliveryPrice,
    string $returnUrl,
    string $cancelUrl): string
{
    $payer = new Payer();
    $payer
        ->setPaymentMethod("paypal");

    $details = new Details();
    $details
        ->setShipping($deliveryPrice)
        ->setSubtotal($totalPrice);


    $item = new Item();
    $item
        ->setName('products and shipping')
        ->setCurrency($currency)
        ->setPrice($totalPrice)
        ->setQuantity(1);

    $itemList = new ItemList();
    $itemList->setItems(array($item));


    $amount = new Amount();
    $amount
        ->setCurrency($currency)
        ->setTotal($totalPrice + $deliveryPrice)
        ->setDetails($details);

    $transaction = new Transaction();
    $transaction
        ->setItemList($itemList)
        ->setAmount($amount)
        ->setDescription("Products from ")
        ->setInvoiceNumber($orderId);

    $redirectUrls = new RedirectUrls();
    $redirectUrls
        ->setReturnUrl($returnUrl)
        ->setCancelUrl($cancelUrl);

    $payment = new Payment();
    $payment
        ->setIntent("sale")
        ->setPayer($payer)
        ->setRedirectUrls($redirectUrls)
        ->setTransactions(array($transaction));

    try {
        $payment->create(PaypalFactory::getContext());
    } catch (Exception $ex) {
        print $ex;
    }

    return $payment->getApprovalLink();
}

}

1 Ответ

2 голосов
/ 03 февраля 2020

Очистка всех файлов cookie браузера для доменов PayPal является хорошим советом и может помочь. Вероятно, проблема, с которой вы столкнулись, это общая проблема с песочницей (которая не будет возникать в режиме реального времени), а не проблема с вашим кодом.

Однако, увидев ваш код / ​​решение, у меня есть предложения по пробуем новые / лучшие вещи:

  1. Вместо старого PayPal- PHP -SDK для v1 / платежей, используйте новый Checkout- PHP -SDK для v2 / orders
  2. Вместо , перенаправляющего покупателя на URL-адрес одобрения, передайте токен подтверждения на код Javascript кнопок Smart Payment, который отобразит контекстное окно, в котором хранится ваш сайт загружается в фоновом режиме. Вот демонстрационный образец
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...