WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Интеграция PayPal Payments Pro в Laravel

186

Я написал статью о приеме платежей по кредитным картам с помощью PayPal Payments Pro на PHP. Один из читателей спросил меня, как сделать такую ​​же интеграцию в Laravel. Хотя Laravel написан на PHP, при написании кода для Laravel вы должны следовать их стандартам. Новичкам часто бывает сложно преобразовать простой PHP-код в Laravel.

В этой статье мы изучаем, как интегрировать PayPal Payments Pro и принимать платежи по кредитным картам в Laravel.

Если у вас есть интернет-магазин, сайт членства или что-то еще, где вы хотите собирать онлайн-платежи, то PayPal – это безопасный вариант. Используя PayPal Payments Pro, вы можете принимать онлайн-платежи по кредитным картам, которые поступают непосредственно на ваш счет PayPal.

Помните, что на момент написания этой статьи PayPal Payments Pro доступен для продавцов в США, Великобритании и Канаде.

Начиная

Для начала вам необходимо получить учетные данные PayPal API. Всегда рекомендуется тестировать платежи в режиме песочницы. Если все работает как положено, внесите оплату вживую.

Получите учетные данные своей песочницы, войдя в учетную запись разработчика PayPal. После входа в систему перейдите в SANDBOX-> Учетные записи в меню слева и создайте бизнес-аккаунт.

После того, как у вас есть бизнес-аккаунт, обновите тип своего аккаунта до «Business-Pro». Для интеграции PayPal Payments Pro требуется тип учетной записи Business-Pro. Щелкните ссылку «Обновить до Pro», и PayPal преобразует тип вашей учетной записи в «Business-Pro».

Интеграция PayPal Payments Pro в Laravel

Затем щелкните вкладку «Учетные данные API» и скопируйте свои учетные данные.

Интеграция PayPal Payments Pro в Laravel

Откройте .envсвой проект Laravel и добавьте в него скопированные учетные данные.

PAYPAL_API_USERNAME=
PAYPAL_API_PASSWORD=
PAYPAL_API_SIGNATURE=

Добавьте в web.phpфайл маршрут для контроллера. В моем случае мой маршрут выглядит следующим образом.

Route::resource('payment', 'PaymentController');

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

composer require league/omnipay:^3 omnipay/paypal

Создать форму оплаты

Принимая оплату кредитной картой, вы должны предоставить пользователям форму, в которой они могут ввести данные своей карты. Давайте спроектируем платежную форму, используя этот пример кода.

Создайте папки css и js внутри общедоступного каталога проекта Laravel. Скопируйте код CSS из codepen и добавьте его css/card.css.

@import url(https://fonts.googleapis.com/css?family=Roboto:400,900,700,500);
 
body {
  padding: 60px 0;
  background-color: rgba(178,209,229,0.7);
  margin: 0 auto;
  width: 600px;
}
.body-text {
  padding: 0 20px 30px 20px;
  font-family: "Roboto";
  font-size: 1em;
  color: #333;
  text-align: center;
  line-height: 1.2em;
}
.form-container {
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
.card-wrapper {
  background-color: #6FB7E9;
  width: 100%;
  display: flex;
 
}
.personal-information {
  background-color: #3C8DC5;
  color: #fff;
  padding: 1px 0;
  text-align: center;
}
h1 {
  font-size: 1.3em;
  font-family: "Roboto"
}
input {
  margin: 1px 0;
  padding-left: 3%;
  font-size: 14px;
}
input[type="text"]{
  display: block;
  height: 50px;
  width: 97%;
  border: none;
}
input[type="email"]{
  display: block;
  height: 50px;
  width: 97%;
  border: none;
}
input[type="submit"]{
  display: block;
  height: 60px;
  width: 100%;
  border: none;
  background-color: #3C8DC5;
  color: #fff;
  margin-top: 2px;
  curson: pointer;
  font-size: 0.9em;
  text-transform: uppercase;
  font-weight: bold;
  cursor: pointer;
}
input[type="submit"]:hover{
  background-color: #6FB7E9;
  transition: 0.3s ease;
}
#column-left {
  width: 46.8%;
  float: left;
  margin-bottom: 2px;
}
#column-right {
  width: 46.8%;
  float: right;
}
 
@media only screen and (max-width: 480px){
  body {
    width: 100%;
    margin: 0 auto;
  }
  .form-container {
    margin: 0 2%;
  }
  input {
    font-size: 1em;
  }
  #input-button {
    width: 100%;
  }
  #input-field {
    width: 96.5%;
  }
  h1 {
    font-size: 1.2em;
  }
  input {
    margin: 2px 0;
  }
  input[type="submit"]{
    height: 50px;
  }
  #column-left {
    width: 96.5%;
    display: block;
    float: none;
  }
  #column-right {
    width: 96.5%;
    display: block;
    float: none;
  }
}

Точно так же добавьте в js/card.jsфайл код JavaScript из кода .

$('form').card({
    container: '.card-wrapper',
    width: 280,
 
    formSelectors: {
        nameInput: 'input[name="first-name"], input[name="last-name"]'
    }
});

Получите копию jquery.card.jsиз этого репозитория GitHub. Сохраните этот файл в каталоге js.

Наконец, в файл лезвия добавьте приведенный ниже код.

<link rel="stylesheet" href="{{ asset('css/card.css') }}">
 
<form method="POST" action="{{ url('ROUTE_HERE') }}">
    {{ csrf_field() }}
    <div class="form-container">
        <div class="personal-information">
            <h1>Payment Information</h1>
        </div> <!-- end of personal-information -->
          
        <input id="column-left" type="text" name="first-name" placeholder="First Name" required="required" />
        <input id="column-right" type="text" name="last-name" placeholder="Surname" required="required" />
        <input id="input-field" type="text" name="number" placeholder="Card Number" required="required" />
        <input id="column-left" type="text" name="expiry" placeholder="MM / YY" required="required" />
        <input id="column-right" type="text" name="cvc" placeholder="CCV" required="required" />
 
        <div class="card-wrapper"></div>
 
        <input id="input-field" type="text" name="streetaddress" required="required" autocomplete="on" maxlength="45" placeholder="Streed Address"/>
        <input id="column-left" type="text" name="city" required="required" autocomplete="on" maxlength="20" placeholder="City"/>
        <input id="column-right" type="text" name="zipcode" required="required" autocomplete="on" pattern="[0-9]*" maxlength="5" placeholder="ZIP code"/>
        <input id="input-field" type="email" name="email" required="required" autocomplete="on" maxlength="40" placeholder="Email"/>
        <input id="input-field" type="text" name="amount" required="required" autocomplete="on" maxlength="40" placeholder="Amount"/>
        <input id="input-button" name="submit" type="submit" value="Submit"/>
    </div>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="{{ asset('js/jquery.card.js') }}"></script>
<script src="{{ asset('js/card.js') }}"></script>

В приведенный выше код я включил CSS, JS из соответствующего каталога. Вы должны указать URL-адрес вашего маршрута для действия формы.

Интеграция PayPal Payments Pro в Laravel

Мы закончили настройку, необходимую для приема платежей по кредитным картам. Теперь в контроллере мы должны написать код в соответствии с инструкциями Omnipay. Omnipay упрощает жизнь разработчикам. Нам нужно просто следовать их инструкциям, а они делают всю тяжелую работу по сбору платежей и возвращению окончательного ответа.

PaymentController.php

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use OmnipayOmnipay;
 
class PaymentController extends Controller
{
 
    public $gateway;
 
    public function __construct()
    {
        $this->gateway = Omnipay::create('PayPal_Pro');
        $this->gateway->setUsername(env('PAYPAL_API_USERNAME'));
        $this->gateway->setPassword(env('PAYPAL_API_PASSWORD'));
        $this->gateway->setSignature(env('PAYPAL_API_SIGNATURE'));
        $this->gateway->setTestMode(true); // here 'true' is for sandbox. Pass 'false' when go live
    }
 
    public function index()
    {
        return view('payment');
    }
 
    public function store(Request $request)
    {
        $arr_expiry = explode("/", $request->input('expiry'));
  
        $formData = array(
            'firstName' => $request->input('first-name'),
            'lastName' => $request->input('last-name'),
            'number' => $request->input('number'),
            'expiryMonth' => trim($arr_expiry[0]),
            'expiryYear' => trim($arr_expiry[1]),
            'cvv' => $request->input('cvc')
        );
 
        try {
            // Send purchase request
            $response = $this->gateway->purchase([
                'amount' => $request->input('amount'),
                'currency' => 'USD',
                'card' => $formData
            ])->send();
 
            // Process response
            if ($response->isSuccessful()) {
 
                // Payment was successful
                $arr_body = $response->getData();
                $amount = $arr_body['AMT'];
                $currency = $arr_body['CURRENCYCODE'];
                $transaction_id = $arr_body['TRANSACTIONID'];
 
                echo "Payment of $amount $currency is successful. Your Transaction ID is: $transaction_id";
            } else {
                // Payment failed
                echo "Payment failed. ". $response->getMessage();
            }
        } catch(Exception $e) {
            echo $e->getMessage();
        }
    }
}

Здесь в конструкторе мы создаем объект и передаем ему учетные данные. Когда пользователь отправляет форму, управление передается методу store. В этом методе Omnipay вызывает API PayPal в фоновом режиме, обрабатывает платеж и дает окончательный ответ.

Давай, попробуй. Поскольку мы тестируем оплату в режиме песочницы, вам потребуются тестовые карты. Щелкните здесь, чтобы получить данные фиктивной кредитной карты. После отправки формы вы должны увидеть сообщение об успешном выполнении вместе с идентификатором транзакции.

Принимайте живые платежи с помощью PayPal Payments Pro

После того, как ваши платежи будут успешно работать в режиме песочницы, вы можете перейти в режим реального времени. Для этого вам необходимо заменить учетные данные песочницы актуальными данными в .envфайле. Также передайте значение false методу setTestMode() в конструкторе. Это отключит режим песочницы и активирует живой режим.

Все дело в приеме оплаты кредитной картой с помощью PayPal Payments Pro в Laravel. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

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