Omnipay с экспресс-оплатой PayPal

Я хотел бы интегрировать PayPal Express Checkout с Omnipay, но документация совершенно не завершена. Как запустить такие методы, как setExpressCheckout, doExpressCheckout и getExpressCheckout? Кроме того, как перенаправить все вызовы PayPal на прослушиватель IPN? Предоставляет ли Omnipay все эти методы или только часть из них? У кого-нибудь была возможность использовать эту библиотеку с Express Checkout?

С уважением!


person Poniat    schedule 11.01.2017    source источник
comment
Я полностью согласен - Omnipay выглядит полезно, но я не могу понять, с чего начать с PayPal Express.   -  person Richard    schedule 15.06.2017


Ответы (1)


Это не ответ, но сначала позвольте мне порекомендовать вам перейти с PayPal Express на PayPal REST, поскольку последний гораздо лучше документирован и имеет более новый интерфейс.

Фактический ответ: Omnipay так не работает. Он не предоставляет напрямую базовые методы шлюза, а такие методы, как setExpressCheckout, doExpressCheckout и getExpressCheckout, являются методами PayPal, а не методами Omnipay. Их место занимают независимые от шлюза методы, такие как Purchase() и Return() и т. д.

Итак, для примера документации шлюза REST omnipay-paypal (в виде докблоков в заголовках классов) вот что вы делаете:

// Create a gateway for the PayPal RestGateway
// (routes to GatewayFactory::create)
$gateway = Omnipay::create('PayPal_Rest');

// Initialise the gateway
$gateway->initialize(array(
    'clientId' => 'MyPayPalClientId',
    'secret'   => 'MyPayPalSecret',
    'testMode' => true, // Or false when you are ready for live transactions
));

Это просто для инициализации шлюза. Процесс такой же для PayPal Express, за исключением того, что вы используете PayPal_Express в качестве имени шлюза, и у вас будут другие параметры для initialize().

Затем, чтобы совершить покупку, например. с номером карты, если вам разрешено это делать:

// Create a credit card object
// DO NOT USE THESE CARD VALUES -- substitute your own
// see the documentation in the class header.
$card = new CreditCard(array(
            'firstName' => 'Example',
            'lastName' => 'User',
            'number' => '4111111111111111',
            'expiryMonth'           => '01',
            'expiryYear'            => '2020',
            'cvv'                   => '123',
            'billingAddress1'       => '1 Scrubby Creek Road',
            'billingCountry'        => 'AU',
            'billingCity'           => 'Scrubby Creek',
            'billingPostcode'       => '4999',
            'billingState'          => 'QLD',
));

// Do a purchase transaction on the gateway
try {
    $transaction = $gateway->purchase(array(
        'amount'        => '10.00',
        'currency'      => 'AUD',
        'description'   => 'This is a test purchase transaction.',
        'card'          => $card,
    ));
    $response = $transaction->send();
    $data = $response->getData();
    echo "Gateway purchase response data == " . print_r($data, true) . "\n";

    if ($response->isSuccessful()) {
        echo "Purchase transaction was successful!\n";
    }
} catch (\Exception $e) {
    echo "Exception caught while attempting authorize.\n";
    echo "Exception type == " . get_class($e) . "\n";
    echo "Message == " . $e->getMessage() . "\n";
}

Выполнение перенаправления платежа, такого как платеж с учетной записи PayPal, несколько отличается, но оно задокументировано в классах docblocks. См. src/Messages/RestPurchaseRequest.php

person delatbabel    schedule 12.01.2017
comment
Спасибо за ваш пост. Что насчет прослушивателя IPN? REST больше не нужен? Кроме того, приведенный выше пример выглядит как оплата кредитной/дебетовой картой, но мне нужно создать экспресс-кассу для пользователей, которые хотят платить с помощью кредитной/дебетовой корзины или просто с помощью учетной записи PayPal. Я думаю, что это что-то другое, чем вы имеете в виду. - person Poniat; 12.01.2017
comment
Прослушиватель IPN можно создать, но его нельзя настроить для каждой транзакции, как в некоторых системах. Вы по-прежнему сможете использовать приведенный выше код для платежей без карты, просто опустите параметр карты. Прочтите документацию в заголовках классов omnipay, потому что там приведены подробные примеры того, как это сделать, как выполнить обработку возврата в вашем приложении и место, где вам нужно вызвать completePurchase(), чтобы подтвердить, что транзакция прошла успешно. . - person delatbabel; 17.01.2017