✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Integração do PayPal Payments Pro no Laravel

39

Eu escrevi um artigo sobre aceitar pagamentos com cartão de crédito usando o PayPal Payments Pro em PHP. Um dos leitores me perguntou como fazer a mesma integração no Laravel. Embora o Laravel seja escrito em PHP ao escrever o código para o Laravel, você deve seguir seus padrões. Iniciantes geralmente acham difícil converter código PHP simples no Laravel.

Neste artigo, estudamos como integrar o PayPal Payments Pro e aceitar pagamentos com cartão de crédito no Laravel.

Se você administra uma loja online, site de associação ou qualquer outro lugar onde deseja receber pagamentos online, o PayPal é a opção segura. Usando o PayPal Payments Pro, você pode aceitar pagamentos online com cartão de crédito que vão diretamente para sua conta do PayPal.

No momento de escrever este artigo, o PayPal Payments Pro está disponível para comerciantes nos EUA, Reino Unido e Canadá.

Começando

Para começar, você precisa obter as credenciais da API do PayPal. É sempre uma boa prática testar os pagamentos no modo sandbox. Se tudo funcionar conforme o esperado, efetue o pagamento.

Obtenha suas credenciais de sandbox fazendo login na conta de desenvolvedor do PayPal. Após o login, vá para SANDBOX-> Contas no menu à esquerda e crie uma conta empresarial.

Assim que tiver a conta comercial, atualize seu tipo de conta para ‘Business-Pro’. A integração do PayPal Payments Pro requer um tipo de conta ‘Business-Pro’. Clique no link ‘Atualizar para Pro’ e o PayPal converterá seu tipo de conta para ‘Business-Pro’.

Integração do PayPal Payments Pro no Laravel

Em seguida, clique na guia ‘API Credentials’ e copie suas credenciais.

Integração do PayPal Payments Pro no Laravel

Abra o .envdo seu projeto Laravel e adicione as credenciais copiadas nele.

PAYPAL_API_USERNAME=
PAYPAL_API_PASSWORD=
PAYPAL_API_SIGNATURE=

Adicione a rota para o controlador no web.phparquivo. No meu caso, meu percurso é o seguinte.

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

Vou usar a biblioteca Omnipay, que oferece uma maneira fácil de integrar gateways de pagamento. Execute o comando abaixo que instala a biblioteca Omnipay.

composer require league/omnipay:^3 omnipay/paypal

Crie um formulário de pagamento

Ao aceitar um pagamento com cartão de crédito, você deve fornecer aos usuários um formulário onde eles podem inserir os detalhes do cartão. Vamos projetar o formulário de pagamento usando este exemplo de código.

Crie uma pasta ‘css’ e ‘js’ dentro do diretório ‘public’ do projeto Laravel. Copie o código CSS do codepen e adicione-o 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;
  }
}

Da mesma forma, adicione o código JavaScript do codepen ao js/card.jsarquivo.

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

Obtenha uma cópia jquery.card.jsdeste repositório GitHub. Armazene este arquivo no diretório ‘js’.

Finalmente, no arquivo blade, adicione o código abaixo.

<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>

No código acima, incluí CSS, JS do respectivo diretório. Você deve fornecer o URL de sua rota para a ação do formulário.

Integração do PayPal Payments Pro no Laravel

Concluímos a configuração necessária para aceitar pagamentos com cartão de crédito. Agora, no controlador, temos que escrever o código conforme as instruções do Omnipay. Omnipay facilita a vida do desenvolvedor. Temos que apenas seguir suas instruções e eles fazem todo o trabalho árduo de capturar o pagamento e retornar uma resposta final.

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();
        }
    }
}

Aqui no construtor, construímos um objeto e passamos as credenciais para ele. Quando um usuário envia um formulário, o controle vai para o método ‘store’. Nesse método, o Omnipay chama a API do PayPal em segundo plano, processa o pagamento e dá uma resposta final.

Vá em frente e experimente. Como estamos testando o pagamento no modo sandbox, você precisará de cartões de teste. Clique aqui para obter os detalhes do cartão de crédito fictício. Depois de enviar um formulário, você verá a mensagem de sucesso junto com o ID da transação.

Aceite o pagamento em tempo real com o PayPal Payments Pro

Assim que seus pagamentos estiverem funcionando com sucesso no modo sandbox, você pode ir para o modo ao vivo. Para isso, você precisa substituir as credenciais do sandbox pelos detalhes ativos no .envarquivo. Além disso, passe um valor ‘falso’ para o método setTestMode() no construtor. Isso desativará o modo sandbox e ativará o modo ao vivo.

É uma questão de aceitar pagamentos com cartão de crédito com o PayPal Payments Pro no Laravel. Eu gostaria de ouvir seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação