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

Integração do gateway de pagamento do PayPal em PHP usando a API REST do PayPal

344

O PayPal é um dos gateways de pagamento mais confiáveis ​​da Internet. É amplamente utilizado em sites para aceitar pagamentos online. No entanto, a documentação da API do PayPal não é fácil de entender. Para um desenvolvedor que vai integrar o gateway de pagamento do PayPal pela primeira vez, levará muitas horas para ter sucesso. Passei uma quantidade absurda de horas lendo a documentação da API do PayPal. E depois perceba que não há necessidade de ler a documentação do Paypal em profundidade para integrá-lo.

Neste artigo, estudamos como integrar um gateway de pagamento do PayPal usando a API REST do PayPal. Usaremos a biblioteca GitHub fornecida pelo Omnipay. Omnipay fornece uma maneira limpa e fácil de integrar diferentes gateway de pagamento em seu aplicativo da web. Sua estrutura de código também é limpa e eficiente. Os desenvolvedores adorariam.

Obtenha o ID e o segredo do cliente do PayPal

Para integração do PayPal no site, primeiro você precisa criar um aplicativo REST API em uma conta de desenvolvedor do PayPal. Depois de criar o aplicativo, você obterá o ID do cliente e o segredo do cliente que serão exigidos nas próximas etapas.

Para criar o aplicativo REST API, acesse sua conta de desenvolvedor do PayPal e faça login no painel.

No painel do desenvolvedor, clique no menu ‘Meus aplicativos e credenciais’. Clique no botão ‘Criar aplicativo’ na seção de aplicativos da API REST.

Na próxima etapa, preencha o nome do aplicativo e você obterá seu ID e segredo do cliente. No meu caso, na captura de tela abaixo, posso ver as credenciais do sandbox. No seu caso, podem ser credenciais ativas. Ou você também pode tentar com suas credenciais de sandbox.

Integração do gateway de pagamento do PayPal em PHP usando a API REST do PayPal

Instalação da biblioteca e configuração básica

Como eu disse, usaremos o Omnipay para integração da API REST do PayPal. Precisamos primeiro instalar suas bibliotecas usando o Composer. Execute o comando abaixo para instalar as bibliotecas.

composer require league/omnipay omnipay/paypal

Depois de instalar a biblioteca, crie um arquivo de configuração onde armazenamos nossas credenciais de API, gravamos a conexão do banco de dados e inicializamos o gateway.

config.php

<?php
require_once "vendor/autoload.php";
 
use OmnipayOmnipay;
 
define('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');
define('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');
 
define('PAYPAL_RETURN_URL', 'YOUR_SITE_URL/success.php');
define('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL/cancel.php');
define('PAYPAL_CURRENCY', 'USD'); // set your currency here
 
// Connect with the database
$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME'); 
 
if ($db->connect_errno) {
    die("Connect failed: ". $db->connect_error);
}
 
$gateway = Omnipay::create('PayPal_Rest');
$gateway->setClientId(CLIENT_ID);
$gateway->setSecret(CLIENT_SECRET);
$gateway->setTestMode(true); //set it to 'false' when go live

Aqui, passei o parâmetro ‘Paypal_Rest’ para o método de criação do Omnipay. O Omnipay em segundo plano chama a API REST do PayPal enquanto faz o pagamento por meio dele.

Em seguida, crie um formulário simples onde um usuário pode inserir o valor. Para fins de demonstração, mantenho apenas um campo no formulário. Você pode estender o formulário de acordo com sua necessidade.

form.html

<form action="charge.php" method="post">
    <input type="text" name="amount" value="20.00" />
    <input type="submit" name="submit" value="Pay Now">
</form>

Quando o pagamento for concluído, devemos salvar os detalhes da transação na tabela do banco de dados. Crie uma tabela de banco de dados executando a consulta SQL abaixo.

