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

Integração de gateway de pagamento PayPal no Laravel

368

Recentemente publiquei um artigo sobre Integração de gateway de pagamento PayPal em PHP. Nesse artigo, um de nossos leitores perguntou sobre a integração do gateway de pagamento PayPal no Laravel. Embora o Laravel seja construído usando PHP, eles têm seus próprios padrões a seguir. Você tem que ajustar seu código PHP simples de acordo com o fluxo do Laravel. Neste artigo, mostrarei como aceitar pagamento em seu site Laravel usando a API Rest do PayPal.

PayPal é uma das marcas mais confiáveis ​​para aceitar pagamentos online. O PayPal oferece diferentes maneiras de integrar seu sistema de pagamento em aplicativos da web. Um dos serviços é o PayPal Rest API, que usaremos neste tutorial. Para começar, primeiro você precisa obter seu ID e segredo do cliente.

Vá para sua conta de desenvolvedor do PayPal e faça login nela. No painel do desenvolvedor, clique no menu ‘Meus aplicativos e credenciais’. Em seguida, clique no botão ‘Criar aplicativo’ na seção de aplicativos da API REST.

Siga as etapas conforme solicitado e você obterá sua sandbox e credenciais ao vivo. Por enquanto, copie o ID do cliente e o segredo do cliente do modo sandbox.

Integração de gateway de pagamento PayPal no Laravel

Configuração básica no Laravel para aceitar pagamento usando PayPal

Quando os clientes fazem o pagamento em seu site, você precisa armazenar os detalhes do pagamento para uso posterior. Crie uma tabela de ‘pagamentos’ no banco de dados para armazenar os detalhes do pagamento. Crie uma migração para a tabela de ‘pagamentos’ usando o comando:

php artisan make:migration create_payments_table

Abra o arquivo de migração e modifique as colunas conforme a seguir.

<?php
...
...
public function up()
{
    Schema::create('payments', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('payment_id');
        $table->string('payer_id');
        $table->string('payer_email');
        $table->float('amount', 10, 2);
        $table->string('currency');
        $table->string('payment_status');
        $table->timestamps();
    });
}

Execute a migração acima usando o comando abaixo.

php artisan migrate

Este comando criará uma tabela de ‘pagamentos’ em seu banco de dados. A seguir, crie um modelo correspondente à tabela de ‘pagamentos’.

php artisan make:model Payment

Depois disso, adicione as credenciais do PayPal em seu .envarquivo.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD

Limpe o cache de configuração usando o comando:

php artisan config:cache

Eu passei a moeda ‘USD’. O usuário pode alterá-lo de acordo com os requisitos.

Vamos definir as rotas que vamos exigir nas próximas etapas.

rotas / web.php

<?php
...
...
Route::get('payment', 'PaymentController@index');
Route::post('charge', 'PaymentController@charge');
Route::get('paymentsuccess', 'PaymentController@payment_success');
Route::get('paymenterror', 'PaymentController@payment_error');

Integração de gateway de pagamento PayPal no Laravel

Integrar a API de gateways de pagamento no aplicativo é algo bastante complexo. Felizmente, a biblioteca Omnipay facilitou a vida do desenvolvedor. Omnipay é a biblioteca de processamento de pagamentos mais popular para PHP. Ele fornece um código fácil e limpo para a integração de diferentes gateways de pagamento. Instale a biblioteca Omnipay usando o comando:

composer require league/omnipay omnipay/paypal

Agora, crie um controlador PaymentControllere defina os métodos mencionados no arquivo de rota.

php artisan make:controller PaymentController

PaymentController.php

<?php
  
namespace AppHttpControllers;
  
use IlluminateHttpRequest;
use OmnipayOmnipay;
use AppPayment;
  
class PaymentController extends Controller
{
  
    public $gateway;
  
