в PayPal можно ли оформить заказ с помощью обычной кнопки, а не кнопки PayPal? - PullRequest
0 голосов
/ 14 мая 2018

Я использую PayPal Rest API и создаю страницу PHP, которая позволяет покупателям совершать платежи.

Я делаю код по этой ссылке - https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/server-side-REST-integration/

Итак, я сделал кнопку «Купить сейчас», как этот код:

    <div id="paypal-button"></div>

    <script>
        paypal.Button.render({
        env: 'sandbox', // Or 'sandbox',

        commit: true, // Show a 'Pay Now' button

        style: {
            color: 'blue',
            size: 'large',
            shape: 'rect',
            label: 'buynow',
        },

        payment: function(data, actions) {
            alert('1');
            /* 
            * Set up the payment here 
            */
        },

        onAuthorize: function(data, actions) {
            alert('2');
            /* 
            * Execute the payment here 
            */
        },

        onCancel: function(data, actions) {
            alert('3');
            /* 
            * Buyer cancelled the payment 
            */
        },

        onError: function(err) {
            alert('4');
            /* 
            * An error occurred during the transaction 
            */
        }
        }, '#paypal-button');
    </script>

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

Поэтому, когда вы нажимаете эту обычную кнопку, платеж PayPal должен быть сделан.

  • Я думал, что это можно сделать, вызвав событие нажатия кнопки PayPal.

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

  • Так что я подумал еще один способ сделать это - при нажатии кнопки оплаты, делая платеж со стороны сервера. И он возвращает URL страницы PayPal Checkout для перенаправления. и откройте новое небольшое окно вручную с этой страницы оплаты PayPal URL.

Именно по этой ссылке - http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html

и код такой

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

    $item_1 = new Item();
    $item_1->setName('Item 1') /** item name **/
        ->setCurrency('USD')
        ->setQuantity(1)
        ->setPrice($amountVal); /** unit price **/

    $shipping_address = new ShippingAddress();
    $shipping_address->setCity('San Jose');
    $shipping_address->setCountryCode('US');
    $shipping_address->setPostalCode('95132');
    $shipping_address->setLine1('My St');
    $shipping_address->setState('CA');
    $shipping_address->setRecipientName('Recipient1');

    $billing_address = new Address();
    $billing_address->setCity('San Jose');
    $billing_address->setCountryCode('US');
    $billing_address->setPostalCode('95132');
    $billing_address->setLine1('My St2');
    $billing_address->setState('CA');

    $payer_info = new PayerInfo();
    $payer_info->setBillingAddress($billing_address);
    $payer_info->setEmail('a@2.com');
    $payer->setPayerInfo($payer_info);

    $item_list = new ItemList();
    $item_list->setItems(array($item_1));
    $item_list->setShippingAddress($shipping_address);

    $amount = new Amount();
    $amount->setCurrency('USD')
        ->setTotal($amountVal);

    $transaction = new Transaction();
    $transaction->setAmount($amount)
        ->setItemList($item_list)
        ->setDescription('Your transaction description');

    $payee_email = Input::get('payee');
    if ($payee_email) {
        $payee = new Payee();
        $payee->setEmail($payee_email);
        $transaction->setPayee($payee);
    }

    $redirect_urls = new RedirectUrls();
    $redirect_urls->setReturnUrl(url('paypal/status')) /** Specify return URL **/
        ->setCancelUrl(url('paypal/status'));

    $payment = new Payment();
    $payment->setIntent('Sale')
        ->setPayer($payer)
        ->setRedirectUrls($redirect_urls)
        ->setExperienceProfileId($profile_id)
        ->setTransactions(array($transaction));

    try {
        $payment->create(PaypalController::$_api_context);
    } catch (\PayPal\Exception\PPConnectionException $ex) {
        return json_decode($ex->getData());
        return 'Error: ' . $ex->getMessage();
    }

    foreach ($payment->getLinks() as $link) {
        if ($link->getRel() == 'approval_url') {
            $redirect_url = $link->getHref();
                break;
        }
    }

    /** add payment ID to session **/
    Session::put('paypal_payment_id', $payment->getId());
    if (isset($redirect_url)) {
    /** redirect to paypal **/
        return Redirect::away($redirect_url);
    }

    return 'Unknown error occurred';

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

Выцветание означает исчезновение фона со строкой «Не видите защищенный браузер PayPal? Мы поможем вам повторно запустить окно, чтобы завершить покупку. ... '. Может быть, вы можете знать.

Так что, похоже, не так безопасно.

Наконец, поэтому я хочу знать 2 вещи.

  1. Если я хочу выполнить платеж PayPal при нажатии кнопки «не PayPal», как я могу это сделать?

  2. Есть ли какой-нибудь способ исчезнуть с помощью фона «Не видите безопасный браузер PayPal?» Мы поможем вам повторно запустить окно, чтобы завершить покупку. ... 'вручную, когда открываете новую страницу оплаты PayPal, нажимая кнопку non-paypal?

Спасибо всем, кто помог!

...