CREATE TABLE `payments` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `payment_id` varchar(255) NOT NULL,
 `payer_id` varchar(255) NOT NULL,
 `payer_email` varchar(255) NOT NULL,
 `amount` float(10,2) NOT NULL,
 `currency` varchar(255) NOT NULL,
 `payment_status` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Esta tabela não contém nenhuma chave estrangeira, pois é apenas para fins de demonstração. O usuário pode adicionar uma coluna user_id nesta tabela para fazer referência ao pagamento com o usuário.

Integração do gateway de pagamento do PayPal em PHP usando a API REST do PayPal

Ao usar a API REST do PayPal, o usuário redirecionará para o PayPal para concluir o pagamento. Depois de fazer o pagamento, o usuário redirecionará de volta ao nosso aplicativo com base no status de sucesso ou falha. Definimos esses URLs no config.phparquivo acima.

Assim que o usuário redirecionar de volta ao nosso aplicativo com resposta de sucesso, precisamos executar o pagamento em nosso arquivo PHP, que é o success.phpnosso caso. Também armazenamos as informações de pagamento após a execução do pagamento usando a API REST do PayPal. Portanto, nosso código será o seguinte.

charge.php

<?php
require_once 'config.php';
 
if (isset($_POST['submit'])) {
 
    try {
        $response = $gateway->purchase(array(
            'amount' => $_POST['amount'],
            'currency' => PAYPAL_CURRENCY,
            'returnUrl' => PAYPAL_RETURN_URL,
            'cancelUrl' => PAYPAL_CANCEL_URL,
        ))->send();
 
        if ($response->isRedirect()) {
            $response->redirect(); // this will automatically forward the customer
        } else {
            // not successful
            echo $response->getMessage();
        }
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

success.php

<?php
require_once 'config.php';
 
// Once the transaction has been approved, we need to complete it.
if (array_key_exists('paymentId', $_GET) && array_key_exists('PayerID', $_GET)) {
    $transaction = $gateway->completePurchase(array(
        'payer_id'             => $_GET['PayerID'],
        'transactionReference' => $_GET['paymentId'],
    ));
    $response = $transaction->send();
 
    if ($response->isSuccessful()) {
        // The customer has successfully paid.
        $arr_body = $response->getData();
 
        $payment_id = $arr_body['id'];
        $payer_id = $arr_body['payer']['payer_info']['payer_id'];
        $payer_email = $arr_body['payer']['payer_info']['email'];
        $amount = $arr_body['transactions'][0]['amount']['total'];
        $currency = PAYPAL_CURRENCY;
        $payment_status = $arr_body['state'];
 
        // Insert transaction data into the database
        $isPaymentExist = $db->query("SELECT * FROM payments WHERE payment_id = '".$payment_id."'");
 
        if($isPaymentExist->num_rows == 0) {
            $insert = $db->query("INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('". $payment_id ."', '". $payer_id ."', '". $payer_email ."', '". $amount ."', '". $currency ."', '". $payment_status ."')");
        }
 
        echo "Payment is successful. Your transaction id is: ". $payment_id;
    } else {
        echo $response->getMessage();
    }
} else {
    echo 'Transaction is declined';
}

cancel.php

<h3>User is canceled the payment.</h3>

Envie informações do produto para o PayPal

No código acima, estamos enviando o valor a pagar no PayPal. Você também pode enviar informações sobre o produto. Seus clientes podem ver os detalhes desses produtos na página de pagamento antes de efetuar um pagamento.

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

$response = $gateway->purchase(array(
    'amount' => $_POST['amount'],
    'items' => array(
        array(
            'name' => 'Course Subscription',
            'price' => $_POST['amount'],
            'description' => 'Get access to premium courses.',
            'quantity' => 1
        ),
    ),
    'currency' => PAYPAL_CURRENCY,
    'returnUrl' => PAYPAL_RETURN_URL,
    'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();

Aqui, passei 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 do PayPal em PHP. Eu gostaria de ouvir suas opiniões ou 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