    public function __construct()
    {
        $this->gateway = Omnipay::create('PayPal_Rest');
        $this->gateway->setClientId(env('PAYPAL_CLIENT_ID'));
        $this->gateway->setSecret(env('PAYPAL_CLIENT_SECRET'));
        $this->gateway->setTestMode(true); //set it to 'false' when go live
    }
  
    public function index()
    {
        return view('payment');
    }
  
    public function charge(Request $request)
    {
        if($request->input('submit'))
        {
            try {
                $response = $this->gateway->purchase(array(
                    'amount' => $request->input('amount'),
                    'currency' => env('PAYPAL_CURRENCY'),
                    'returnUrl' => url('paymentsuccess'),
                    'cancelUrl' => url('paymenterror'),
                ))->send();
           
                if ($response->isRedirect()) {
                    $response->redirect(); // this will automatically forward the customer
                } else {
                    // not successful
                    return $response->getMessage();
                }
            } catch(Exception $e) {
                return $e->getMessage();
            }
        }
    }
  
    public function payment_success(Request $request)
    {
        // Once the transaction has been approved, we need to complete it.
        if ($request->input('paymentId') && $request->input('PayerID'))
        {
            $transaction = $this->gateway->completePurchase(array(
                'payer_id'             => $request->input('PayerID'),
                'transactionReference' => $request->input('paymentId'),
            ));
            $response = $transaction->send();
          
            if ($response->isSuccessful())
            {
                // The customer has successfully paid.
                $arr_body = $response->getData();
          
                // Insert transaction data into the database
                $isPaymentExist = Payment::where('payment_id', $arr_body['id'])->first();
          
                if(!$isPaymentExist)
                {
                    $payment = new Payment;
                    $payment->payment_id = $arr_body['id'];
                    $payment->payer_id = $arr_body['payer']['payer_info']['payer_id'];
                    $payment->payer_email = $arr_body['payer']['payer_info']['email'];
                    $payment->amount = $arr_body['transactions'][0]['amount']['total'];
                    $payment->currency = env('PAYPAL_CURRENCY');
                    $payment->payment_status = $arr_body['state'];
                    $payment->save();
                }
          
                return "Payment is successful. Your transaction id is: ". $arr_body['id'];
            } else {
                return $response->getMessage();
            }
        } else {
            return 'Transaction is declined';
        }
    }
  
    public function payment_error()
    {
        return 'User is canceled the payment.';
    }
  
}

No controlador acima, pegamos o valor do formulário HTML e enviamos um usuário ao PayPal para pagamento. No pagamento bem-sucedido, armazenamos todos os detalhes da transação na tabela de ‘pagamentos’.

Finalmente, crie um arquivo blade chamado payment.blade.phpe adicione o código abaixo nele.

<form action="{{ url('charge') }}" method="post">
    <input type="text" name="amount" />
    {{ csrf_field() }}
    <input type="submit" name="submit" value="Pay Now">
</form>

Quando enviamos este formulário, o controle vai para a chargefunção no PaymentControllere o controlador processa o fluxo de pagamento restante.

Envie informações do produto para o PayPal

Nas etapas anteriores, estamos enviando o valor a pagar no PayPal. Você também pode enviar informações sobre o produto. O usuário pode ver os detalhes desses produtos na página de pagamento antes de fazer um pagamento.

Para enviar as informações do produto, você precisa passar a matriz ‘itens’ para o purchasemétodo a seguir.

$response = $this->gateway->purchase(array(
    'amount' => $request->input('amount'),
    'items' => array(
        array(
            'name' => 'Course Subscription',
            'price' => $request->input('amount'),
            'description' => 'Get access to premium courses.',
            'quantity' => 1
        ),
    ),
    'currency' => env('PAYPAL_CURRENCY'),
    'returnUrl' => url('paymentsuccess'),
    'cancelUrl' => url('paymenterror'),
))->send();

Aqui estou passando os detalhes do produto estaticamente. Você deve torná-lo dinâmico dependendo do seu produto.

Espero que você conheça a integração do gateway de pagamento PayPal no Laravel. Por favor, compartilhe 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