PHP Classes

How to Perform PHP Payment Gateway Integration with Stripe or Mercado Pago Using the Package Core Payment: Integrate payments with different payment services

Recommend this page to a friend!
     
  Info   Example   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2026-03-02 (3 months ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
core-payment 1.0MIT/X Consortium ...8E-Commerce, Web services, PHP 8
Description 

Author

This package can integrate payments with different payment services.

It provides an adapter class that implements several types of functions the request payments from customers.

The adapter class can call different implementation classes that implement the same functions adapted to the way different payment service providers take requests to process customer payments.

Currently the adapter classes implements functions to:

- Charge a customer

- Check the status of a customer charging transaction

- Refund an amount charged to a customer

- Retrieve the list of supported payment gateways

The package provides adapter classes to support payments using:

- Stripe

- Mercado Pago

Picture of Rodrigo Faustino
  Performance   Level  
Name: Rodrigo Faustino <contact>
Classes: 47 packages by
Country: Brazil Brazil
Innovation award
Innovation award
Nominee: 29x

Winner: 6x

Instructions

Please check this example script to learn how to charge a customer using Stripe in a PHP site.

Example

<?php

require_once __DIR__ . '/vendor/autoload.php';

use
PaymentAdapter\Contracts\PaymentPayload;
use
PaymentAdapter\PaymentService;
use
Dotenv\Dotenv;

// 1. Carregar variáveis de ambiente (.env)
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad();

// 2. Montar o Payload Universal (Independente de gateway)
// A grande vantagem do PaymentAdapter é esta assinatura unificada!
$payload = new PaymentPayload(
   
amount: 150.00,
   
currency: 'BRL',
   
description: 'Plano Anual - LanyardAR',
   
customerEmail: 'cliente@exemplo.com',
   
customerName: 'Cliente Exemplo',
   
externalReference: 'ped_' . uniqid(),
   
metadata: [
       
'returnUrl' => 'http://localhost:8000/callback.php'
   
]
);

echo
"Iniciando processamento de pagamento...\n <br>";
echo
"========================================\n\n <br>";

try {
   
// 3. Inicializar o serviço de pagamento
    // Opcões nativas: 'stripe' ou 'mercadopago' (configurado em config/gateways.php no adapter)
   
$gatewayUsado = 'stripe';
   
$service = new PaymentService($gatewayUsado);

   
// 4. Disparar a transação
   
echo "Enviando payload via gateway: {$gatewayUsado}\n <br>";
   
$resultado = $service->charge($payload);

    echo
"Status: " . $resultado->status . "\n <br>";
   
   
// O transactionId é o ID gerado pelo Stripe/MercadoPago, muito importante salvar ele no banco
   
echo "ID Transação Externa (Salvar no DB): " . $resultado->transactionId . "\n";

    if (
$resultado->paymentUrl) {
        echo
"URL de Checkout Gerada (Para redirecionamento): \n> <br>" . $resultado->paymentUrl . "\n";
    }

    echo
"\n--- Simulação finalizada ---\n <br>";

} catch (\
Exception $e) {
    echo
"Erro inesperado: " . $e->getMessage() . "\n";
}


Details

Exemplo de Integração: Payment Adapter

Este repositório/pasta de exemplo serve como um guia prático (boilerplate) de como utilizar a biblioteca genérica payment-adapter nas suas aplicações PHP.

O payment-adapter isola por completo a lógica das APIs financeiras (Stripe, Mercado Pago, Pagar.me). Desse modo, a sua aplicação sempre comunica enviando uma classe única (PaymentPayload) e recebendo uma classe única (PaymentResult), sem nunca precisarmos usar o SDK do Stripe ou SDK do Mercado Pago diretamente no nosso código de faturamento (Billing/Checkout).

? Passo a Passo: Instalação no seu Projeto

Seja um projeto Laravel, Symfony, ou PHP puro, siga estes passos para importar o módulo em qualquer lugar:

1. Inclua o Repositório Local no seu projeto e Instale

Como este core-payment não está (supostamente) no packagist, referenciamos diretamente a pasta do módulo payment-adapter no nosso composer.json através do tipo path.

Abra o seu composer.json e adicione/mescle as configurações abaixo:

{
    "repositories": [
        {
            "type": "path",
            "url": "../payment-adapter"
        }
    ],
    "require": {
        "org/payment-adapter": "@dev"
    }
}

> Atenção: Atualize a url ("../payment-adapter") para apontar para o caminho físico real onde o payment-adapter se encontra no sistema.

E então execute no terminal do seu projeto:

composer update org/payment-adapter

2. Criando uma conta no Stripe e obtendo as Chaves de Teste

Antes de configurar as variáveis de ambiente, você precisará de uma conta no Stripe para realizar pagamentos em modo de teste:

  1. Acesse dashboard.stripe.com/register e crie sua conta gratuita.
  2. Após confirmar seu e-mail e fazer login, você será redirecionado para o Dashboard do Stripe.
  3. No topo direito da tela, certifique-se de que o Modo de teste (Test mode) está ativado (o toggle deve estar marcado e a interface pode mudar de cor para indicar o modo de teste).
  4. No menu esquerdo ou na página inicial do Dashboard, acesse a seção Desenvolvedores (Developers) e clique em Chaves da API (API keys).
  5. Você verá duas chaves: - Chave publicável (Publishable key): Começa com `pk_test_...` (usada no frontend, se necessário). - Chave secreta (Secret key): Começa com `sk_test_...`. Você precisará clicar em "Revelar chave de teste" (Reveal test key) para copiá-la.
  6. Copie a Chave secreta (`sk_test_...`), pois é ela que o `payment-adapter` usará no backend.

3. Configure as Chaves (Environment variables)

O payment-adapter carrega chaves dinamicamente via váriaveis de ambiente globais $_ENV. Configure as chaves dos Gateways que seu sistema for de fato utilizar. (Veja .env.example).

Para usar o exemplo, troque o nome do arquivo .env.example para .env

STRIPE_SECRET_KEY=sk_test_...
MP_ACCESS_TOKEN=APP_USR-...

Certifique-se que você tenha o dotenv carregando estes valores, ou defina-os manualmente.

?? Como Usar o Módulo na Prática

Realizando uma Cobrança (Charge)

A operação básica para solicitar uma assinatura, pagamento, ou redirecionamento é via o PaymentService.

use PaymentAdapter\Contracts\PaymentPayload;
use PaymentAdapter\PaymentService;

// 1. Defina os dados da cobrança de forma independente de qual será o Gateway
$payload = new PaymentPayload(
    amount: 150.00,
    currency: 'BRL',
    description: 'Meu Produto',
    customerEmail: 'cliente@email.com',
    customerName: 'Ana Bela',
    externalReference: 'ped_102030', // Seu ID interno de pedido
    metadata: ['returnUrl' => 'https://meuapp.com/obrigado'] // Ex: URL final caso seja redirecionado
);

// 2. Chame a Fachada de Pagamento dizendo qual é o Motor que você quer usar
$servico = new PaymentService('stripe'); // Pode ser 'mercadopago', etc

// 3. Resultado Universal Mapeado
$resultado = $servico->charge($payload);

// Se houver uma URL, mande o usuário para lá (Checkout Hosted)
if ($resultado->paymentUrl) {
    header('Location: ' . $resultado->paymentUrl);
    exit;
}

Consultando o Status via Webhooks

Seu site vai receber chamadas em um endpoint POST /webhook/{stripe|mercadopago} informando que o cliente acabou de pagar ou recusar no app do banco dele.

Basta instanciar novamente o PaymentService com a chave do ID Universal ("Transaction ID") enviado pelo gateway.

// /webhook.php

// Pega o ID da transação que veio no JSon puro do Webhook
$webhookPayload = json_decode(file_get_contents('php://input'));
$transactionId = $webhookPayload->data->object->id; // Ex: cs_test_12345

// Consulte o status mais atual usando o adaptador
$servico = new PaymentService('stripe');

$status = $servico->status($transactionId);

if ($status->isPaid()) {
    // ATUALIZE SEU BANCO DE DADOS: UPDATE user SET paid = 1
} elseif ($status->status === 'FAILED') {
    // ATUALIZE SEU BANCO DE DADOS: CANCELAR
}

? Adicionando novos Provedores (Ex: PagSeguro, Pix Local)

E se amanhã o cliente pedir pra colocar outro Gateway? Sua aplicação não é tocada. Nenhuma classe que gera o Payload do projeto precisará ser refatorada.

  1. Navegue até a pasta original do pacote core: `payment-adapter/src/Adapters`.
  2. Crie a classe do novo Gateway (ex: `PagarmeAdapter`) implementando `PaymentGatewayInterface`.
  3. Navegue até `payment-adapter/config/gateways.php` e registre o novo provedor:
return [
    // antigos..
    'pagarme' => [
        'class'  => \PaymentAdapter\Adapters\PagarmeAdapter::class,
        'params' => [ 'secretKey' => $_ENV['PAGARME_KEY'] ?? '' ],
    ]
];

E a partir de agora seu sistema passa a suportar Pagar.me apenas mandando o nome dele para o $service = new PaymentService('pagarme');. Simples assim.


  Files folder image Files (14)  
File Role Description
Files folder imagepayment-adapter (1 file, 2 directories)
Files folder imagepayment-example (4 files)
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files (14)  /  payment-adapter  
File Role Description
Files folder imageconfig (1 file)
Files folder imagesrc (1 file, 4 directories)
  Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files (14)  /  payment-adapter  /  config  
File Role Description
  Plain text file gateways.php Class Class source

  Files folder image Files (14)  /  payment-adapter  /  src  
File Role Description
Files folder imageAdapters (2 files)
Files folder imageContracts (2 files)
Files folder imageDTO (1 file)
Files folder imageFactory (1 file)
  Plain text file PaymentService.php Class Class source

  Files folder image Files (14)  /  payment-adapter  /  src  /  Adapters  
File Role Description
  Plain text file MercadoPagoAdapter.php Class Class source
  Plain text file StripeAdapter.php Class Class source

  Files folder image Files (14)  /  payment-adapter  /  src  /  Contracts  
File Role Description
  Plain text file PaymentGatewayInterface.php Class Class source
  Plain text file PaymentPayload.php Class Class source

  Files folder image Files (14)  /  payment-adapter  /  src  /  DTO  
File Role Description
  Plain text file PaymentResult.php Class Class source

  Files folder image Files (14)  /  payment-adapter  /  src  /  Factory  
File Role Description
  Plain text file PaymentGatewayFactory.php Class Class source

  Files folder image Files (14)  /  payment-example  
File Role Description
  Accessible without login Plain text file .env.example Data Auxiliary data
  Accessible without login Plain text file composer.json Data Auxiliary data
  Accessible without login Plain text file composer.lock Data Auxiliary data
  Accessible without login Plain text file index.php Example Example script

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0